前言
使用 Python+selenium、python+appium 分别编写 web、Android 自动化测试用例一段时间了,先后经历了以下几个改造阶段:
- 按照官方例子,在 unittest case 中存储用例,用 Excel 记录测试结果。初步搭起了能跑的框架。
- 用例通过关键字驱动提取到 Excel 中管理,添加报告输出。 用例从脚本中剥离之后,按照业务流程快速编写了一批增删改查的用例,快速提升了覆盖率; 但用例数量、执行频率逐渐增加后,也很快凸显出用例管理、结果查看的不便。
- 用例、执行结果改为在数据库中存储和维护。 增加了用例管理、报告查看的可操作性。
- 采用分布式部署的方式进行用例执行:1 个服务器节点,多个 driver 执行节点。
- 用例存储在数据库中后,有了搭建一个用例管理平台的想法。彻底脱离在本地进行用例维护的限制,统一在服务器端进行维护。
新平台架构
代码结构:
- 管理平台:使用 Python+flask+boostrap 搭建。 包括 test case 的增删改查页面、test suite 的新增、修改、用例关联、结果汇总查看、截图查看等功能。
- 用例执行核心服务:使用 Python+macaca client 搭建。从数据库中读取待执行的用例批次列表,将用例从预定义的关键字自然语言格式,转换为对应的 macaca 命令,发送到对应的 macaca driver 节点进行执行,并记录执行结果。
用例批次执行流程:
单条用例执行流程:
自动化测试用例分为 3 个表进行管理:
(1) 测试用例表:test_case,保存测试用例的相关信息
(2) 测试批次表:test_suite,保存测试批次的相关信息
(3) 测试用例执行记录表:test_batch,上面两个表的关联表,保存每个测试用例每一次执行的结果。
- macaca driver 节点:在不同的 PC 上安装 macaca chrome、Android 等不同的 driver,用以执行服务端调度发来的用例。
服务端和分布式节点结构图:
用例格式:
步骤定义模板:
用例执行批次记录:
执行结果查看:
测试截图查看:
# 自我总结的设计要点:
- 用例以关键字进行驱动,并采用关键字模板的方式,映射到对应的 macaca 执行语句。
- 用例分为 test_case \ test_batch 两个表存储,分别是用例的初始信息,和每一次执行的历史记录。
- 由于 macaca 同时兼容 chrome、Android、iOS 等不同平台驱动,所以这些平台的用例都可以按同样的方式在这个系统中管理和执行。
- 节点端 macaca 服务启动时,向服务端发起注册,这样可以灵活、动态获取可用节点,从而调整用例的分布执行。
# 关于关键字驱动
对于关键字驱动是否值得大范围使用,见仁见智吧。
从我的实践经历来看,推广的几个 web 项目和 Android 项目,可以覆盖大部分的用例,执行效率和执行稳定性都不错; 而且如果遇到新的控件识别或操作问题,也可以通过关键字模板,或少量的定制化修改解决。