本文已参加「新人创作礼」活动,一同敞开创作之路。

写在前面

上一篇文章分享了《根据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适用项目

基于图像识别框架Airtest的Windows项目自动化测试实践

3.Airtest特色

  • 跨渠道
  • 易操作
  • 可扩展
  • 支持GUI编辑器

4.Airtest的优势

相比于其他的主动化测验结构,Airtest主要有如下两个优势:

  • 大幅度降低主动化脚本的编写和保护本钱

基于图像识别框架Airtest的Windows项目自动化测试实践

  • 处理游戏测验的痛点

二、Airtest结构组成、原理

1.Airtest结构组成

基于图像识别框架Airtest的Windows项目自动化测试实践

  • 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的Windows项目自动化测试实践

三、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即可发动

基于图像识别框架Airtest的Windows项目自动化测试实践

2.Airtest IDE运用

1)生成陈述

Airtest运转完成后,会主动生成一份陈述,经过下图按钮能够检查,点击后会主动发动浏览器检查陈述

基于图像识别框架Airtest的Windows项目自动化测试实践

2)图片/代码形式切换

Airtest IDE中右键,即可两种形式彼此切换

基于图像识别框架Airtest的Windows项目自动化测试实践

切换后的作用如下:

基于图像识别框架Airtest的Windows项目自动化测试实践

四、Airtest展开Windows运用主动化测验实践

1.衔接Windows运用

衔接Windows运用有三种办法,分别是:

1)经过查找窗口衔接

设备窗-Windows窗口衔接-查找窗口,选择窗口后,点击衔接

基于图像识别框架Airtest的Windows项目自动化测试实践

2)经过句柄衔接

(由于句柄容易发生变化,因此不引荐此衔接方法):下图的67330即为企业微信的句柄

基于图像识别框架Airtest的Windows项目自动化测试实践

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运用的页面布局:

基于图像识别框架Airtest的Windows项目自动化测试实践

1)代码构成

基于图像识别框架Airtest的Windows项目自动化测试实践

  • 导入中心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编码风格,因此能够将各个测验动作/场景封装成一个一个的函数,当然也能够封装在其他文件里,然后导入引用

基于图像识别框架Airtest的Windows项目自动化测试实践

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类型的音讯;不过与其说是一条测验用例,倒不如说是为了模仿人工长期操作运转下程序的稳定性,亦或是辅助其他特殊测验场景,比方:

  1. 去年我在测验移动端时、经过主动化模仿一端继续发送很多图片音讯,然后测验出【iOS移动端在弱网情况下接收很多离线文件音讯程序会core掉】的bug。
  2. 今天在使用Airtest模仿继续发送文本音讯、测验程序稳定性时,发现【单聊发送音讯传错类型参数,发送给群聊,导致发送音讯失败,且无任何音讯发送记录】的bug,很奇怪,我手工发送的就没任何问题,暂时还没找到规律,研发还在定位中。虽然Airtest并没有直接发现bug,但却给发现bug发明了更多可能。

5.运转作用

此处为语雀视频卡片,点击链接检查:Rec 0005.mp4

6.检查测验陈述

Airtest运转完成后会主动生成测验陈述,经过控制台菜单栏的检查陈述按钮,即可主动在浏览器打开测验陈述:

基于图像识别框架Airtest的Windows项目自动化测试实践

五、总结与考虑

  • Airtest也能够用于pycharm编辑器下,需要手动提前装置airtest库:pip install -U airtest,装置后即可新建airtest脚本,语法和在Airtest IDE中编写时共同。别的,pycharm编辑器也能够直接打开airtest脚本;
  • 对于web、APP主动化主要用该端特定的主动化结构,如selenium、appium,而此类测验结构无法完成的Windows运用的操作,则能够凭借Airtest完成,然后打通端到端主动化测验流程;
  • 主动化测验编码完成仅仅是主动化测验流程中一个小环节,更重要的是场景规划、用例完成以及怎么发挥主动化测验的价值;
  • 主动化测验可能不会发现多少bug,但却给发现bug发明了更多可能;