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可以运行之外,也支持用脚本运行。

使用AirtestIDE命令行运行

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

idecmd

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

使用python运行脚本

这种方式才是我们推荐的方式,但是需要事先部署好环境,我们使用Python环境,同时需要安装我们的第三方库:

  • Python(2.7或3.5+),我们更推荐使用Python3,如果你愿意的话我们也同样建议使用virtualenv等虚拟环境
  • pip install airtestpocoui,若对安装过程有疑问请查阅对应的安装文档描述

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

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

>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

生成运行结果报告

我们的脚本运行过程,与报告生成过程是独立的两个步骤,因此在运行过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

关于多机脚本的运行和编写可以参考我们的教程里的相关章节。

4.4 批量执行脚本

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

目前我们的自动化手机运行集群还在开发中,尚未对外开放,但是目前可以通过命令行运行手机的方式来实现批量多机运行脚本。

例如在Windows系统中,可以直接编写多个bat脚本来启动命令行运行Airtest脚本。