欢迎光临散文网 会员登陆 & 注册

10如何脱离AirtestIDE编写、运行自动化脚本

2021-06-16 11:54 作者:Airtest酱  | 我要投稿

同学们好,我是网易AirtestProject的团队成员晓娟,欢迎大家来到我们的视频教程专栏《14天Airtest自动化测试小白课程》。

前面我们在教大家编写自动化脚本的时候,一直用的是我们配套的编辑器AirtestIDE,那么也会有很多同学,他们并不想局限在我们配套的IDE上。比如他们想直接用命令行跑脚本,或者他们更习惯使用其它的python编辑器,比如pycharm等等。

所以今天我们来学习下,如何脱离AirtestIDE来编写或者运行脚本。

部署本地的python环境

之前我们就说过,airtest、pocoui和airtest-selenium都是python第三方库,所以只要在python环境里面装上这几个库,我们就可以在这个python环境里面运行这些测试框架的脚本。

而我们的AIirtestIDE是内嵌了1个装好了这些库的精简版的python环境,所以即使我们不在设置里面配置任何本地的python环境,我们依然可以跑airtest、poco或者airtest-selenium脚本。当然,不使用IDE自带的python环境,我们也可以 在选项--设置中,设置同学们本地的python环境,以此来支持更多的python第三方库 


同理,如果我们想用本地的python环境跑自动化脚本时,就必须保证这个环境已经安装好了我们所需要的库。

另外,对于python版本,我们 更建议大家选择python3 ,python2我们虽然也支持,但毕竟官方也不维护python2了,所以我们更推荐大家使用python3作为大家的运行环境。目前我们也已经支持了在Python3.9下安装我们的airtest、pocoui和airtest-selenium库。

当我们在本地安装好1个python环境之后,可以直接执行python来查看本地python的详细信息。


接下来,我们就可以安装我们要用到的airtest和pocoui等库了,命令如下:

pip install airtest

pip install pocoui

pip install airtest-selenium

需要特别注意的是,poco框架的库名叫pocoui ,同学们不要写错了,如果不小心同时安装了poco和pocoui,请同学们务必卸载掉poco,只留下pocoui,避免影响后续脚本的运行,删除命令如下:

pip uninstall airtest

pip uninstall pocoui

pip uninstall airtest-selenium

安装好了对应的库之后,我们可以使用 pip list 命令查看相应的库是否安装上了:


如果之后有版本更新,我们也可以直接使用命令将本地的库直接更新到最新版本:

pip install -U airtest

pip install -U pocoui

pip install -U airtest-selenium

如同学们在安装过程中,有遇到 安装超时报错 的,可以尝试更换一些国内的安装源来安装这些库,方法如下:

# 豆瓣源

pip install airtest -i https://pypi.tuna.tsinghua.edu.cn/simple

# 常见的国内源

阿里云 http://mirrors.aliyun.com/pypi/simple/

中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

豆瓣(douban) http://pypi.douban.com/simple/

清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/

中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

至此,本地的python环境就部署好了,其实还是非常简单的,准备一个python环境,然后在这个环境里面使用 pip install 命令安装好airtest、pocoui和airtest-selenium库即可。(不做web自动化的话,其实airtest-selenium也可以不安装先,有需要的时候再把它装上去。)


使用命令行跑脚本/生成报告

1. 命令行运行脚本

在命令行执行脚本的命令是airtest run + 脚本文件路径,该命令的可传参数如下:

  • --device,用来指定连接的被测设备

  • --log,用来指定log内容和截图存放的目录

  • --recording,运行脚本时进行录屏操作

  • --no-image,传入该参数后,在任务运行过程中不再保存截图

举个例子,我们在D:/test/目录下,新建1个叫report_test.air的脚本。并在脚本中编写1条touch脚本。


然后我们在命令行运行这个脚本,指定测试设备为连接上的第一台安卓设备,log保存路径为D:/log/,运行脚本时进行录屏操作,录屏文件保存到D:/log/record01.mp4:

airtest run D:/test/report_test.air --device Android:/// --log D:/log/ --recording D:/log/record01.mp4

运行结束后,我们可以到指定目录下查看是否生成了我们指定的log文件和录屏文件:


其中有几点需要注意的:

① 如果脚本中没有指定运行设备,那么在编写命令行的运行脚本命令时,就必须指定设备;如脚本已指定运行设备,则运行脚本的命令可以不指定设备,刚才我们的示例脚本是没有指定设备的,如果命令行也不指定设备,命令行会提示你没有连接设备,且脚本也不能跑下去。


② 同理,如果命令未指定log参数,则默认是不保存log内容的

③ --device 后面跟的是用于初始化设备的URI字符串,连接iOS、安卓和Windows窗口的字符串是不一样的,我们给大家准备了详细的示例,一起来看一下:

连接Android手机

# 什么都不填写,默认取当前连接中的第一台手机

Android:///

# 连接本机默认端口连的一台设备号为79d03fa的手机

Android://127.0.0.1:5037/79d03fa

# 用本机的adb连接一台adb connect过的远程设备,注意10.254.60.1:5555其实是serialno

Android://127.0.0.1:5037/10.254.60.1:5555

连接iOS手机

iOS:///127.0.0.1:8100

连接Windows窗口

# 连接一个窗口句柄为123456的Windows窗口

Windows:///123456

# 连接一个Windows窗口,窗口名称匹配某个正则表达式

Windows:///?title_re=Unity.*

# 连接windows桌面,不指定任何窗口

Windows:///

连接使用了备选连接参数的设备

# 夜神模拟器(127.0.0.1:62001为夜神模拟器的端口号)

Android://127.0.0.1:5037/127.0.0.1:62001?cap_method=JAVACAP&&ori_method=ADBORI

