一、背景:
为了做app的自动化,由于app元素定位麻烦或者定位不稳定,又或者使用驱动版本等原因,不想使用启动appnium服务的方式。
本文采用网易的airtest框架图像识别作为基础,配合pytest进行简单的二次开发形成一套对安卓app,小程序的UI功能自动化测试框架。
二、框架简介:
框架集成使用pytest+pocoui+airtest+allure
,所以命名为ppa_project. 其中pytest负责用列的管理,可以对用例进行单条,多条,分类执行等等。同时,pocoui+airtest 负责UI控件的定位和图像的识别。框架的核心要素,allure负责测试报告的生成。
三、项目目录:
项目目录详细注解:
base:封装基础方法 如滑动,点击等
config : 手机设备信息,app包信息 测试数据等yaml配置文件
logs : 记录每次运行的日志
page :app的每个页面的元素,其中main_page 作为app的初始页面。
reports :测试报告的数据和生成allure报告的地方。
testcase :测试用例文件。
testcase/case_image 存放用例中的图片(我这里是分页面存放)
utils :工具类,包含日志,发送邮件等
launch.py: 设备的连接和app的启动文件
run.py: 项目启动入口
四、核心代码解释:
1)连接手机,启动app,
读取config/device.yaml文件中的deviceName和appPackage。 在launch文件中使用start_app()和close_app() 启动和关闭app
2)main_page. 初始化poco
3) login_page 在登录页面引入main_page 开始启动app,然后app启动过程中肯定需要一定的时间,这个跟测试的手机性能有关,所以我们就循坏去找首页是否出现,找到了就算成功。然后在判断app是否已经登录,如果未登录进入登录流程,如果已经登录则开始后面的业务流程测试了?。
4)业务流程测试 : 举个test_order例子(我这里未使用po模式封装,大家可以自行优化)
5) 最为关键的conftest文件,为了只让app启动登录一次,完成所有的测试用例后,然后退出app。 在testcase目录下创建conftest文件,代码如下:
注意:fixture(scope=‘session’, autouse=True)。 #scope=“session” 那么,在该目录下的所有的测试用例只会执行一次 在所有的用例开始前会执行yield前面的代码在所有的用例结束后会执行yield后面的代码
五、说了这么多,最后说说本框架的的具体使用方法。
1、python版本使用3.7
2、安装项目需要的依赖文件 pip install requirements.txt
3、配置allure 环境变量,安装方法参考百度
4、脚本编写,先在airtestIDE中编写好脚本,可以使用poco和airtest截图 并且将脚本跑通。
5、在airtestIDE中将脚本切换成代码形式,并将脚本复制到ppa_project/testcase 中(这里根据自己定义的pytest规则脚本),图片复制testcase/case_image中,并且修改脚本中的图片路径,使脚本可以找到对应的图片
6、可以通过page目录,做成po模式,将管理测试用列和具体的执行方法分开(本文待优化)
7、通过run文件,自定义需要执行的case。
看完文章的你,点点赞,加加关注,共同学习,共同进步!