干货丨如何实现WinApp的UI自动化测试?自动化工具如何选择人?

news2024/11/17 7:51:03

WinApp(WindowsAPP)是运行在Windows操作系统上的应用程序,通常会提供一个可视的界面,用于和用户交互。例如运行在Windows系统上的Microsoft Office、PyCharm、Visual Studio Code、Chrome,都属于WinApp。常见的WinApp,其扩展名基本都是*.exe,运行后也都会有一个漂亮、易用的UI界面,本章就详细介绍如何通过脚本实现WinApp的UI自动化测试。

​1.1.WinApp测试简介

Windows系统下开发GUI应用程序有很多方式,常见有基于C++的Qt、MFC、WTL、wxWidgets、DirectUI、Htmlayout,基于C#的Winform、WPF,基于Chromium和Node.js的Electron,基于Java的AWT、Swing,基于Pascal的Delphi,基于Go语言的walk,每种技术都有自己的亮点。但对于测试人员来说,都要全面开展测试,为保障产品质量下足功夫,带给用户好的体验。

WinApp测试涉及面非常广,大方向上可以从安装与卸载、升级更新、UI界面、业务功能、性能、交叉事件、兼容性、安全性、硬件环境、异常情况几个方面开展测试。

安装与卸载:验证程序是否可以正确安装、运行、卸载。

升级更新:新版本发布后,存在更新提示,且下载、安装、更新、启动、运行、卸载等功能正常。

UI界面:验证程序界面的布局、风格是否与需求相符,文字、菜单、配色、图片等显示正确,易操作、人性化。

业务功能:验证需求说明书中描述的业务功能模块均以实现,且符合预期。

性能:验证程序的负载能力,对CPU、磁盘、内存、电量等的消耗。

交叉事件:与Windows系统上的其它应用互不影响。例如同时打开被测程序和其它一个程序,两者互不干扰,都可以稳定运行。

兼容性:可以在支持的不同品牌、型号、系统版本上正常运行。

安全性:安全性是非常重要的一项测试,例如用户权限、数据安全、接口安全。

硬件环境:不同硬件环境下验证,例如CPU、磁盘、内存、笔记本电量等对程序的影响。

异常情况:各种异常情况下测试程序,例如磁盘不足、网络不佳等情况。

WinApp的功能测试实质上和测试人员测试Web、移动端APP的功能测试是相同的,都是一种黑盒测试。以需求为准,运用各种测试方法设计测试用例,尽可能地思考、全覆盖用户使用场景,实现测试用例,保障产品质量。

1.2.WinApp自动化测试工具

WinApp自动化测试工具非常多,但不同的项目实现自动化测试有着不同的目的,因此根据自己需求结合自动化测试工具的优缺点,选择合适的工具尤为重要,对后续的自动化脚本开发及维护都大有裨益。下面整理了一些WinApp自动化测试工具,给大家提供参考。

1.AutoIt

AutoIt当前最新版本是v3,是用以编写并生成具有BASIC语言风格的脚本程序的免费软件,它被设计用来在Windows GUI(用户界面)中进行自动操作。使用AutoIt可以模拟鼠标和键盘实现对窗口/控件的操作,是一款非常优秀的Windows GUI自动化测试软件。AutoIt有着诸多优点,例如简单易懂的类BASIC表达式、操作窗口与进程、直接与窗口的"标准控件"交互、脚本可以编译为标准可执行文件、COM支持、直接调用外部DLL和Windows API函数、高精度和易使用的数学运算。AutoIt在设计时就尽可能小,且不用依赖外部DLL文件或添加注册表项目即可独立运行,也可以安全的成为服务运行。脚本可以使用Aut2Exe编译为可独立运行的文件。

2.WinAppDriver

WinAppDriver(Windows Application Driver)是微软的一款客户端自动化测试工具,类似Selenium的UI自动化测试服务工具。支持测试运行在Windows 10或Windows Server 2016以上系统的UWP、WinForms、WPF、Win32程序。WinAppDriver支持Appium,因此使用Appium-Python-Client依赖库可以像测试移动端APP一样,完成Windows桌面程序的自动化脚本的开发。

3.PyWinAuto

