4.1 使用AirtestIDE运行脚本

假如你使用了AirtestIDE来编写脚本,那么运行脚本的方法十分简单:

ide_run

单击AirtestIDE的Run Script按钮即可,快捷键是F5

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

查看运行结果

在运行脚本后,可以立刻在log窗口中看到当前脚本执行成功还是失败,然而不能够看到更加详细直观的执行结果。在AirtestIDE中,可以点击上图中的第三个按钮View Report按钮,快捷键为Ctrl+L,稍等片刻后将会自动使用默认浏览器打开结果报告页面:

view report

4.2 使用命令行运行脚本

我们的脚本在编写完成后,除了使用AirtestIDE可以运行之外,也支持用脚本运行。

1. 使用AirtestIDE命令行运行

即使本地没有安装python环境,或是没有安装airtestpoco,我们也一样能够使用命令行来运行脚本,诀窍就是复制刚才在AirtestIDE里运行脚本时log窗口里显示出来的命令行:

idecmd

将运行脚本时AirtestIDE生成的这段命令行代码复制到你的命令行终端里,回车运行就可以了。

注意, 这种使用AirtestIDE命令行来运行脚本的方式,是一个简单快速的方式,假如想要批量执行、同时执行的话,可能会遇到效率不佳的问题。若有长时间或批量执行脚本的需求,请尽量在本地Python环境安装airtest和poco来执行脚本,详情见下一节。

2. 使用本地python环境运行脚本

方法1中介绍的使用AirtestIDE命令行来运行脚本,虽然很方便,但是不适合更复杂的操作(例如想同时用多个命令行运行多台手机、多个脚本等情况),以及对于一些Python开发者来说,可能需要在脚本中使用其他功能强大的Python第三方库。因此我们更加推荐在本地python环境中安装airtest和pocoui,然后用命令行运行脚本。

部署Python环境

想要使用本地python环境来运行脚本,需要配置本地的运行环境:

  • Python(2.7或<=3.6),我们更推荐使用Python3,如果你愿意的话我们也同样建议使用virtualenv等虚拟环境新建一个干净的python环境

  • 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
      
    • 若在安装opencv-contrib-python库时,提示找不到我们指定的3.2.0.7版本时,可以考虑更新你的pip到最新之后再进行重试,以及暂时先不要使用刚刚推出的pyhont3.7版本(可以使用稳定的python3.6.5版本)。

  • Poco安装

    • 使用 pip 安装poco框架 pip install pocoui,请注意库的名称为pocoui,不要填错

环境部署完成后,我们就能够脱离AirtestIDE,在不同的宿主机器和被测平台上运行脚本了。

使用python命令行运行脚本

以下是一个使用命令行运行的例子:

>airtest run untitled.air --device Android:///手机设备号 --log log/
>python -m airtest run untitled.air --device Android:///手机设备号 --log log/

这两个命令行的效果是相同的,我们用airtest运行了一个叫做untitled.air的脚本,传入了--device--log两个参数,分别是我们的手机设备和log输出目录。

airtest run命令必须传入的参数是指定脚本的路径,其他可选参数有--device指定设备字符串--log指定log输出目录,其他参数请查阅Airtest-running-air-from-cli文档。

关于设备字符串

在刚才的命令行中使用的--device参数,传入的是一个设备字符串,以安卓设备为例,字串完整定义如下:

Android://<adbhost[localhost]>:<adbport[5037]>/<serialno>

其中,adbhost是adb server所在主机的ip,adb port默认是5037,serialno是android手机的序列号。更多adb的方面的内容请参考文档developer.google。

在平时的脚本运行中,我们一般可以这样写:

# 什么都不填写,会默认取当前连接中的第一台手机
Android:///
# 连接本机默认端口连的一台设备号为79d03fa的手机
Android://127.0.0.1:5037/79d03fa
# 连接一个Windows窗口,窗口句柄为123456
Windows:///123456
# 连接一个Windows窗口,窗口名称匹配某个正则表达式
Windows:///?title_re=Unity.*
# 连接iOS手机
iOS:///127.0.0.1:8100

值得一提的是,windows窗口的连接使用了pywinauto库,在AirtestIDE中默认是使用当前已连接到IDE里的窗口句柄来连接的。可以预想到,假如窗口关闭了,下一次再开启时,句柄就可能发生变化。因此我们的连接字符串支持了pywinautoconnect接口去连接窗口,查阅参考文档里的几种参数填写方式来写连接字符串的参数部分:Windows:///?name=value

部分安卓设备的特殊参数

2.2 Android连接常见问题中,我们提到了部分设备由于较为特殊,需要在连接时勾选 use ADB orientation 或是 use javacap等特殊连接选项后才能连接手机,这些设备在使用命令行运行脚本时,也同样需要将这些参数附加在设备字符串后面:

