一、使用AirtestIDE运行脚本
1. 点击IDE的运行脚本按钮
假如我们使用了AirtestIDE来编写脚本,那么运行脚本的方法十分简单,直接单击IDE顶部快捷按钮的 运行脚本
按钮即可,快捷键是 F5
:
点击开始运行按钮后,脚本将开始执行,log窗口中将会刷新实时log,如果此时想要停止脚本的运行,只需要点击上图中间的 停止运行
按钮即可,快捷键是 Shift+F5
:
2. 右键单独调试
之前在编写脚本的章节中,我们有介绍过右键单独调试脚本(只运行选中代码),这里我们要与上述的 运行脚本 区分开来。右键单独调试脚本,是在IDE的脚本编辑窗中,选中1条或者多条脚本,单独执行,这种方式可以帮助我们快速验证部分脚本的正确性,也可以在log查看窗中看到一些调试的log,但这种调试方式不属于正式运行脚本,IDE不会帮我们保存运行的log内容。
所以同学们即使选中整个脚本,再选择只运行选中代码,执行完毕之后,IDE也不会帮助我们保存运行的log,更不能依此来生成我们的测试报告。
3. 查看运行过程的log
我们运行1个最简单的 .air
脚本来看下效果,该脚本除了新建脚本时自动帮我们补充的引入和初始化语句,仅仅包含1条 touch
脚本:
可以看到,我们点击 运行脚本
按钮之后,log查看窗会显示运行脚本的命令并且实时显示运行脚本的log内容。在运行脚本过程中,IDE会用光标标注当前运行到哪一行脚本,非常方便我们观测脚本运行情况。(该示例使用IDE自带环境运行脚本)
1)IDE运行脚本的命令
我们再来详细看一下log查看窗打印出来的内容,首先是最上面打印出来的一条运行脚本的命令:
"D:\demo\AirtestIDE-win-1.2.12\AirtestIDE\AirtestIDE" runner "D:\test\song.air" --device android://127.0.0.1:5037/127.0.0.1:7555?cap_method=MINICAP&&ori_method=MINICAPORI&&touch_method=MINITOUCH --log "D:/test/test01\0d86098ed0cd4a54c8c611578a3d71b7"
这条命令的意思是使用IDE自带的环境运行 song.air
这个脚本,设备是端口号为7555的mumu模拟器,log内容保存在 D:/test/test01\0d86098ed0cd4a54c8c611578a3d71b7
目录下。
我们可以直接复制该命令到终端运行。
2)在log查看窗筛选日志级别
运行脚本后,log查看窗除了最上面的1条运行脚本的命令之外,剩余的就是一些 [debug]、[info]等log信息,如果我们只关注log里面的[error]信息,可以直接借助log查看窗的筛选日志级别的快捷按钮,帮助我们快速筛选出我们想要的日志:
4. 内置环境和本地环境运行脚本
AirtestIDE内置了1个python环境,该python环境已经安装好了我们的airtest、pocoui等库,所以我们编写完自动化脚本之后,点击 运行脚本
,即可使用IDE这个内置的python环境来运行我们的脚本。
但如果我们想要添加一些其它python第三方库来使用,使用IDE自带的python环境就不能满足我们的要求了。此时我们可以在IDE设置使用本地python环境来运行我们的脚本,这样我们只需要把想要的python第三方库安装到本地python环境即可:
注意
如设置使用本地python环境来运行脚本,则与IDE自带的环境无关了,此时查看自己是否使用最新的环境来运行脚本,并不是查看IDE的版本号是否是最新的,而是要看设置python环境里面的airtest、pocoui库是否为最新的。
1)如何部署本地python环境
在IDE设置使用本地python环境非常简单,只需要在IDE的设置里面设置下python.exe的路径即可,但并不是随便1个python环境,都可以运行我们编写的airtest或者poco脚本,我们需要提前在这个python环境里面部署好相关的python第三方库:
① python版本选择
支持Python2.7或<=3.9,我们更推荐使用 Python3
,如果你愿意的话我们也同样建议使用 virtualenv
等虚拟环境新建一个干净的python环境。
注意:python3.9如果安装完毕还不能使用airtest,报错 ImportError: numpy.core.multiarray failed to import
,可以手工将 numpy
版本号降级至1.19.3就能使用了。
pip install -U numpy==1.19.3
② Airtest安装
- 使用 pip 安装Airtest框架
pip install airtest
- 注意:在Mac/Linux系统下,需要手动赋予adb可执行权限,否则可能在执行脚本时遇到
Permission denied
的报错:
# mac系统
> cd {your_python_path}/site-packages/airtest/core/android/static/adb/mac
# linux系统
> cd {your_python_path}/site-packages/airtest/core/android/static/adb/linux
> chmod +x adb
- 若运行代码时,在
cv2
模块报ImportError: DLL load failed: 找不到指定模块
的错,有几种解决方案: - 本问题的根本原因应该是DLL文件的缺失,我们将它们放入了IDE的目录中,可以直接下载一个最新版本的AirtestIDE,在解压后的目录中找到
api-ms-win-downlevel-shlwapi-l1-1-0.dll
和IEShims.dll
两个DLL文件,将他们复制到C:\Windows\System32
目录,重新运行代码即可解决 - 如果使用了python3.7,请安装 Visual C++ redistributable 2015 , 参考 文档
- 如果使用的python版本低于3.7,请直接运行:
> pip uninstall opencv-contrib-python
# 若以下安装语句运行失败,可以尝试更新pip到最新版本后重试
> pip install opencv-contrib-python==3.2.0.7
- 若在
win.py
中import win32api
时报DLL load failed
,可以尝试重新安装pywin32模块:
pip uninstall pywin32
pip install pywin32==223
③ Poco安装
使用 pip 安装poco框架 pip install pocoui
,请注意库的名称为 pocoui
,不要填错。如同时安装了 poco
和 pocoui
,则运行脚本时会出现冲突,请确保python环境里面只安装了正确的 pocoui
。
④ airtest-selenium安装
使用 pip 安装airtest-selenium框架 pip install airtest-selenium
,不做web测试python环境可以暂时不安装此框架,有需要再安装即可。
⑤ pip指令运行失败
国内用户请在pip install
指令后面加上 -i https://pypi.tuna.tsinghua.edu.cn/simple
(清华源)后重试,参考链接 。
2)使用本地python环境出现 no moudle named ...
若我们在IDE设置了使用本地python环境来运行脚本,但是出现类似 no moudle named airtest
之类的报错,是因为我们设置的本地python环境里面未安装相关的库导致的,我们可以参考 如何部署本地python环境 的内容来安装好对应的第三方库。
另外也有些同学会说,我明明在本地python环境里面安装好了airtest等库,并且使用 pip list
命令也能看到已经安装好了,但是IDE设置的本地环境还是报找不到库的错误,这时我们应该检查本地是否存在多个python环境,我们在哪个python环境里面安装了库,又在IDE设置使用了哪个python环境。
5. 在IDE运行.air脚本和.py脚本的区别
1)运行命令的区别
首先我们对比下运行 .air
脚本和 .py
脚本的命令有什么不同:
# 在IDE运行.air脚本的命令
"D:\demo\AirtestIDE-win-1.2.12\AirtestIDE\AirtestIDE" runner "D:\test\song.air" --device android://127.0.0.1:5037/127.0.0.1:7555?cap_method=MINICAP&&ori_method=MINICAPORI&&touch_method=MINITOUCH --log "D:/test/test01\0d86098ed0cd4a54c8c611578a3d71b7"
# 在IDE运行.py脚本的命令
"D:\demo\AirtestIDE-win-1.2.12\AirtestIDE\AirtestIDE" pyrunner "D:\test\song.py"
可以看到,在IDE运行 .air
脚本,会自动帮我们传入设备窗口连接的设备信息,并且在默认的log存放路径下保存运行的log内容;
但运行 .py
脚本就只是单纯地运行了1个 .py
文件,并未帮我们在命令中传入任何设备信息或者保存log的信息。
这就意味着,在IDE中运行 .py 脚本,连接设备和保存log的工作要我们自行在 .py
脚本中处理。
2)初始化脚本的区别
这也就意味着,.air
和 .py
的初始化脚本是不一样的。.air
脚本的初始化语句仅使用下述脚本即可:
# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
auto_setup(__file__)
即使 auto_setup
接口里面不传入任何参数,IDE也会在运行脚本时自动帮我们用命令连接设备并且保存log内容。无需我们额外处理,非常简单省事。
但 .py 的初始化脚本却不同:
# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
from airtest.cli.parser import cli_setup
if not cli_setup():
auto_setup(__file__, logdir=True, devices=["android://127.0.0.1:5037/127.0.0.1:7555?cap_method=MINICAP&&ori_method=MINICAPORI&&touch_method=MINITOUCH",])
这段初始化代码的意思是说,当使用 python xxx.py
来运行本文件,不带任何命令行参数时,则自动使用 auto_setup 这个接口来对airtest相关的参数进行初始化。这里的 auto_setup
接口里面,设置了 logdir=True
,即在当前脚本目录下保存log内容,方便后续生成airtest报告;devices
传入了1个设备列表,里面包含1台端口号为7555的mumu模拟器,即表示当前脚本会在这台设备上面运行。
在脚本里面处理好了期望的参数,我们就能直接用 python xx.py
指令来运行脚本。而原先的 airtest run xx.air --devices xx
也不受影响,只要脚本检测到传入了命令行参数,就依然优先使用命令行参数来初始化airtest。
注意
所以我们非常建议新手同学使用 .air
脚本而不是 .py
脚本,当然,如果同学们已经非常熟悉俩者的区别,可以轻松地在 .py
脚本中添加必要的参数,也可以使用 .py
脚本来编写我们的自动化脚本。
6. 运行脚本的注意事项
1)请勿随意删除初始化脚本
在IDE新建 .air
或者 .py
脚本时,都会自动帮我们插入一些初始化代码,请同学们务必不要轻易删除这些初始化代码,以免影响脚本的正常运行。
2)注意区分正式运行和只运行选中代码
点击 运行按钮
运行脚本,与 只运行选中代码
的差别是很大的,点击 运行按钮
运行脚本,IDE可以帮助我们保存log内容,方便后续生成airtest报告;但 只运行选中代码
就只是简单的调试了一下脚本,IDE并不会帮助我们保存log内容,也就不能直接生成airtest报告了。
3)设置本地Python环境运行脚本无高亮显示
上文中我们也有提到,使用IDE自带的python环境在运行脚本过程中,IDE的脚本编辑窗口会用高亮显示当前运行到了哪一条脚本;但如果在IDE中设置了本地python环境来运行脚本,将不会高亮显示当前运行到了哪一句脚本。