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

写在前面

上一篇分享了《基于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。官网:http://airtest.netease.com/

2.Airtest适用项目

  • 游戏
  • Android
  • iOS
  • Web
  • Windows

基于图像识别框架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的简单使用

官方文档:https://airtest.doc.io.netease.com/IDEdocs/getting_started/AirtestIDE_install/

1.下载安装

1)安装python

由于Airtest框架是基于python语言开发,本地需要搭建python相关环境,建议使用python3

Python 下载地址:https://www.python.org/downloads/

2)下载AirtestIDE客户端

AirtestIDE客户端下载:http://airtest.netease.com

Windows 系统用户在官网上下载对应32位或是64位版本的zip包,解压后得到AirtestIDE文件夹,双击AirtestIDE/AirtestIDE.exe即可启动

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

2.Airtest IDE使用

1)生成报告

Airtest运行完成后,会自动生成一份报告,通过下图按钮可以查看,点击后会自动启动浏览器查看报告

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

官方文档:https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.win.win.html

源码:https://airtest.readthedocs.io/zh_CN/latest/_modules/airtest/core/win/win.html

  • 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实现,从而打通 端到端自动化测试流程;
  • 当然Airtest也支持移动端APP自动化以及web端自动化;
  • 自动化测试编码实现仅仅是自动化测试流程中一个小环节, 更重要的是场景设计、用例实现以及如何发挥自动化测试的价值
  • 自动化测试可能不会发现多少bug,但却给发现bug创造了更多可能;

更多测试开发实用干货,同步首发于微信公众号【测试开发实战】,欢迎关注!

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

Original: https://www.cnblogs.com/dagangtest/p/16550344.html
Author: 大刚测试开发实战
Title: 基于图像识别框架Airtest的Windows项目自动化测试实践

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/714642/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • UE4 Keynote 1

    【 UE4 Keynote 1】 1、U3D中的Project,在UE4中叫 ContentBrowser,中文名叫”内容浏览器” 最多可以打开4个Cont…

    技术杂谈 2023年5月31日
    087
  • 什么是计算机?

    计算机 组成:硬件+软件能按程序运行,自动、告诉处理海量数据的现代化智能电子设备。应用:科学计算、数据处理、自动控制、计算机辅助设计、人工智能、网络(互联网、自己的计算机就是网络的…

    技术杂谈 2023年7月11日
    070
  • 一图看懂:信号的时域、频域、相位

    值得说明的是相位谱: 如下两图,相位谱是从上往下看,距离穿过时间0点的频率轴最近的波峰(红点),投影到下平面(投影点用粉点表示),将投影得到的时间差依次除以所在频率的周期,再乘以2…

    技术杂谈 2023年5月31日
    0133
  • 数据库的备份和恢复命令,使用视图,索引,事务

    备份库 直接在cmd窗口中直接输入,结束不需要输入; mysqldump -h端口号 -u用户名 -p密码 数据库名>备份地址 恢复库 在cmd窗口中进行 1、连接数据库 m…

    技术杂谈 2023年6月21日
    074
  • kafka学习

    Kafka概述 Kafka是分布式(点对点模式)(发布-订阅模式)消息系统,由Scala 写成, 它主要用于处理流式数据。本质是基于消息队列缓存数据. Kafka对消息保存时根据T…

    技术杂谈 2023年7月24日
    0100
  • hdu 1845

    一看题意就是二分匹配问题,建边是双向的,两个集合都是n个点 这题的图很特殊,每个点都要与三个点相连,在纸上画了六个点的图就感觉此图最大匹配肯定是六,除以2就是原图的匹配了,就感觉这…

    技术杂谈 2023年6月1日
    094
  • Wireshark抓包实例诊断TCP连接问题

    转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese 介绍 前文论述了TCP基础知识,从本节开始,通过TCP抓包实例…

    技术杂谈 2023年5月31日
    092
  • PyQt5 窗口事件

    ################################ PyQt5中文网 – PyQt5全套视频教程 # https://www.PyQt5.cn/ # 主讲: 村长 #…

    技术杂谈 2023年5月31日
    083
  • Maven配置私有仓库

    前言 当公司或个人具有自己独有的jar时,不想公开,一般就会放在自己的私有Maven仓库中,在项目中需要引用,此时就需要将公司私有仓库配置到maven当中,一般我们的maven配置…

    技术杂谈 2023年6月21日
    099
  • 核密度估计(KDE)原理及实现

    https://blog.csdn.net/qq_40996400/article/details/103772706 此处仅为备档收藏,建议查看原文,链接见上 参数估计指样本数据…

    技术杂谈 2023年5月31日
    082
  • 分布式ID算法uuid,snowflake,leaf

    分布式ID算法uuid,snowflake,leaf SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 lon…

    技术杂谈 2023年5月31日
    090
  • SpringBoot整合Redis

    创建redis缓存配置类,配置插件(较为固定) package com.xsha.servicebase; import com.fasterxml.jackson.annotat…

    技术杂谈 2023年6月21日
    0116
  • [转]钉钉宜搭

    1. 简介 2. 首页 3. 工作台 4. 普通表单 5. 流程表单 6. 报表 7. 外部链接 8. 自定义页面 9. 高级功能 1. 简介 词汇表可以帮助您了解一些特殊词汇的概…

    技术杂谈 2023年5月30日
    098
  • 5个节约生命的Python小技巧

    前言 Python是一种强大且易上手的语言,语法简洁优雅,不像Java那么繁琐废话,并且有一些特殊的函数或语法可以让代码变得更加 简短精悍。根据我的经验,下面介绍常用的5个Pyth…

    技术杂谈 2023年6月21日
    0107
  • 手把手教你:图像识别的垃圾分类系统

    系列文章 手把手教你:人脸识别考勤系统 手把手教你:基于粒子群优化算法(PSO)优化卷积神经网络(CNN)的文本分类 @ 系列文章 项目简介 一、项目架构 二、图像数据 三、环境介…

    技术杂谈 2023年7月25日
    089
  • Windows的三种坐标系:屏幕坐标系,非客户区坐标系,客户区坐标系

    屏幕坐标系:以屏幕的左上角为原点,如图所示GetWindowRect() 函数获得的 RECT 就是以屏幕坐标系算的。 非客户区坐标系(窗口坐标系)包括标题栏的部分。GetWind…

    技术杂谈 2023年5月31日
    079
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球