1. 前言
上次给大家介绍了AirtestIDE创建.py脚本并运行、生成报告,不过如果是要工程化的将自动化运用到项目中,还是要脱离AirtestIDE的,比如通过Pycharm编写脚本,通过命令行运行自动化、生成报告。
本文将详细讲述脱离AirtestIDE跑脚本的方式和注意事项,感兴趣的同学可以认真阅读下述内容哦!
我们在pycharm新建项目之后,就需要为该项目设置Python解释器;pycharm支持我们直接设置本地安装好的Python作为解释器,也支持使用虚拟Python环境作为解释器。
这2者的差别是,如果我们直接设置本地安装好的Python作为解释器,那么本地Python安装的所有第三方库都会导入进来为这个pycharm项目所使用:
但如果我们是新建了一个虚拟环境的话,则是基于本地的某个Python解释器,复制了一个不带任何第三方包的干净的Python虚拟环境,意思是已经安装到这个本地Python解释器中的所有第三方包都不会复制过来:
这也是很多同学刚开始使用pycharm的时候,明明在本地Python环境已经安装好了需要的第三方库,到了pycharm却仍旧找不到第三方库的原因。(需要注意是否是因为使用了虚拟环境)
那在pycharm安装第三方库的方式,就非常简单了,在项目使用的Python解释器里,点击右侧的+
号,输入想要添加的包名,然后点击 安装包
按钮即可:
环境部署好之后,我们就可以着手在pycharm编写/运行脚本了。
以 直接从AirtestIDE复制脚本到pycharm运行 为例,我们详细了解下有哪些内容我们需要特别注意下的:
首先是脚本运行的log内容保存,我们在AirtestIDE编写和运行脚本,没有考虑过这个问题,是因为AirtestIDE会自动帮我们保存脚本运行的log内容,默认路径是 选项--设置--Airtest--默认Log存放路径
里设置的路径:
把代码复制到pycharm运行时,如需保存log内容(为后续生成测试报告做准备),我们就需要手动添加上这块的内容:
# 在auto_setup接口里设置logdir,用于保存log内容 # logdir可以传入具体的log保存路径,或者是True,传入True表示在当前项目目录下生成log内容 auto_setup(__file__,logdir=True)
log内容往往包含一些报告所需的步骤截图和一个 log.txt
文件。
第二个常见的问题,就是在AirtestIDE里,只要设备连接窗口已经连接上指定设备,我们在.air
脚本中无需额外处理,运行.air
脚本时,就会自动连接设备窗口的当前设备来跑脚本。
而pycharm显然不会帮我们处理设备连接的工作,所以我们需要在脚本中连接上待测设备:
# 在auto_setup接口传入devices参数 auto_setup(__file__,logdir=True,devices=["android://127.0.0.1:5037/127.0.0.1:7555"])
当然,我们还有非常多的接口可以用于连接我们各种待测设备。
扩展阅读:Airtest API精讲之设备连接管理API集合
touch(Template(r"tpl1590718697837.png", rgb=True, record_pos=(-0.383, 0.717), resolution=(1080, 1920)))
程序可以根据这个相对路径找到截图文件的原因在于,我们利用 auto_setup(__file__)
初始化脚本的时候,传入了一个 basedir
(参数值为__file__,即当前脚本所在路径),程序会默认根据这个 basedir
去寻找脚本中存在的相对路径。
所以当我们在 pycharm
上新建项目,并把在 AirtestIDE
上跑通的测试脚本复制粘贴过来时,这个 basedir
就变成了 pycharm
新建项目的所在路径,程序会根据新建项目的所在目录去寻找截图脚本中的相对路径。
因此我们要把脚本中用到的截图文件,也复制到新建项目的所在目录下,这样才可以让程序根据截图脚本上的相对路径正确找到我们的截图文件。
如果我们没有一并把截图文件复制到新建项目的目录下,就直接运行脚本,会出现 airtest.aircv.error.FileNotExistError: File not exist: tpl1590718697837.png
的报错:
如果搞不明白相对路径,我们也可以选择把截图脚本上面的相对路径,改成绝对路径,这样程序也能够根据绝对路径找到我们的截图文件:
touch(Template(r"D:/test/tpl1590718697837.png", rgb=True, record_pos=(-0.383, 0.717), resolution=(1080, 1920)))
很多同学会在自己的自动化脚本里面,调用一些公共脚本,可能是.air
脚本,也可能是.py
脚本等。
假设我们有如下几个脚本,各脚本的存放关系如下:
如果我们要在 song.air
脚本里面,调用 common.air
脚本 和 im_ex.py
脚本,可以这么编写脚本:
其中,调用 .air
脚本,我们可以使用Airtest提供的专用接口 using
;调用 .py
脚本,就与标准Python无异,直接 from ... import ...
即可。
但当我们在pycharm中打开 song.air
并且运行之后,会发现在AirtestIDE可以运行的脚本,到pycharm就找不到模块了:
我们可以通过 手工添加 sys.path
的方式 ,让pycharm能找到 common.air
脚本:
6)报告生成
最后一个需要注意的内容就是报告生成啦,在AirtestIDE运行完.air
脚本之后,我们可以直接点击 查看报告
按钮,迅速生成并且打开HTML格式的测试报告。
但pycharm并没有这个功能,所以我们需要生成Airtest报告的话,只能在脚本中编写生成测试报告的语句:
# -*- encoding=utf8 -*- __author__ = "AirtestProject" from airtest.core.api import * from airtest.report.report import simple_report auto_setup(__file__,logdir=True,devices=["android://127.0.0.1:5037/127.0.0.1:7555"]) touch(Template(r"tpl1638243250870.png", record_pos=(-0.362, 0.13), resolution=(810, 1440))) simple_report(__file__,logpath=True)
有些童鞋把生成报告的语句放在了脚本的最后面,希望跑完测试脚本以后,能够生成一个测试报告。但是有时候程序还没有运行到生成报告的脚本时就报错了,导致程序终止运行,最终没有生成报告。
其实我们是希望不论测试用例能不能执行通过,都可以给我们一个报告反馈,所以我们可以使用 try-finally
语句,无论是否发生异常都将执行最后的代码:
try: touch(Template(r"tpl1590718697837.png", threshold=0.9, record_pos=(0.378, 0.098), resolution=(1080, 1920))) finally: # generate html report simple_report(__file__, logpath=True)
plugins