5.4 脚本相关的FAQ

5.4.1 我该如何开始写脚本?

在开始你的脚本编写工作前,可以先读一读官网提供的 教程 ,可以帮助你更快地上手。教程中的 使用Python语法 这一部分内容已经简单概括了如何开始写一个Airtest脚本。

我们提供的两个用于支持脚本编写、运行的仓库 AirtestPoco 库,是Python第三方库,因此脚本的编写需要有 一定的Python基础

5.4.2 支持的Python版本

如果使用AirtestIDE来编写脚本,推荐使用Python 2.7语法。

如果想要使用Python3语法,可以在本地Python环境中用 pip install airtestpip install pocoui 指令自行安装Airtest与Poco库,然后使用Python3语法编写脚本后,在本地Python环境用 命令行方式 运行脚本。

5.4.3 如何用命令行方式运行脚本

命令行来启动脚本时有两种方式,一种是将IDE运行时显示在log窗中的命令行复制下来,可以直接粘贴到命令行窗口中去执行:

http://airtest.netease.com/tutorial/RunCmd.png

还有一种方式,是在本地的python环境下安装好 AirtestPoco

然后用命令行来运行脚本,参见 文档

5.4.4 Airtest命令行使用范例

为了方便,在这里提供一个常用的airtest命令行执行模板(请务必事先安装好python环境和airtest),供大家作为参考。

假设我们要运行的脚本在当前目录下,名为untitled.air,并且我们准备将运行时产生的log和截图内容存放到 log/ 目录下:

>airtest run untitled.air(脚本路径) --device Android:///手机设备号 --log log/(log存放路径)

运行结束后,Airtest会将刚才运行中产生的log.txt以及截屏图片放在我们所指定的log/目录中,接下来可以使用以下命令行来生成报告:

>airtest report untitled.air(脚本路径) --log_root log/ --outfile log/log.html --lang zh

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

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

5.4.5 脚本中有哪些API可以使用

在脚本中,可以直接使用airtest封装好的各个接口,如touch(图片)这样与图像识别相关的接口,同时我们还提供了一些能够方便脚本编写的接口,例如

shell("ls")  # 运行指令 adb shell ls
sleep(2)  # 等同于time.sleep(2)

更多接口请访问 Airtest API文档

如果使用了Poco,请查阅 Poco 文档 获取更多相关信息。

5.4.6 用例集成和批量执行用例

目前我们暂时没有提供现成的批量运行方案,如果有批量执行用例的需求,可以自行用bat脚本或python封装,详见 批量脚本运行 以及上文描述的命令行方式运行脚本部分。

最简单直接的方式,就是直接用多个bat脚本来启动命令行运行脚本。

如果有使用Unittest来管理用例的相关需求,可以参考 4.1 脚本撰写的高级特性 ,如果是poco用户,推荐参考 my_testflow

5.4.7 如何使用第三方python库

由于AirtestIDE中使用的是它集成的Python环境,因此假如在本地的Python环境中安装了一些自己的库,是无法在IDE中直接import的。

如果 在IDE中 执行脚本时,需要使用自己安装的python第三方库,可以在IDE中进入”选项”-“设置”,填入自己的python库的安装路径:

../_images/python_package.png

如果是使用 命令行方式 运行脚本:

  • 使用IDE的命令行执行脚本时,需要配置自己的系统环境变量,新增一个名为 IDEPYTHONPATH 的环境变量后,按照IDE内设置的填写方式填入自己的python环境路径
  • 使用python命令行执行脚本时,无需自行添加python环境路径,如果需要用命令行执行脚本更推荐采用这种方式,使用方法见上文描述 如何用命令行方式运行脚本

5.4.8 如何调用其他.air脚本

我们非常推荐在编写脚本时,将一些可能会被反复使用的步骤写在公共模块中,供其他脚本调用。调用脚本的接口详见Airtest中的相关文档: Import from other .air

5.4.8 Airtest与Poco相关问题

Airtest和Poco的区别

Airtest框架基于图像识别,写脚本的时候类似这样:

http://airtest.netease.com/tutorial/gif/airtest_auto_record.gif

Poco框架基于UI控件搜索,写脚本的时候是这样的:

http://airtest.netease.com/tutorial/gif/poco_auto_record.gif

Airtest和Poco如何初始化

如果是在AirtestIDE里编写脚本,Airtest不需要另外import,而Poco需要插入一段初始化代码才能使用,如图:

http://airtest.netease.com/docs/docs_AirtestIDE-zh_CN/_images/4-poco_manual_record.gif

如果编写的脚本需要在命令行中运行,或是将Airtest视为独立的库使用,可参考 Airtest文档 获取更多信息。

为什么我选择了Poco模式后,没有成功刷出UI树

Poco目前支持Unity3d、Cocos2d两种游戏引擎和Android源生App,若要开始使用,首先需要 接入SDK

  • Unity3d和Cocos2d游戏: 接入SDK
  • Android原生App:直接开始!
  • 其他游戏引擎和UI系统: 扩展SDK

目前除了Android原生App无需接入SDK即可直接使用之外,其余引擎都需要事先 接入SDK 才能获取到UI结构信息(游戏没有事先接入SDK是无法直接看到UI树的),请务必仔细阅读 接入文档 ,进行SDK接入后再进行使用。

H5等其他版本的poco-sdk

暂时仍在开发中,未来将逐步放出。

目前IDE支持了 selenium 插件,可以查看 4.4 Selenium-plugin 获得更多细节。

为什么接入了SDK、使用了原生App依然看不到UI树

在Poco初始化时,会向手机中安装相关的apk,请务必保证手机允许了相关apk的安装。部分型号的手机需要在设置中开启“允许通过ADB安装应用”等相应选项才能进行安装。

UI树在一段时间后没有正确刷新

可以尝试先将Poco模式选项的下拉菜单改为 Stop,再重新选择你所需要的模式,例如 Android, IDE将重新建立与手机的Poco通信连接。

5.4.9 代码补全不全

代码补全提示暂时不够全,部分python库函数目前尚待加入.

5.4.10 如何调试脚本

目前AirtestIDE暂不支持断点调试功能,因此调试脚本只能通过print log等较为简单的方式。

但是由于Airtest的截图语句涉及到图像识别的准确率问题,需要反复运行和调试才能确定合适的图片与识别阈值,因此我们提供了一种 选中部分代码单独运行 的调试功能:

../_images/debug_code.png

可以选中部分代码后点击鼠标右键,选择 只运行选中代码,即可单独运行被选中的代码段落。需要注意的是,该单独运行代码的功能不会执行到脚本中其他代码里的内容,可能会出现别处的变量未能初始化等情况,因此只能作为辅助工具使用,不能完全依赖它来调试整个脚本。