PyWinAuto是Python的一个库,用于测试Windows系统上的GUI应用程序,允许发送鼠标和键盘操作到窗口对话框和控件。PyWinAuto提供的API是对Windows标准控件的行为处理,例如指定窗口、鼠标操作、键盘操作、获取窗口或控件属性,使用方便,且对中文也有很好地支持。

4.PyAutoGUI

PyAutoGUI是Python的一个第三方库,可对GUI程序实现自动化测试。主要通过控制鼠标和键盘,与其他应用程序交互。PyAutoGUI可以在Windows、macOS和Linux系统上工作,支持Python2和Python3。

5.Coded UI

Coded UI Test是Visual Studio 2010对于Testing Project(测试工程)提供的关于UI自动化测试的框架,支持Win32、Web、WPF等UI自动化测试,是一个非常强大的测试工具。它的原理是获取到Windows窗口上的控件,然后针对控件的部分属性进行获取和对比,模拟对控件点击、双击、右键点击等事件。Coded UI不但支持手动编写,还支持自动录制。

6.UIAutomation

UIAutomation封装了微软的UIAutomation API,支持测试Win32、MFC、WPF、Modern UI(Metro UI)、Qt、Firefox等UI框架程序,它提供许多好用的功能,例如获取窗口对象、窗口属性调整、截图、全局热键注册、剪切板操作和管理员权限提权。是一款非常优秀的自动化测试工具。

最后:

可以到我的个人号:atstudy-js,可以免费领取一份10G软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!其中包括了有基础知识、Linux必备、Mysql数据库、抓包工具、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试持续集成、测试架构开发测试框架、性能测试等。

这些测试资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/687765.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Arduino IDE 2.1.0 下安装ESP32(2.0.9)

很久没玩Arduino了。新装了一台电脑,想重新捡起ESP32-WROOM-32开发板玩玩。官网上下了Arduino IDE 2.1.0,然后配置ESP32开发环境。 下载及安装Arduino IDE略过不谈。装完后还是老规矩,文件 -> 首选项,先把自定义板管理地址填入…

好程序员:2023年自学Java四阶段学习法,真滴好用麻啦!

同学们,我是好程序员小源,今天给大家整理了自学Java的四个阶段,大家可以按照这四个阶段学习哦~会更加规划系统一点! 第一阶段: JavaSE[5周] 本阶段从零基础起步,荃面深入的学系JavaSE课程,主要内容包括Java…

支付“清结算”体系的设计方法

支付完成以后进行履约,履约完成以后就需要清算各方利益并最终进行结算,清结算体系与支付体系并行是支付范畴另一个非常庞大的体系。 一、清算系统设计 我们都知道一笔支付最终都是要进行清算的,业务一般都会有众多参与者或者利益方&#xff…

ESP32网络应用 -- ESP32-S3使用MQTT协议与其他设备进行数据交互

在嵌入式物联网技术领域,MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)协议是一种非常常见且应用广泛的消息协议,它基于发布/订阅范式进行数据传输。关于MQTT协议的详细介绍,网络上不乏相关文章,此处不再进行详细论述。 ESP32-S3是一款应用广泛的物联网…

WPF实现登录页面设计

