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

简介: 1、Airtest框架介绍:Airtest适用项目、Airtest特点、Airtest的优势;2、Airtest框架组成、原理;Airtest环境搭建及IDE的简单使用;3、Airtest开展Windows应用自动化测试实践:连接Windows应用Windows、常用API编写、测试代码设计、测试用例运行效果、查看测试报告

写在前面


在上一篇文章中,我们介绍了《基于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

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的简单使用

官方文档: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即可启动

2.Airtest IDE使用

1)生成报告

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


2)图片/代码模式切换

Airtest IDE中右键,即可两种模式相互切换

切换后的效果如下:

四、Airtest开展Windows应用自动化测试实践

1.连接Windows应用

连接Windows应用有三种方法,分别是:

1)通过搜索窗口连接

设备窗-Windows窗口连接-搜索窗口,选择窗口后,点击连接

2)通过句柄连接

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

3)通过正则匹配应用应用标题进行连接

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

1)代码构成

  • 导入核心api和初始化客户端的方法
# -*- encoding=utf8 -*-__author__="Administrator"importrandomfromairtest.core.apiimport*fromairtest.cli.parserimportcli_setup
  • 连接windows应用
# 连接windows应用ifnotcli_setup:
auto_setup(__file__, logdir=True, devices=["Windows:///?title_re=.*企业微信*"])
  • Airtest IDE遵循python编码风格,因此可以将各个测试动作/场景封装成一个一个的函数,当然也可以封装在其他文件里,然后导入引用

2)案例

  • 发送文本消息:

操作步骤为:进入聊天窗口>输入文本内容>发送

defsend_text(time):
setup_send_msg()  # 进入聊天窗口foriinrange(time):
text("这是AIRTEST发送的第%s条消息"%str(i))  # 输入文本消息内容keyevent("{ENTER}")  # 按下键盘Enter键,要大写keyevent("{ENTER}")  # 第一遍按下Enter是防止此时的输入法为中文,第二遍按下Enter是发送
  • 截图发送

操作步骤为:进入聊天窗口>点击截图按钮>滑动鼠标拉取截图区域>确认发送截图

defsend_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也可以用于pycharm编辑器下,需要手动提前安装airtest库:pip install -U airtest,安装后即可新建airtest脚本,语法和在Airtest IDE中编写时一致。另外,pycharm编辑器也可以直接打开airtest脚本;
  • 对于web、APP自动化主要用该端特定的自动化框架,如selenium、appium,而此类测试框架无法实现的Windows应的操作,则可以借助Airtest实现,从而打通端到端自动化测试流程;
  • 自动化测试编码实现仅仅是自动化测试流程中一个小环节,更重要的是场景设计、用例实现以及如何发挥自动化测试的价值;
  • 自动化测试可能不会发现多少bug,但却给发现bug创造了更多可能
