本文已参加「新人创作礼」活动,一同敞开创作之路。
写在前面
上一篇文章分享了《根据Sikuli GUI图像辨认结构的PC客户端主动化测验实践》,但sikuli看起来怎样都像是上个世纪的界面风格,且功能过于简陋。而同样根据图像辨认结构的Airtest,则无疑强壮了许多,本次分享的内容是根据Airtest完成Windows运用的主动化测验,内容纲要:
- Airtest结构介绍:Airtest适用项目、Airtest特色、Airtest的优势
- Airtest结构组成、原理
- Airtest环境建立及IDE的简略运用
- Airtest展开Windows运用主动化测验实践:衔接Windows运用Windows常用API编写测验代码规划测验用例运转作用检查测验陈述
- 总结与考虑
一、Airtest结构介绍
1.Airtest介绍
Airtest是网易出品的一款根据图像辨认和Poco控件辨认的一款UI主动化测验东西。这个结构规划来源于新颖的图形脚本语言Sikuli,关于Sikuli结构可见上一篇分享《根据Sikuli GUI图像辨认结构的PC客户端主动化测验实践》。和Sikuli结构的原理相同,用户不需要一行行的去写代码,而是用屏幕截屏的方法,用截出来的图形罗列组合成神器的程序,这是Airtest的一部分。别的,Airtest也能够根据poco这个UI控件查找结构,经过控件的称号、id之类的来定位目标控件,原理类似于 appium。官网:airtest.netease.com/
2.Airtest适用项目
- 游戏
- Android
- iOS
- Web
- Windows
3.Airtest特色
- 跨渠道
- 易操作
- 可扩展
- 支持GUI编辑器
4.Airtest的优势
相比于其他的主动化测验结构,Airtest主要有如下两个优势:
- 大幅度降低主动化脚本的编写和保护本钱
- 处理游戏测验的痛点
二、Airtest结构组成、原理
1.Airtest结构组成
- Airtest:是一个跨渠道的、根据图像辨认的UI主动化测验结构,适用于游戏和App,支持渠道有Windows、 Android和iOS;
- Poco:是一款根据UI控件辨认的主动化测验结构,现在支持Unity3D/cocos2dx/Android原生app/iOS原生app/ 微信小程序,也能够在其他引擎中自行接入poco-sdk来运用;
- AirtestIDE:跨渠道的UI主动化测验编辑器,内置了Airtest和Poco的相关插件功能,能够快速简略地 编写Airtest和Poco代码;
- AirLab:真机主动化云测验渠道,现在供给了TOP100手机兼容性测验、海外云真机兼容性测验等服务;
2.Airtest工作原理
三、Airtest环境建立及IDE的简略运用
官方文档:airtest.doc.io.netease.com/IDEdocs/get…
1.下载装置
1)装置python
由于Airtest结构是根据python语言开发,本地需要建立python相关环境,建议运用python3
Python 下载地址:www.python.org/downloads/
2)下载AirtestIDE客户端
AirtestIDE客户端下载:airtest.netease.com
Windows体系用户在官网上下载对应32位或是64位版别的zip包,解压后得到AirtestIDE文件夹,双击AirtestIDE/AirtestIDE.exe即可发动
2.Airtest IDE运用
1)生成陈述
Airtest运转完成后,会主动生成一份陈述,经过下图按钮能够检查,点击后会主动发动浏览器检查陈述
2)图片/代码形式切换
Airtest IDE中右键,即可两种形式彼此切换
切换后的作用如下:
四、Airtest展开Windows运用主动化测验实践
1.衔接Windows运用
衔接Windows运用有三种办法,分别是:
1)经过查找窗口衔接
设备窗-Windows窗口衔接-查找窗口,选择窗口后,点击衔接
2)经过句柄衔接
(由于句柄容易发生变化,因此不引荐此衔接方法):下图的67330即为企业微信的句柄
3)经过正则匹配运用运用标题进行衔接
if not cli_setup:
auto_setup(__file__, logdir=True, devices=["Windows:///?title_re=.*阅云*"])
2.Windows常用API
官方文档:airtest.readthedocs.io/zh_CN/lates…
源码:airtest.readthedocs.io/zh_CN/lates…
- connect:衔接设备
- shell:履行cmd指令
- snapshot:截图
- keyevent:履行键盘事件
- text:输入文本
- key_press:按下某个按键
- key_release:释放某个按键
- touch:鼠标点击事件
- double_click:鼠标双击
- swipe:滑动
- move_mouse:移动鼠标
- mouse_down:按下鼠标(左/右)键
- mouse_up:释放鼠标(左/右)键
3.编写测验代码
先看下待测验的windows运用的页面布局:
1)代码构成
- 导入中心api和初始化客户端的办法
# -*- encoding=utf8 -*-
__author__ = "Administrator"
import random
from airtest.core.api import *
from airtest.cli.parser import cli_setup
- 衔接windows运用
# 衔接windows运用
if not cli_setup:
auto_setup(__file__, logdir=True, devices=["Windows:///?title_re=.*阅云*"])
- Airtest IDE遵从python编码风格,因此能够将各个测验动作/场景封装成一个一个的函数,当然也能够封装在其他文件里,然后导入引用
2)案例
- 发送文本音讯:
操作过程为:进入聊天窗口>输入文本内容>发送
def send_text(time):
setup_send_msg() # 进入聊天窗口
for i in range(time):
text("这是AIRTEST发送的第%s条音讯"%str(i)) # 输入文本音讯内容
keyevent("{ENTER}") # 按下键盘Enter键,要大写
keyevent("{ENTER}") # 第一遍按下Enter是防止此时的输入法为中文,第二遍按下Enter是发送
- 截图发送
操作过程为:进入聊天窗口>点击截图按钮>滑动鼠标拉取截图区域>承认发送截图
def send_screenshot():
setup_send_msg()
touch(Template(r"tpl1656061157595.png", record_pos=(-0.028, 0.138), resolution=(959, 654)))
sleep(1)
swipe((300,400), (600,800), duration=0.8, steps=2)
keyevent("{ENTER}")
4.规划测验用例
GUI主动化测验并不适用于发现bug,更多的是将重复性高的、简略的手工操作场景转换为主动操作,用于回归测验,或是用于一些数据的结构模仿上。
将一些基本操作封装为一个个函数今后,就能够进行组合、规划测验用例了,如:
① 场景一:发送不同类型的音讯
分别调用以下函数:
- 调用发送文本函数
- 调用发送表情函数
- 调用发送图片函数
- 调用发送截图函数
- ……
当然,以上各个函数也能够单独作为一个个测验用例,然后用于回归测验;
② 场景二:继续发送文本/图片音讯
将上述函数,加上循环,便可完成继续发送xx类型的音讯;不过与其说是一条测验用例,倒不如说是为了模仿人工长期操作运转下程序的稳定性,亦或是辅助其他特殊测验场景,比方:
- 去年我在测验移动端时、经过主动化模仿一端继续发送很多图片音讯,然后测验出【iOS移动端在弱网情况下接收很多离线文件音讯程序会core掉】的bug。
- 今天在使用Airtest模仿继续发送文本音讯、测验程序稳定性时,发现【单聊发送音讯传错类型参数,发送给群聊,导致发送音讯失败,且无任何音讯发送记录】的bug,很奇怪,我手工发送的就没任何问题,暂时还没找到规律,研发还在定位中。虽然Airtest并没有直接发现bug,但却给发现bug发明了更多可能。
5.运转作用
此处为语雀视频卡片,点击链接检查:Rec 0005.mp4
6.检查测验陈述
Airtest运转完成后会主动生成测验陈述,经过控制台菜单栏的检查陈述按钮,即可主动在浏览器打开测验陈述:
五、总结与考虑
- Airtest也能够用于pycharm编辑器下,需要手动提前装置airtest库:pip install -U airtest,装置后即可新建airtest脚本,语法和在Airtest IDE中编写时共同。别的,pycharm编辑器也能够直接打开airtest脚本;
- 对于web、APP主动化主要用该端特定的主动化结构,如selenium、appium,而此类测验结构无法完成的Windows运用的操作,则能够凭借Airtest完成,然后打通端到端主动化测验流程;
- 主动化测验编码完成仅仅是主动化测验流程中一个小环节,更重要的是场景规划、用例完成以及怎么发挥主动化测验的价值;
- 主动化测验可能不会发现多少bug,但却给发现bug发明了更多可能;