1、文件架构 2、CommandBase.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Input;namespace CourseManagement.Common {public class CommandBase : ICommand{public ev…

EXCEL和VBA如何改变字母大小写 和 大小写互换?我写的自定义函数

目录 1 EXCEL里改变大小写的内置函数 2.1 转换大小写的函数 2.2 神奇的把数字和中文大小写转换的函数 2 VBA里改变大小写的内置函数 2.1 改变大小写 的内置函数 2.2 使用 excel的WorksheetFunction. text() 函数 3 如果想交换字母的大小写呢? 3.1 ASCII码里…

Java Servlet 技术

一、Servlet 简介 Servlet 是 JavaEE 的规范之一,通俗的来说就是 Java 接口,将来我们可以定义 Java 类来实现这个接口,并由 Web 服务器运行 Servlet ,所以 TomCat 又被称作 Servlet 容器。 Servlet 提供了动态 Web 资源开发技术…

偷偷爆料下工资特别高的8个开发岗。。。。。

外国网站 devjobsscanner 统计了全年需求量大的8种编程语言,基本上薪资很高的,也就是这几个方向了。 对于跳槽、找工作、转行、转语言等,都有一定的参考意义。 接下来结合网站统计和招聘网站的数据,可以做一个对照。 NO.1 Java…

MongoDB的基本操作

MongoDB的基本操作 MongoDB MongoDB是一个基于分布式文件存储的数据库,由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数…

游泳带什么防水耳机好,最佳游泳耳机的推荐排行榜

在炎炎夏日,玩水无疑是降温的最佳方式。既可以在室内游泳馆通过游泳锻炼身体,也可以到海滨浴场享受游泳和日光浴的乐趣。因此,选购一款适合水上活动的游泳耳机变得尤为重要。音乐的力量可以让原本单调乏味的游泳运动变得更具活力,…

Linux基础服务4——ftp

文章目录 一、基本了解1.1 C/S型架构1.2 数据连接模式1.3 用户认证 二、安装服务端2.1 安装vsftpd2.2 配置文件2.3 主配置文件参数2.4 windows访问服务端2.4.1 系统用户访问2.4.2 匿名用户访问2.4.2 开启客户端上传权限2.4.3 开启客户端其他权限2.4.4 开启客户端删除、修改权限…

hvv 文件上传和文件包含考点

天眼如何判断文件上传漏洞是否成功 数据包分析 观察客户端请求数据:是否包含webshell流量特征观察服务器返回信息:是否有“上传成功”或“success upload”等信息提示 尝试寻找上传的文件:访问上传的文件看是否存在;查看文件上传…

Redisson分布式锁-源码分析

Redisson分布式锁整体流程图 Redisson分布式锁源码流程图 Redisson分布式锁源码解析 获取分布式锁lock private void lock(long leaseTime, TimeUnit unit, boolean interruptibly) throws InterruptedException {//获取当前线程IDlong threadId Thread.currentThread().get…

参与 2023 第二季度官方 Flutter 开发者调查

Flutter 3.10 已经正式发布,每个季度一次的 Flutter 开发者调查也来啦!邀请社区的各位成员们填写: 调研旨在了解你对 Flutter 的满意程度以及对其各个子系统的反馈。你的意见将对我们改进 Flutter 的功能和性能产生重要影响。 在这次调研中&a…

Linux——软硬链接的理解

目录 那什么是链接? 链接命令的生成: 实验案例: 硬链接概念: 软链接概念: 情况1:删除myfile.txt: 情况2:重新创建一个新的myfile.txt文件: 软链接作用&#xff1…

推特引流:社交引流的技巧与方法

推特是一个广泛使用的社交媒体平台,可以用于引流和推广您的品牌、产品或服务。以下是一些社交引流的技巧和方法,可以帮助您在推特上获得更多的关注和流量: 优化个人资料:确保您的推特个人资料完整并具有吸引力。包括一个清晰的头…

yolov8-02 训练自己的数据集

1. 准备数据集 数据集格式跟yolov5一样,关于如何准备数据集可见之前的文章。 2. 创建 mydata.yaml 格式参考coco128.yaml,主要是 train / validate文件的存放路径,可以是同一个。 在ultralytics-main/ultralytics/datasets中,…

【Linux】ubuntu20.04安装ansys2023r1教程--超详细

一、安装包及其和谐文件 双击挂载 二、在ubuntu上安装依赖项 执行命令sudo apt install build-essential xterm libmotif-dev libxtst-dev libxt-dev libzip-dev libxmu-dev tcl tk lsb csh xfonts-75dpi xfonts-100dpi wine 弹出一个提示,需要去下载一个171MB的压…

Simulink 中基于 FPGA 的波束成形:算法设计(附源码)

一、前言 本示例显示了在 Simulink中开发适用于在硬件(如现场可编程门阵列 (FPGA))上实现的波束成形器的工作流程的前半部分。它还演示如何将实现模型的结果与行为模型的结果进行比较。 示例 Simulink 中基于 FPGA 的波束成形&…

shell 数组 ${array[@]} ${array[*]}的使用及区别

数组定义 shell中用括号来表示数组,数组元素间使用空格隔开。 例如: a(1 2 3 4) 表示a数组且有元素为1,2,3,4 也可单个元素逐步来赋值 b[1]"a" b[2]"b" b[3]"c" echo ${b[]} # a b c 关联数组 定义关联数组&#xf…