相关实践学习
基于函数计算实现AI推理
本场景基于函数计算建立一个TensorFlow Serverless AI推理平台。
相关文章
|
15小时前
|
敏捷开发 测试技术 持续交付
深入理解自动化测试框架的设计原则
【5月更文挑战第28天】 在软件开发的快速迭代过程中,自动化测试已成为确保产品质量和加速市场投放的关键手段。本文将探讨自动化测试框架设计的核心原则,包括可维护性、灵活性、可扩展性和可靠性。通过分析这些原则如何影响自动化测试的效率和效果,我们旨在为软件测试工程师提供构建或评估现有自动化测试框架时的参考依据。
|
1天前
|
Java 测试技术 持续交付
Java中的异常处理机制探索自动化测试在微服务架构中的实践与挑战
【5月更文挑战第27天】本文将深入探讨Java中的异常处理机制,包括异常的概念、分类以及如何使用try-catch-finally语句进行异常处理。文章还将介绍自定义异常的方法以及在实际开发中如何选择合适的异常处理策略。 【5月更文挑战第27天】 随着软件开发领域向微服务架构的转型,传统的软件测试方法面临诸多挑战。本文旨在探讨自动化测试在微服务环境下的应用实践及所面临的问题。我们将从微服务的特性出发,分析自动化测试的必要性,并深入讨论如何构建一个高效、鲁棒的自动化测试框架。文章还将介绍一系列创新的测试策略和工具选择,以及如何克服微服务带来的分布式复杂性。最后,通过案例研究,展示自动化测试在实
|
1天前
|
设计模式 敏捷开发 监控
深入探究软件自动化测试的策略与实践深入理解PHP中的命名空间
【5月更文挑战第27天】 在软件开发周期中,确保代码质量是至关重要的一环。随着敏捷开发和持续集成的普及,自动化测试成为提升效率和保障软件质量的重要手段。本文将详细探讨自动化测试策略的制定、工具选择以及在实际项目中的执行过程。我们将从自动化测试的基本原则出发,分析不同类型和级别的自动化测试案例,并结合具体实例,讨论如何优化测试流程,减少冗余,提高测试覆盖率和准确性。通过阅读本文,读者将获得一套实用的自动化测试实施框架,以支持其在快速迭代的开发环境中维护高水平的软件品质。 【5月更文挑战第27天】在本文中,我们将探讨PHP中的命名空间(namespace)的概念、用途和实现方式。通过详细解释命名
|
1天前
|
运维 监控 Linux
提升系统稳定性:Linux服务器性能监控与故障排查实践深入理解与实践:持续集成在软件测试中的应用
【5月更文挑战第27天】在互联网服务日益增长的今天,保障Linux服务器的性能和稳定性对于企业运维至关重要。本文将详细探讨Linux服务器性能监控的工具选择、故障排查流程以及优化策略,旨在帮助运维人员快速定位问题并提升系统的整体运行效率。通过实际案例分析,我们将展示如何利用系统资源监控、日志分析和性能调优等手段,有效预防和解决服务器性能瓶颈。
|
1天前
|
机器学习/深度学习 敏捷开发 测试技术
深入理解自动化测试:框架选择与实践挑战利用机器学习技术优化数据中心冷却系统
【5月更文挑战第27天】 在现代软件开发周期中,自动化测试已成为确保产品质量和加快市场投放的关键步骤。本文深入探讨了自动化测试的框架选择问题,并剖析了实施过程中面临的挑战及其解决方案。通过比较不同测试框架的特点,我们旨在为读者提供一套明确的指导原则,帮助他们根据项目需求做出恰当的技术决策。同时,文中还分享了实际案例和最佳实践,以期帮助开发团队克服实施自动化测试时可能遇到的障碍。
|
1天前
|
机器学习/深度学习 敏捷开发 测试技术
深入探索软件测试中的持续集成与持续部署(CI/CD)实践利用机器学习提升网络安全防御效能
【5月更文挑战第27天】 在现代软件开发的快节奏环境中,持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)已成为确保产品质量和加快交付速度的关键策略。本文将深入探讨CI/CD在软件测试中的应用,分析其对提高自动化测试效率、缩短反馈周期以及优化发布流程的重要性。通过实际案例研究,我们揭示了成功实施CI/CD的最佳实践,并讨论了面临的挑战及其解决方案。
|
1天前
|
安全 数据管理 测试技术
网络安全与信息安全:防范漏洞、加强加密与提升安全意识深入探索自动化测试框架的设计原则与实践应用化测试解决方案。文章不仅涵盖了框架选择的标准,还详细阐述了如何根据项目需求定制测试流程,以及如何利用持续集成工具实现测试的自动触发和结果反馈。最后,文中还将讨论测试数据管理、测试用例优化及团队协作等关键问题,为读者提供全面的自动化测试框架设计与实施指南。
【5月更文挑战第27天】 在数字化时代,网络安全与信息安全已成为维护国家安全、企业利益和个人隐私的重要环节。本文旨在分享关于网络安全漏洞的识别与防范、加密技术的应用以及提升安全意识的重要性。通过对这些方面的深入探讨,我们希望能为读者提供一些实用的建议和策略,以应对日益严峻的网络安全挑战。 【5月更文挑战第27天】 在软件开发周期中,自动化测试作为保障软件质量的关键步骤,其重要性日益凸显。本文旨在剖析自动化测试框架设计的核心原则,并结合具体案例探讨其在实际应用中的执行策略。通过对比分析不同测试框架的优缺点,我们提出一套高效、可扩展且易于维护的自动
|
1天前
|
设计模式 敏捷开发 监控
深入探索软件测试:自动化与性能优化实践
【5月更文挑战第27天】 在软件开发生命周期中,测试阶段是保障产品质量和用户体验的关键环节。随着敏捷开发和持续集成的理念深入人心,自动化测试已成为提升效率、确保可靠性的重要手段。本文将深入探讨自动化测试的最佳实践,并结合性能优化策略,旨在为读者提供一套全面提升软件测试效能的技术方案。通过分析现代软件测试的挑战与机遇,我们将揭示如何有效整合自动化工具、框架选择、脚本开发、以及持续监控等多维度因素,打造一个高效、稳定的测试环境。
|
1天前
|
搜索推荐 测试技术 UED
软件测试的艺术:从理论到实践的探索之旅
本文深入探讨了软件测试的核心理念、方法论及其在现代软件开发中的应用。通过分析测试的不同阶段和类型,文章揭示了如何有效地识别和解决软件缺陷,确保产品质量。同时,本文还提供了实际案例分析,展示了测试策略在实际项目中的应用效果,旨在帮助读者全面理解软件测试的重要性和复杂性。
|
1天前
|
敏捷开发 监控 Java
深入理解自动化测试:框架选择与实践
【5月更文挑战第27天】在软件开发的快速迭代过程中,自动化测试已成为提升效率、确保质量的重要手段。本文将探讨自动化测试框架的选择标准及其在实际项目中的应用情况,以帮助读者更好地理解自动化测试的价值和实施策略。文中不仅涉及框架的功能对比,还结合案例分析,展示如何根据不同需求制定合适的自动化测试方案。