一、使用AirtestIDE运行脚本

1. 点击IDE的运行脚本按钮

假如我们使用了AirtestIDE来编写脚本,那么运行脚本的方法十分简单,直接单击IDE顶部快捷按钮的 运行脚本 按钮即可,快捷键是 F5

image-20211013174053412

点击开始运行按钮后,脚本将开始执行,log窗口中将会刷新实时log,如果此时想要停止脚本的运行,只需要点击上图中间的 停止运行 按钮即可,快捷键是 Shift+F5

image-20211013174320070

2. 右键单独调试

之前在编写脚本的章节中,我们有介绍过右键单独调试脚本(只运行选中代码),这里我们要与上述的 运行脚本 区分开来。右键单独调试脚本,是在IDE的脚本编辑窗中,选中1条或者多条脚本,单独执行,这种方式可以帮助我们快速验证部分脚本的正确性,也可以在log查看窗中看到一些调试的log,但这种调试方式不属于正式运行脚本,IDE不会帮我们保存运行的log内容。

所以同学们即使选中整个脚本,再选择只运行选中代码,执行完毕之后,IDE也不会帮助我们保存运行的log,更不能依此来生成我们的测试报告。

3. 查看运行过程的log

我们运行1个最简单的 .air 脚本来看下效果,该脚本除了新建脚本时自动帮我们补充的引入和初始化语句,仅仅包含1条 touch 脚本:

run_script

可以看到,我们点击 运行脚本 按钮之后,log查看窗会显示运行脚本的命令并且实时显示运行脚本的log内容。在运行脚本过程中,IDE会用光标标注当前运行到哪一行脚本,非常方便我们观测脚本运行情况。(该示例使用IDE自带环境运行脚本)

1)IDE运行脚本的命令

我们再来详细看一下log查看窗打印出来的内容,首先是最上面打印出来的一条运行脚本的命令:

  1. "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查看窗的筛选日志级别的快捷按钮,帮助我们快速筛选出我们想要的日志:

log

4. 内置环境和本地环境运行脚本

AirtestIDE内置了1个python环境,该python环境已经安装好了我们的airtest、pocoui等库,所以我们编写完自动化脚本之后,点击 运行脚本 ,即可使用IDE这个内置的python环境来运行我们的脚本。

但如果我们想要添加一些其它python第三方库来使用,使用IDE自带的python环境就不能满足我们的要求了。此时我们可以在IDE设置使用本地python环境来运行我们的脚本,这样我们只需要把想要的python第三方库安装到本地python环境即可:

image-20211014104459728

注意

如设置使用本地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就能使用了。

  1. pip install -U numpy==1.19.3
② Airtest安装
  • 使用 pip 安装Airtest框架 pip install airtest
  • 注意:在Mac/Linux系统下,需要手动赋予adb可执行权限,否则可能在执行脚本时遇到 Permission denied 的报错:
  1. # mac系统
  2. > cd {your_python_path}/site-packages/airtest/core/android/static/adb/mac
  3. # linux系统
  4. > cd {your_python_path}/site-packages/airtest/core/android/static/adb/linux
  5. > chmod +x adb
  • 若运行代码时,在cv2模块报 ImportError: DLL load failed: 找不到指定模块 的错,有几种解决方案:
  • 本问题的根本原因应该是DLL文件的缺失,我们将它们放入了IDE的目录中,可以直接下载一个最新版本的AirtestIDE,在解压后的目录中找到api-ms-win-downlevel-shlwapi-l1-1-0.dllIEShims.dll两个DLL文件,将他们复制到C:\Windows\System32目录,重新运行代码即可解决
  • 如果使用了python3.7,请安装 Visual C++ redistributable 2015 , 参考 文档
  • 如果使用的python版本低于3.7,请直接运行:
  1. > pip uninstall opencv-contrib-python
  2. # 若以下安装语句运行失败,可以尝试更新pip到最新版本后重试
  3. > pip install opencv-contrib-python==3.2.0.7
  • 若在win.pyimport win32api时报DLL load failed,可以尝试重新安装pywin32模块:
  1. pip uninstall pywin32
  2. pip install pywin32==223
③ Poco安装

使用 pip 安装poco框架 pip install pocoui,请注意库的名称为 pocoui,不要填错。如同时安装了 pocopocoui ,则运行脚本时会出现冲突,请确保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 脚本的命令有什么不同:

  1. # 在IDE运行.air脚本的命令
  2. "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"
  3. # 在IDE运行.py脚本的命令
  4. "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 脚本的初始化语句仅使用下述脚本即可:

  1. # -*- encoding=utf8 -*-
  2. __author__ = "AirtestProject"
  3. from airtest.core.api import *
  4. auto_setup(__file__)

即使 auto_setup 接口里面不传入任何参数,IDE也会在运行脚本时自动帮我们用命令连接设备并且保存log内容。无需我们额外处理,非常简单省事。

但 .py 的初始化脚本却不同:

  1. # -*- encoding=utf8 -*-
  2. __author__ = "AirtestProject"
  3. from airtest.core.api import *
  4. from airtest.cli.parser import cli_setup
  5. if not cli_setup():
  6. 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环境来运行脚本,将不会高亮显示当前运行到了哪一句脚本。