一、环境准备,
1、xcode
2、Airtest
3、python
4、node.js(npm)
5、cnpm
6、ios-deploy
7、brew
8、libimobliedevice依赖库(真机)
9、carthage依赖库(被webdriveragent使用)
10、在 iOS 设备上安装 WebDriverAgent
1)安装 WebDriverAgent 依赖
# Appium 桌面版本
cd /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent
sh ./Scripts/bootstrap.sh
# Appium 命令行版本
cd /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent
sh ./Scripts/bootstrap.sh
2)使用 Xcode 打开 WebDriverAgent 项目:点击 Finder→前往→前往文件夹…,输入以下路径,点击前往,双击文件夹下的 WebDriverAgent.xcodeproj 打开项目
3)在 Xcode 中添加开发者账号:点击上方菜单栏的 Xcode→Preferences→Accounts,点击左下角的 + 按钮,选择 add Apple ID,添加自己的 Apple ID 作为开发者账号
4)编译 WebDriverAgentLib
5)编译 WebDriverAgentRunner
6)将 WebDriverAgentRunner 安装到 iOS 设备
7)调用 WebDriverAgent 接口
设置代理¶
iproxy可以将iPhone端口映射到计算机端口,然后可以通过访问计算机端口来访问电话端口。
通常情况下,您需要通过设置USB代理来访问手机上的代理。您可能无法直接通过wifi访问手机。出于特定原因,请参阅问题和详细信息。
通过Homebrew安装iproxy
$ brew install libimobiledevice
b运行iproxy
$ iproxy 8100 8100
启动成功后,您可以尝试在浏览器中访问http://127.0.0.1:8100/status。如果访问成功,并且您可以看到一些json格式的手机信息,则表示启动成功。此时,请访问http://127.0.0.1:8100/inspector以查看浏览器上投射的iPhone屏幕;接下来就可以开始执行代码了。
二、本地python环境运行
1、用本地 python 环境跑 Airtest 或者 poco 脚本之前,需要先安装上这俩个库(使用 pip install airtest 和 pip install pocoui 来安装)。
2、脚本中进行设备连接
# 方法一:在auto_setup()接口添加设备
auto_setup(__file__,devices=["Android://127.0.0.1:5037/SJE5T17B17"])
auto_setup(__file__,devices=["iOS:///127.0.0.1:8100"])
# 方法二:用connect_device()方法连接设备
dev = connect_device("Android://127.0.0.1:5037/SJE5T17B17")
# 方法三:用init_device()方法连接设备
init_device(platform="Android",uuid="SJE5T17B17")
3、检查图片地址
程序可以根据这个相对路径找到截图文件的原因在于,我们利用 auto_setup(__file__) 初始化脚本的时候,传入了一个 basedir (参数值为__file__,即当前脚本所在路径),程序会默认根据这个 basedir 去寻找脚本中存在的相对路径。
因此我们要把脚本中用到的截图文件,也复制到新建项目的所在目录下,这样才可以让程序根据截图脚本上的相对路径正确找到我们的截图文件。
当然我们也可以选择把截图脚本上面的相对路径,改成绝对路径,这样程序也能够根据绝对路径找到我们的截图文件:
touch(Template(r"D:/test/tpl1590718697837.png", rgb=True, record_pos=(-0.383, 0.717), resolution=(1080, 1920)))
4、生成测试报告
# generate html report
from airtest.report.report import simple_report
simple_report(__file__, logpath=True)
其实我们是希望不论测试用例能不能执行通过,都可以给我们一个报告反馈,所以我们可以使用 try-finally 语句,无论是否发生异常都将执行最后的代码:
try:
touch(Template(r"tpl1590718697837.png", threshold=0.9, record_pos=(0.378, 0.098), resolution=(1080, 1920)))
finally:
# generate html report
simple_report(__file__, logpath=True)
三、代码结构
common:封装了一些通用函数,如获取图片地址、上滑、翻页等
driver:设置连接的测试设备
page:按页面定义,用来封装获取页面元素
report:用来放airtest的测试报告及截图数据
resources:airtest框架可以使用图像识别进行自动化,存放测试图片
testcase:按页面定义,用来管理case
conftest:配置装饰器,用于执行特定函数
run:用于启动整个项目
四、总结
整个框架就是基于Pytest的自动化管理用例,Airtest的2大定位框架进行搭建。
Airtest:对公众号、小程序的元素控件进行抓取,可使用Poco定位或Airtest图像识别进行
Pytest:对整体用例集、用例进行管理;可单条,批量执行,分类执行等等。