ui自动化-pytest+airtest+ocr+flask完整落地方案
ui自动化-pytest+airtest完整落地方案
注意:目前仅支持安卓
技术方案:pytest,airtest,requests,cnocr,paddleocr,flask
代码下载
该方案都实现了什么?
- 通过ocr文字识别技术点击目标文字等
- 通过airtest图像查找技术点击目标图片
- 使用插件pytest-xdist,实现了一套代码可同时控制多个手机执行不同的用例,实现一个进程控制一个设备(可根据用例自己分配,也可以交给xdist自己调度)。
- 集成metersphere,metersphere是一个接口自动化测试平台,目前将metersphere和ui自动化做了集成,目的是通过接口自动化造数据,再进行UI自动化测试(可以根据需要调整,代码中调用的metersphere接口是自定义的,主要为你提供接口自动化和UI自动化融合的思路)
- 被测app版本检查及自动卸载安装
- 可以根据用例目录自定义用例执行优先级
- pytest-html报告集成airtest报告
- 修改airtest报告支持ip访问
- 编写pytest-html聚合报告页面
- 报告执行结果统计,钉钉通知等
核心技术
1. OCR文字识别技术
- 通过ocr文字识别技术获取目标文字坐标
- 使用ocr库:cnocr,百度paddleocr(因为部分电脑无法使用paddleocr,因此加入cnocr做了兼容)
优缺点
:执行效率低,用例可维护性强,识别成功率高- 部分功能举例:
- ocr_touch:点击目标文字
- ocr_touch_input:点击目标文字并输入
- ocr_exists:判断目标文字是否存在
- ocr断言:ocr_assert_exists,ocr_assert_not_exists
3. airtest图像识别技术
优缺点
:执行效率相对较高,用例可维护性较低,更致命的缺点是网易的图像识别技术成功率相对较低,可以自己通过poco实现来代替图像识别
4. 安卓版本检查
- 检查手机app版本,手机安装app版本与代码指定待测版本不一致,将卸载并重新安装指定版本
5. 支持app版本参数化
- 将app版本号进行参数化,可以依次执行多个app版本的测试,每一个app版本都将运行所有的用例
6. 用例执行前后分别做了什么?可以查看conftest.py
文件
- 所有用例执行前,连接一次安卓设备
- 每一个app版本测试前,进行版本检查(即卸载安装),环境切换,登录等操作(可根据业务需求调整要做什么事)
- 每一个用例执行完后生成airtest报告
- 所有用例执行完成后,生成pytest-html报告,结果统计并发送钉钉通知
如何使用及代码基本配置
- 数据库配置(用例存放测试报告及统计结果,主要作报告展示用)
config.py
文件配置安卓手机设备号,包名,被测app版本号等- 钉钉通知secret,access_token配置
- packages目录,用来存放app安装包,命名方式:
3.34.0.apk
,如果和自己需求不符合可自行调整代码
所需sql
CREATE TABLE IF NOT EXISTS pytest_report (
id INT AUTO_INCREMENT PRIMARY KEY,
report_name VARCHAR(255) NOT NULL COMMENT '测试报告的名称',
status varchar(255) NOT NULL DEFAULT 'running' COMMENT '状态:running, error, success, failed',
total INT NOT NULL DEFAULT '0' COMMENT '测试用例总数',
failed INT NOT NULL DEFAULT '0' COMMENT '失败用例数量',
passed INT NOT NULL DEFAULT '0' COMMENT '通过用例数量',
dt_created DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '报告创建的日期',
UNIQUE KEY `report_name` (`report_name`),
KEY idx_report_name (report_name)
);
报告示例
-
pytest-html聚合报告
-
自定义pytest-html报告