# 连接了模拟器,勾选了`Use javacap`模式
Android://127.0.0.1:5037/127.0.0.1:7555?cap_method=JAVACAP
# 所有的选项都勾选上之后连接的设备,用&&来连接多个参数字符串
Android://127.0.0.1:5037/79d03fa?cap_method=JAVACAP&&ori_method=ADBORI&&touch_method=ADBTOUCH

注意:在一些操作系统上(如windows下),命令行中如果有出现^ < > | &这些字符都需要转义,因此如果连接字符串中需要写&&时,需要改写成^&^&,添加一个^符号进行转义,即:

# --device Android://127.0.0.1:5037/79d03fa?cap_method=JAVACAP&&ori_method=ADBORI 在windows下不可用
--device Android://127.0.0.1:5037/79d03fa?cap_method=JAVACAP^&^&ori_method=ADBORI  # 添加^转义后效果

设置本地Python.exe为AirtestIDE默认环境

AirtestIDE中使用的Python,是一个默认的Python环境,里面内置了Airtest和Poco,虽然使用起来很方便,但是假如需要使用一些其他的第三方库就无法支持了。此时我们可以通过设置本地的Python.exe路径到AirtestIDE的设置里,使AirtestIDE可以方便地使用本地Python环境来执行脚本,这样哪怕是Python2也都是支持的,详细的设置方法请参见 选项配置-使用本地Python环境运行脚本

3. 生成运行结果报告

我们的脚本运行过程,与报告生成过程是独立的两个步骤,因此在运行过airtest run script.air后,假如没有指定--log log/参数,Airtest将把生成的log内容放到当前脚本的目录里(如果指定了--log参数,log内容与截图将会放在指定目录里)。

然后,我们可以运行airtest report指令来生成一份HTML格式的报告:

# 最简单的命令行,log文件与脚本文件在同一文件夹里
# 运行以下指令,在当前目录生成一个log.html
>airtest report "untitled.air"
log.html

airtest report必须传入的参数就是我们的运行脚本,其他支持的可选参数比较多,具体可以查阅Airtest_generate-html-report,这里给出一个最常见的命令行范例:

>airtest report untitled.air --log_root log/ --outfile log/log.html --lang zh

这条指令使用了当前目录下的log/目录里的log内容,来生成了一个html报告(报告存放在当前目录下的log/目录里,名为log.html),并将它放在了log目录下,同时指定了显示语言为中文。

由于有时我们需要将报告拷贝到另外一个目录,或者是打包发给别人查看,但是直接生成的报告是无法复制到别的目录下查看的。我们提供了一个导出模式,在刚才的report指令后面添加一个参数--export导出目录路径,即可将报告完整导出到一个文件夹中,方便查看。

另外,在上文中我们也有提到,我们可以直接复制AirtestIDE里运行脚本时显示在log窗里的指令来运行,因此在生成报告时同样也可以这样做:先点击AirtestIDE里的生成报告按钮,等log窗口中出现了生成报告的命令行之后,复制它到你的命令行窗口中,就可以自由运行了。

使用了Poco语句的报告

由于默认报告是airtest的专属报告,对于poco语句的支持不够完善,因此我们用插件的形式来补充支持poco语句:在你的报告命令行最末尾添加指令 --plugin poco.utils.airtest.report 即可。

使用selenium插件的报告指令

如果脚本中使用了我们的selenium插件,在生成报告的命令行最后,请加入 --plugin airtest_selenium.report,可以让报告支持selenium元素。详情请查阅 Airtest-Selenium文档。

4.3 多机协作脚本

在我们的脚本中,支持通过set_current接口来切换当前连接的手机,因此我们一个脚本中,是能够调用多台手机,编写出一些复杂的多机交互脚本的。

在命令行运行脚本时,只需要将手机依次使用--device Android:///添加到命令行中即可,例如:

>airtest run untitled.air --device Android:///serialno1 --device Android:///serialno2 --device Android:///serialno1

关于多机脚本的运行和编写可以参考我们的快速上手-在Android手机上进行测试里的相关章节。

4.4 批量执行脚本

我们在脚本编写完成后,AirtestIDE可以让我们一次运行单个脚本验证结果,但是假如我们需要在多台手机上,同时运行多个脚本,完成自动化测试的批量执行工作时,AirtestIDE就无法满足我们的需求了。

目前可以通过命令行运行手机的方式来实现批量多机运行脚本,例如在Windows系统中,最简单的方式是直接编写多个bat脚本来启动命令行运行Airtest脚本。如果大家感兴趣的话,也可以自行实现任务调度、多线程运行的方案来运行脚本。请注意,若想同时运行多个脚本,请尽量在本地Python环境下运行,避免使用AirtestIDE来运行脚本。

我们将在不久的将来开放出一个云测试服务运行平台,目前暂时还处在开发阶段,项目正式上线后将会开放试用,敬请期待,访问地址在 这里