# 1. 前言
基本上规范的大型项目都有自动化测试,它可以快速发现问题,提升敏捷开发的信心。
自动化测试可以检测:
- 页面白屏,即使只写一个用例也可以检测出来,成本最低
- 功能异常,比如对赛宝主流程的检测
- api异常,可监控api是否报错、是否超时
- js错误,可监控页面js是否发生错误
- 样式异常,可监控页面元素样式
赛宝项目目前有101个页面,每次上线前都要经过功能测试、冒烟测试、开发自测等环节,花费了不少时间,为了提高效率,再次启动了自动化测试。
# 2. H5自动化测试
# 2.1. 技术选型
语言上,选择了前端熟悉的typescript,框架上,选择了Cypress(之前是Puppeteer)。Cypress相对于Puppeteer有以下优点:
- 专业的自动化测试工具,自带断言、异步等待等特性,减少维护成本
- 可自动重试、自动等待元素等,稳定性高
- 采用JS注入页面,测试时间短,执行效率高
# 2.2. 项目架构
目前H5的自动化测试项目架构如下,分为项目创建、用例管理、测试计划、任务调度、结果归档与通知。

- 项目创建,在研发平台完成,一分钟内即可完成新项目接入。
- 用例管理,目前在 pmd-auto-test 项目中管理所有用例,每个项目单独一个目录,扁平化的放置每个用例文件,每个测试文件不超过10个用例,方便后续维护。
- 测试计划,可分项目、分批次执行测试用例,可针对不同优先级的用例制定不同的计划,也可避免同一时间大量用例同时执行,减轻对后台服务的压力。
- 任务调度,使用前端任务调度通用模块,依次执行测试计划。
- 结果归档与通知,报告处理涉及三个平台,研发平台记录测试结果,COS存储录屏,失败通知发送给机器人。


# 2.3. 接入项目
新项目接入十分简单,在研发平台可以填写表单,一键创建新的自动化测试项目,然后在 pmd-auto-test
中进行测试编写即可。
目前已经接入的项目有:
- 赛宝
- 赛宝pro
- HoK Club
- 王者微社区
- 王者商户特权
- 和平人生

# 2.4. 支持多分支、多环境
目前自动化测试项目支持:
- 分项目执行
- 分批次执行
- 多分支、多环境执行
分项目执行在项目之间解耦,方便维护。
分批次执行,可区分优先级,并减少接口请求密度。
支持多分支、多环境,可测试预发布环境,比如赛宝发布前需执行一次自动化测试,通过后才可以发布。
# 3. 小程序自动化测试
小程序自动化测试采用 Minitest
框架,语言为 python
,可支持云测。
目前赛宝小程序已接入,测试用例涵盖了创建赛事、赛程管理等功能。
小程序自动化测试项目架构与H5基本一致,只是项目创建、测试计划、任务调度模块均在 Minitest
管理平台操作。这里后续在有更多需求时,会集成到研发平台处理。

# 4. 效果与展望

赛宝自动化测试用例目前有60多条,并复用到了赛宝Pro、HoK Club中。自动化测试投入以来,发现了线上的一些问题,并进行了处理,证明了其有效性。
另外,部门内的测试同学也加入进来,编写了王者微社区的一些H5用例。
由于自动化测试面向业务,需要跟随业务不断更新,希望更多开发者可以参与,使其发挥更大的作用。