自动化测试工具之Airtest

由于工作原因,接触到了airtest这个工具,对比于之前使用的python+appium自动化测试框架,airtest简直是太方便了。对于编写自动化脚本非常友好,上手容易。关于airtest这个工具的详情,这里不赘述。这篇博客,简单记录几个在写自动化测试脚本时遇到的技术点。

1. 连接Android设备命令

from airtest.core.api import *
import subprocess


auto_setup(__file__)

subprocess.getstatusoutput('adb shell ********')     #有时,设备设置了密码才能进行adb通信,需先输入密码

connect_device('android:///')

2. touch方法。touch方法的参数,可以是图片,也可以是设备屏幕上的绝对坐标或者相对坐标。具体选择要看哪种更为合适用于touch操作的定位。此外还可以设置touch的时长。

3. snapshot方法,是用来给设备显示屏截图的。需要的参数是截图文件的文件名,和图片说明。截取的图片默认是保存在log文件夹内,不过可以在输入文件名时,加上想要保存到的(相对)路径来更改。

#记录当前日期、时间
snapshot(filename="../../06-时间设置.air/1.jpg", msg="当前日期、时间.")

4. 对比2张图片的相似度。有多个方法可以实现这个需求,这里介绍2个。

from airtest.core.api import *
auto_setup(__file__)

from airtest.aircv import *
from airtest.aircv.cal_confidence import *


#产生2张图片,保存到代码脚本的同一路径。snapshot()默认是把图片保存到log文件夹

snapshot(filename='../../test.air/1.jpg', msg="截图1.")
sleep(5.0)
snapshot(filename='../../test.air/2.jpg', msg="截图2.")


#预处理这2张图片。注意,imread方法处理的图片的路径要跟脚本的当前路径一致,所以在上面已经设置图片保存到脚本同一路径下
img = cv2.imread("1.jpg")
target = cv2.imread("2.jpg")


#检查图像尺寸,如果2张图片的尺寸不一致,需要调整为一致再对比
#if img.shape[0] =! target.shape[0] or img.shape[1] =! target.shape[1]:
    
    #调整目标图像尺寸
    #img = cv2.resize(img, (target.shape[1], target.shape[0]))

    
对比2张图的相似度---方法1
result1 = cal_ccoeff_confidence(img, target)

对比2张图的相似度---方法2
result2 = cv2.matchTemplate(img, target, cv2.TM_CCOEFF_NORMED)
max_val, _, max_loc, _ = cv2.minMaxLoc(result2)


print(result1)    #方法1的结果

print('-------------------')

print(max_val)    #方法2的结果

5. 局部截图。有时候,需要局部截图然后用于比对,这样比对更有针对性。实现方法如下

from airtest.core.api import *
auto_setup(__file__)

from airtest.aircv import *
from airtest.aircv.cal_confidence import *


#产生1张图片,保存到代码脚本的同一路径
snapshot(filename='../../test.air/1.jpg', msg="截图1.")

#预处理这1张图片
img = cv2.imread("1.jpg")

#使用crop_image方法,需要截取的部分的坐标,用元组的形式导入,前2个数是左上角起点的坐标,后2个数是右下角终点的坐标
scr=aircv.crop_image(img,(0,161,1067,555))

#保存图片到log文件夹,图片文件名不好确定
try_log_screen(scr)

#保存图片到代码脚本同一路径,此方法可方便后续图片对比等操作
pic=cv2_2_pil(scr)    #将OpenCV格式的图像(numpy.ndarray)转换为PIL格式的图像
pic.save('../test.air/9.jpg')

6. 对windows平台设备上的输入框的一些基本操作。keyevent()方法。

#用keyevent()方法,可以模拟键盘操作,从而对文本框完成想要的操作。
#关键的是,要确认不同平台的键盘按钮的名称,这里记录windows平台的键盘名称。


keyevent('^A')    #ctrl+A,全选

keyevent('{BACK}')    #backspace,回退删除一格

keyevent('{DEL}')    #delete,向前删除一格

#keyevent()方法还可以用于字符串输入,类似text()方法。
#不同的是,keyevent是通过“按键盘”输入的,
#所以某些字符如果用字符串的形式作为参数导入的话,不会输入成功,如下:

keyevent('A+B')    #"+"不会显示

keyevent('A'+'B')    #显示"AB"

keyevent('{A}''{+}''{B}')    #显示“A+B"


7. 在脚本中添加代码,可以在每次执行完测试动作后生成报告。这里介绍2种方法。

from airtest.core.api import *

auto_setup(__file__, logdir='../../logs/9')    #设置的logdir,可以指定运行log的存储位置

from airtest.aircv import *
from airtest.aircv.cal_confidence import *
from airtest.report.report import simple_report    #第一种方法,simple_report
from airtest.report.report import LogToHtml        #第二种方法,LogToHtml

connect_device('Android:///')


snapshot(filename='../../testCase/test.air/1.jpg', msg="截图1.")

img = cv2.imread("1.jpg")

scr=aircv.crop_image(img,(0,160,1067,551))

pic=cv2_2_pil(scr)

pic.save('../test.air/99.jpg')

#方法1,生成可以本地查看的报告
simple_report(__file__, logpath=True, output='../../reports/simpleReport.html')

#方法2,生成可以发送给其他人查看的报告
#注意,log_root和前面的logdir要一致
#注意,在设置logfile这个参数时,要导入log.txt的路径,这个文件就是指export_dir的那个路径里面的log.txt,所以直接写'log.txt'就行了
h1 = LogToHtml(script_root='../test.air', log_root="../../logs/9", export_dir="../../reports", logfile='log.txt', lang='zh', plugins=None)

h1.report()

8. 使用bat命令行来运行.air脚本,可以省去每次打开airtest IDE的繁琐。在实现的过程中,遇到一个问题,就是同一个脚本,在IDE中可以顺利运行,但是用命令行执行的时候报错,究其原因,是代码中在对图片的处理时,用的是相对路径,而当时在IDE里写这个路径的时候,是从脚本路径为起始的。现在用命令行执行脚本,就会导致找不到这个相对路径了。所以未来写相对路径时,尽量包含的层数多一些,最好包含到整个airtest project level。

假设要运行的测试用例代码如下,用例名为 test.air,

from airtest.core.api import *

auto_setup(__file__, logdir='../../logs/testLog')

from airtest.aircv import *
from airtest.aircv.cal_confidence import *
from airtest.report.report import simple_report

connect_device('Android:///')

snapshot(filename='../../testCase/test.air/1.jpg', msg="截图1.")

img = cv2.imread("../../testCase/test.air/1.jpg")

scr=aircv.crop_image(img,(0,160,1067,551))

pic=cv2_2_pil(scr)

pic.save('../../testCase/test.air/33.jpg')

simple_report(__file__, logpath=True, output='../../reports/simpleReport.html')

然后,写一个bat命令行脚本去执行上面的代码,如下,

airtest run C:\Work\1_Projects\0_codes\Airtest\testCase\test.air  --device Android:/// --log ../../logs/0430
pause

另外,命令行中可以添加一些参数,来设置测试报告的生成和导出,相关的方法网络上有很多资料。当然,也可以在测试用例代码中就写好有关生成测试报告的内容,两者并不冲突,择优而行。

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值