自动化工具 Python+flask+bootstrap+macaca 搭建 web/ Android 自动化测试管理平台

Jerry li · 2017年12月12日 · 最后由 Jerry li 回复于 2019年06月30日 · 8896 次阅读

前言

使用 Python+selenium、python+appium 分别编写 web、Android 自动化测试用例一段时间了,先后经历了以下几个改造阶段:

  1. 按照官方例子,在 unittest case 中存储用例,用 Excel 记录测试结果。初步搭起了能跑的框架。
  2. 用例通过关键字驱动提取到 Excel 中管理,添加报告输出。 用例从脚本中剥离之后,按照业务流程快速编写了一批增删改查的用例,快速提升了覆盖率; 但用例数量、执行频率逐渐增加后,也很快凸显出用例管理、结果查看的不便。
  3. 用例、执行结果改为在数据库中存储和维护。 增加了用例管理、报告查看的可操作性。
  4. 采用分布式部署的方式进行用例执行:1 个服务器节点,多个 driver 执行节点。
  5. 用例存储在数据库中后,有了搭建一个用例管理平台的想法。彻底脱离在本地进行用例维护的限制,统一在服务器端进行维护。

新平台架构

代码结构:

  1. 管理平台:使用 Python+flask+boostrap 搭建。 包括 test case 的增删改查页面、test suite 的新增、修改、用例关联、结果汇总查看、截图查看等功能。
  2. 用例执行核心服务:使用 Python+macaca client 搭建。从数据库中读取待执行的用例批次列表,将用例从预定义的关键字自然语言格式,转换为对应的 macaca 命令,发送到对应的 macaca driver 节点进行执行,并记录执行结果。

用例批次执行流程:

单条用例执行流程:

自动化测试用例分为 3 个表进行管理:
(1) 测试用例表:test_case,保存测试用例的相关信息
(2) 测试批次表:test_suite,保存测试批次的相关信息
(3) 测试用例执行记录表:test_batch,上面两个表的关联表,保存每个测试用例每一次执行的结果。

  1. macaca driver 节点:在不同的 PC 上安装 macaca chrome、Android 等不同的 driver,用以执行服务端调度发来的用例。

服务端和分布式节点结构图:

用例格式:

步骤定义模板:

用例执行批次记录:

执行结果查看:

测试截图查看:

# 自我总结的设计要点:

  1. 用例以关键字进行驱动,并采用关键字模板的方式,映射到对应的 macaca 执行语句。
  2. 用例分为 test_case \ test_batch 两个表存储,分别是用例的初始信息,和每一次执行的历史记录。
  3. 由于 macaca 同时兼容 chrome、Android、iOS 等不同平台驱动,所以这些平台的用例都可以按同样的方式在这个系统中管理和执行。
  4. 节点端 macaca 服务启动时,向服务端发起注册,这样可以灵活、动态获取可用节点,从而调整用例的分布执行。

# 关于关键字驱动
对于关键字驱动是否值得大范围使用,见仁见智吧。

从我的实践经历来看,推广的几个 web 项目和 Android 项目,可以覆盖大部分的用例,执行效率和执行稳定性都不错; 而且如果遇到新的控件识别或操作问题,也可以通过关键字模板,或少量的定制化修改解决。

共收到 8 条回复 时间 点赞

开源么

回复

暂时还在内部试用,部分功能还在完善,待整理完成再共享出来

思路不错,持续关注

再加上测试结果统计的话会更完善,加油

Jerry li 接口自动化测试框架搭建思路 中提及了此贴 01月12日 18:01
Jerry li 接口自动化测试框架搭建思路 中提及了此贴 01月15日 09:56
Jerry li docker+selenium 搭建和踩坑记录 中提及了此贴 05月08日 16:06
simple 专栏文章:[精华帖] 社区历年精华帖分类归总 中提及了此贴 12月13日 14:44
simple [精彩盘点] TesterHome 社区 2018 年 度精华帖 中提及了此贴 01月07日 12:08
Jerry li 回复

@Jerry li 请问自动化测试数据怎么回滚,目前使用的是 teardown 方法 执行 sql 回滚数据,python 有没有类似 java 的单元测试事务不提交,数据回滚的操作

Dorom 回复

Python 的 unittest 也有 teardown,可以了解一下

Jerry li 回复

场景: 使用 unittest + requests 测试一个 insert 接口
问题: 接口请求成功,数据插入到数据库,使用 teardown 在不写具体的 delete 或 update sql 时怎么清理数据

看了 unittest 的官方文档介绍 setup、teardown 方法,只描述两个方法的作用,和执行顺序,我并没有找到我想要的答案,请问你们是怎么处理的 谢谢

Dorom 回复

不 delete,你想用什么办法来清理数据呢?
Python 的 teardown 和 JAVA 的应该没什么区别,逻辑都是在执行完所有用例后的清理工作,重点是你用什么方式来清理

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册