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

news/2024/12/22 18:39:32/

写在前面

本次分享的内容是基于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创造了更多可能;
学习安排上
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。【保证100%免费】

视频文档获取方式:

这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。


http://www.ppmy.cn/news/297896.html

相关文章

Radeon PRO W6400参数

Radeon PRO W6400 是一款 TDP 50W 的入门款工作站显卡,采用了 6nm 工艺。参数方面,Radeon PRO W6400 配备了 768 个流处理器,与 Radeon RX 6400 相同,显存同样是 64 bit 位宽的 4GB GDDR6。Radeon PRO W6400 型号具有全尺寸 PCIe …

nvidia官方cuda性能测试软件,NVIDIA CUDA应用软件测试

NVIDIA CUDA应用软件测试 NVIDIA CUDA架构目前在国内外数十款软件中均有应用,对于经常需要用到视频转码的用户来说最难熬的就是转码过程中等待的时间,而如果我们运用NVIDIA CUDA转码的话则会大大缩短转码的时间。基于此,下面我们就带目前市面…

4610 Cards

模拟题&#xff0c;关键是细节 #include<stdio.h> #include<string.h> #include<algorithm> #define LL long long using namespace std; const int maxn100000010; LL ans,q; int n,k,score[16]{0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4},cou[16],fen[1005]; int s…

6.14.10.6999 (20090814) - ATI Mobility Radeon HD 4500 Series

6.14.10.6999 (20090814) - ATI Mobility Radeon HD 4500 Series 2010年10月10日 6.14.10.6999 (20090814) - ATI Mobility Radeon HD 4500 Series 笔记本驱动 满意答案&#xff1a; ATI 上一代的移动显卡&#xff0c;为对抗NVIDIA的GF 7000系列显卡出现的&#xff0c;最高端的…

黑苹果驱动hd4000

2019独角兽企业重金招聘Python工程师标准>>> 我的机器是用变色龙引导的。 org.chameleon.Boot.plist中GraphicsEnabler 设置为Yes 另外加入下面代码 <key>device-properties</key> <string>5e0000000100000001000000520000000100000002010c00…

hdu 4766 Network

长春网络赛的题。 用的暴力。 XB看了题目&#xff0c;然后直接说他的思路&#xff0c;我俩讨论后敲的&#xff0c;我也没怎么看题。 我的做法是&#xff0c;先将额外的那个点&#xff08;第一行输入M点&#xff09;&#xff0c;与每个hero为半径的圆求交点&#xff0c;若交点到…

Thinkpad T460P I7 6820HQ版本运算以及显卡能力简单测试

总是忍不住剁手&#xff0c;尤其是在自己感觉某个阶段自己浑身不舒服的时候。上个周末又剁手买了个I7 6820HQ版本的Thinkpad T460P。大致看了下配置&#xff0c;应该说是有着一个不错的处理器以及显卡&#xff0c;只是硬盘是机械盘&#xff0c;我自己又加了一块128G的固态扩展了…

死亡空间2显卡测试软件,求流畅 《死亡空间2》画质如何设置?

低端显卡也能玩爽&#xff1f; 上期我们对一些600~3000元中高端显卡在《死亡空间2》的性能表现有了一个比较详细的测试&#xff0c;表现均无压力&#xff0c;不过用高端卡玩游戏的玩家还是在少数&#xff0c;中低端显卡的占有率还是相当大的&#xff0c;至于什么样的卡能玩&…