# 设备号为79d03fa的 MIUI11 设备

Android://127.0.0.1:5037/79d03fa?cap_method=JAVACAP&&ori_method=ADBORI

更多关于设备字符串的内容,我们可以参看这篇公众号教程:


④ 只有当airtest版本大于等于1.1.6时,--recording参数后面才允许自定义录屏文件名,且必须以.mp4结尾。

⑤ 只有当airtest版本大于等于1.1.7时,才有--no-image参数,才能指定运行脚本过程中不保存截图。

2. 命令行生成报告

使用airtest run 命令运行完脚本以后,我们可以使用另一个命令,airtest report + 脚本文件路径指令来生成一份HTML格式的报告

该命令的可传参数非常多:

  • --log_root,指定log内容和截图文件所在的目录

  • --outfile,指定生成报告的目录

  • --lang,指定报告语言,可以是中文/英文

  • --export,导出一个包含所有资源的报告文件

  • --static_root,指定静态资源文件的路径

以刚才的脚本为例,在命令行运行以后,我们就可以继续生成它的报告了,指定log路径为D:/log,生成html报告的路径为D:/log/log.html,指定报告的语言为英文。

airtest report D:/test/report_test.air --log_root D:/log  --outfile D:/log/log.html --lang en


之后我们可以到指定的文件夹里面查看对应的报告文件:

另外我们再来看下,--export这个参数,使用这个参数,可以帮我们打包这份测试报告,然后我们可以直接把打包好的这份报告发送给别人查看。如果不使用--export来导出报告的话,html报告里面的图片资源、静态资源路径都是绝对路径,发到别的电脑之后,别人是无法正常查看的。


只有导出之后的报告,里面的图片资源和静态文件资源才会使用相对路径,这样把报告发送到别的电脑上时,我们才能够正常查看。

airtest report D:/test/report_test.air --log_root D:/log  --lang en  --export D:/export/


打开指定的导出路径,可以看到导出的测试报告文件里面包含了非常多的东西:


报告里面的图片资源和静态资源都是相对路径,我们可以把这份报告发送给别人查看。


最后一个参数--static_root,用于指定静态资源的路径。因为我们每次导出一份报告,都会包含一份相同的static文件,它里面放置了报告的一些css和js等文件。一般来说,除非报告的样式做了某些更新,否则这些静态资源文件都是固定不变的。

因此我们可以将这些资源文件部署到静态资源文件服务器上,用例如 https://host:port/static/css/ 的路径来访问它。然后在生成报告时,将这个部署出来的服务器地址作为 --static_root的参数传过去,这样导出的报告文件里面将不再包含static文件,HTML报告想要访问静态资源文件时,访问的就是 static_root给的地址:

airtest report D:/test/report_test.air --log_root D:/log  --lang en  --static_root https://host:port/  --export D:/export/

需要注意的是,如果传入给static_root的不是以http开头的资源服务器地址,而是一个本地路径,导出报告时,还是会把给定的本地路径里面的静态文件复制过来一份。


使用pycharm等编写/运行脚本

讲完了如何在命令行上运行自动化脚本,接下来我们再来看看,如果不使用AirtestIDE,如何在其它python编辑器中编写、运行Airtest和poco脚本。

以pycharm编辑器为例,首先需要保证你所用项目使用的python环境里安装了airtest和pocoui库。可以在文件--设置--项目中查看:


如未安装,则点击package右侧的+号,把airtest和pocoui安装好。

环境弄好以后,我们就可以开始编写自动化脚本了,新建一个.py文件,添加上引入和初始化代码,也可以直接把.air脚本的初始化代码复制过来,但需要注意的是,pycharm不会自动帮我们连接设备,所以我们需要自己在脚本中添加连接设备的代码,这里以在auto_setup连接设备为例:

auto_setup(__file__,devices=["android://127.0.0.1:5037/emulator-5554?cap_method=JAVACAP&&ori_method=MINICAPORI&&touch_method=MINITOUCH"])

更多连接设备的接口,可以参看刚才给你们推荐的文章。确保先编写完设备连接的脚本,再来编写airtest脚本,这里以点击微信为例,首先截取一张微信icon的截图,利用你们电脑里装有的截图工具即可,然后把截图文件保存在你本地路径,比如 D:\atest_image\wechat.png,然后把截图的保存路径添加到你的点击脚本里面:

touch(Template(r"D:\atest_image\wechat.png", threshold=0.8,))

这样就完成了1个很简单的自动化脚本了:


当然,如果要编写poco脚本的话,因为在pycharm中看不到设备的UI树,所以我们可以打开AirtestIDE来查看UI树,然后在pycharm上编写对应的poco语句即可。

最后就是生成报告了,我们可以调用一些airtest提供的接口帮助我们生成报告,比如simple_report、LogToHtml类等。

以simple_report接口为例:


因为报告是根据log内容来生成的,所以我们需要在脚本初始化添加logdir参数,用于保存脚本运行的log内容到指定路径,使用simple_report生成报告的时候,也要把logpath传进去,让他去对应的路径找log内容来生成报告。

关于用脚本生成报告更多详细的内容,大家可以参看这篇推文,我们就不一一在这里讲述了。


小结

那么今天的内容就到这里为止啦,这节课的内容比较多,大家课后可以多多实践,好好消化下。


至此,关于自动化脚本编写专题的课程就讲完了,下节课我们将进入一个新的章节,手把手教大家如何接入pocosdk,然后用poco这个框架来测试引擎渲染的游戏。下期我们不见不散~


10如何脱离AirtestIDE编写、运行自动化脚本的评论 (共 条)

分享到微博请遵守国家法律