1. 项目简要
项目结合 Pytest+Airtest中的Poco框架 做UI自动化
Airtest资料地址
https://airtest.doc.io.netease.com/IDEdocs/airtest_framework/0_airtest_info/
参考PO模型进行项目结构设计
PO模型详解
https://zhuanlan.zhihu.com/p/429912748
2. UI自动化所需工具
- AirtestIDE: 跨平台的UI自动化编辑器
Airtest入门 - AirtestIDE基本使用_闪亮伞的博客-CSDN博客
https://q9jvw0u5f5.feishu.cn/docx/AU19dENPDodzeoxCykxctdDGnkc#Kgfkd10wfoP1sRxmlTWcs02Dnbc
- PyCharm: Python 集成开发环境
PyCharm安装教程,Pycharm下载使用教程 - Pycharm.com.cn
https://q9jvw0u5f5.feishu.cn/docx/AU19dENPDodzeoxCykxctdDGnkc#GLHYdBLYSou6bfx8psTcnRzKn4b
3. 自动化使用特殊包
- 需要手动赋应用所需系统权限
- 需要屏蔽应用内相关弹窗,以防阻碍自动化进行
4. 项目目录结构设计
├─.idea
├─.pytest_cache
├─airtest
├─assets
├─common //存放通用方法
├─core //存放常用方法
│ ├─file_reset
├─image //存放图片识别相关的图片
│ └─home
├─page //存放页面级别操作
│ ├─auth
│ ├─channel
├─poco
├─report //存放测试报告
│ └─assets
├─TestCase //存放ui自动化用例
│ ├─channel
5. 如何编写ui自动化用例
(以Android机型为例)
步骤一:在AirtestIDE中利用poco辅助窗上获取UI控件,操作控件
1.Poco辅助窗选择Android
2.选择控件定位
3.在设备窗将鼠标移到需要选中的控件上
4.双击Poco辅助窗下显示的定位到的控件元素,脚本编辑窗会以代码形式出现对应的控件
Poco可以使用类似 poco(“OK”).click() 的方式来获取并操作节点
步骤二:复制控件元素到Pycharm
1.提前导入poco和airtest包,复制控件操作代码到项目代码中。(页面操作放在page目录)
from airtest.core.api import *
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
class Channel:
"""房间相关的操作"""
@staticmethod
def join_channel():
"""点击首页进房按钮,进房"""
poco("My Room").wait_for_appearance(timeout=10)
poco("My Room").click()
poco("MLBB").wait(timeout=5).click()
poco("Start").click()
assert_equal(poco("RANK").exists(), True, "MLBB房间页面")
原则:
- 每个页面功能操作放在一个方法中
- 一个页面中的操作,起始页面最好统一 (用例结束后,操作最好回到统一的页面,以保证上一个页面操作不会影响下一个页面操作)
- 每个用例操作都需要断言
- 有些页面加载慢可以增加等待操作,poco有自带的等待点击事件或者用sleep方法
- 为了防止用例执行过程中出错可以增加装饰器跳过错误或进行重试
2.用例文件调用操作方法。(用例放在TestCase目录)
class TestJoinChannel:
"""进房用例用例集"""
@testcase_fail_reset_page(ResetPage.CHANNEL) //装饰器:重启应用回到房间页面
def test_join_channel(self):
"""进房"""
channel.join_channel()
步骤三:在配置文件中,指定用例执行顺序
创建配置文件conftest.py,导入以下代码,可以修改用例执行顺序。
注意: #appoint_classes 内是测试文件中的类名
def pytest_collection_modifyitems(config, items):
"""用例执行顺序"""
# 期望用例顺序按照.py文件执行
appoint_classes = {"TestDeviceInit": [], "TestJoinChannel": [], "TestSendScreen": [], "TestUpdateChannel": [],
"TestMicOperate": [], "TestLeaveChannel": []}
步骤四:输出测试报告
pytest.ini文件中插入以下代码,即可输出html格式报告
[pytest]
addopts = -s --html D:/ui-testing/report/report.html
输出其他更高级的测试报告,可以了解以下链接:(Allure报告)
Pytest测试框架(五):pytest + allure生成测试报告_-CSDN博客:
https://blog.csdn.net/u010698107/article/details/111416173?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-111416173-blog-122713150.235v38pc_relevant_default_base&spm=1001.2101.3001.4242.1&utm_relevant_index=1