如何实现WinApp的UI自动化测试?
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框架程序,它提供许多好用的功能,例如获取窗口对象、窗口属性调整、截图、全局热键注册、剪切板操作和管理员权限提权。是一款非常优秀的自动化测试工具。
最后如果你想学习软件测试和需要软件测试资料
相关文章:
如何实现WinApp的UI自动化测试?
WinApp(WindowsAPP)是运行在Windows操作系统上的应用程序,通常会提供一个可视的界面,用于和用户交互。例如运行在Windows系统上的Microsoft Office、PyCharm、Visual Studio Code、Chrome,都属于WinApp。常见的WinApp&…...
chrome扩展程序开发之在目标页面运行自己的JS
原文地址:https://qdgithub.com/home/index/article/aid/247.html chrome 插件开发的入门介绍,实现利用 chrome 扩展实现在目标网页运行我们的 js 的功能。关于 chrome 扩展的详细内容,可以通过官网了解。 开发工具很简单,记事本…...
NLP项目之语种识别
目录 1. 代码及解读2. 知识点n-grams仅保留最常见的1000个n-grams。意思是n1000 ? 1. 代码及解读 in_f open(data.csv) lines in_f.readlines() in_f.close() dataset [(line.strip()[:-3], line.strip()[-2:]) for line in lines] print(dataset[:5])[(1 december wereld…...
Linux lpr命令教程:如何使用lpr命令打印文件(附案例详解和注意事项)
Linux lpr命令介绍 lpr命令在Unix-like操作系统中用于提交打印任务。如果在命令行中指定了文件名,那么这些文件将被发送到指定的打印机(如果没有指定目的地,则发送到默认目的地)。如果命令行中没有列出文件,lpr将从标…...
浅谈C语言inline关键字
对于C开发者来说,inline是个再熟悉不过的关键字,因为默认的成员函数都是inline,也是常规高校教材中宣扬C的“优势”之一。 但是C语言其实也是支持inline关键字的,而且是很早期的gcc就支持了该关键字。在Linux0.12版本内核代码中也…...
Flink1.17实战教程(第六篇:容错机制)
系列文章目录 Flink1.17实战教程(第一篇:概念、部署、架构) Flink1.17实战教程(第二篇:DataStream API) Flink1.17实战教程(第三篇:时间和窗口) Flink1.17实战教程&…...
OpenCV实战 -- 维生素药片的检测记数
文章目录 检测记数原图经过操作开始进行消除粘连性--形态学变换总结实现方法1. 读取图片:2. 形态学处理:3. 二值化:4. 提取轮廓:5. 轮廓筛选和计数: 分水岭算法:逐行解释在基于距离变换的分水岭算法中&…...
【AI】注意力机制与深度学习模型
目录 一、注意力机制 二、了解发展历程 2.1 早期萌芽: 2.2 真正意义的注意力机制: 2.3 2015 年及以后: 2.4 自注意力与 Transformer: 2.5 BERT 与预训练模型: 三、基本框架 1. 打分函数(Score Fun…...
HTML5和JS实现新年礼花效果
HTML5和JS实现新年礼花效果 2023兔年再见,2024龙年来临了! 祝愿读者朋友们在2024年里,身体健康,心灵愉悦,梦想成真。 下面是用HTML5和JS实现新年礼花效果: 源码如下: <!DOCTYPE html>…...
【owt-server】一些构建项目梳理
【owt-server】清理日志:owt、srs、ffmpeg 【owt】p2p client mfc 工程梳理【m98】webrtc vs2017构建带符号的debug库【OWT】梳理构建的webrtc和owt mfc工程 m79的mfc客户端及owt-client...
Linux shell编程学习笔记38:history命令
目录 0 前言 1 history命令的功能、格式和退出状态1.1 history命令的功能1.2 history命令的格式1.3退出状态2 命令应用实例2.1 history:显示命令历史列表2.2 history -a:将当前会话的命令行历史追加到历史文件~/.bash_history中2.3 history -c…...
elasticsearch安装教程(超详细)
1.1 创建网络(单点部署) 因为我们还需要部署 kibana 容器,因此需要让 es 和 kibana 容器互联,所有先创建一个网络: docker network create es-net 1.2.加载镜像 采用的版本为 7.12.1 的 elasticsearch;…...
arkts中@Watch监听的使用
概述 Watch用于监听状态变量的变化,当状态变量变化时,Watch的回调方法将被调用。Watch在ArkUI框架内部判断数值有无更新使用的是严格相等(),遵循严格相等规范。当在严格相等为false的情况下,就会触发Watch的…...
【Jmeter】Jmeter基础9-BeanShell介绍
3、BeanShell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法。 3.1、Jmeter中使用的BeanShell 在Jmeter中,除了配置元件,其他类型的元件中都有BeanShell。BeanShell 是一种完全符合Java语法规范的脚本语言,并且又拥…...
详解数组的轮转
𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…...
html 表格 笔记
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>第二个页面</title><meta name"language" content"cn"> </head> <body><h2 sytle"width:500px;…...
计算机网络【HTTP 面试题】
HTTP的请求报文结构和响应报文结构 HTTP请求报文主要由请求行、请求头、空行、请求正文(Get请求没有请求正文)4部分组成。 1、请求行 由三部分组成,分别为:请求方法、URL以及协议版本,之间由空格分隔;请…...
linux基于用户身份对资源访问进行控制的解析及过程
linux中用户分为三类 1.超级用户(root) 拥有至高无上的权限 2.普通用户 人为创建、权限小,权限受到控制 3.程序用户 运行程序的用户,不是给人使用的,给程序使用的,一般不给登录! 组账…...
手动创建idea SpringBoot 项目
步骤一: 步骤二: 选择Spring initializer -> Project SDK 选择自己的JDK版本 ->Next 步骤三: Maven POM ->Next 步骤四: 根据JDK版本选择Spring Boot版本 11版本及以上JDK建议选用3.2版本,JDK为11版本…...
【Go语言入门:Go语言的数据结构】
文章目录 3.Go语言的数据结构:3.1. 指针3.2. struct(结构体)3.3. Map(映射,哈希) 3.Go语言的数据结构: 简介: 在Go语言中,数据结构体可以分为四种类型:基础类型、聚合类型、引用类型…...
QT designer的ui文件转py文件之后,实现pycharm中运行以方便修改逻辑,即添加实时模板框架
为PyCharm中的实时模板,你需要遵循以下步骤: 打开PyCharm的设置: 选择 File > Settings(在macOS上是 PyCharm > Preferences)。 导航到实时模板: 在设置中找到 Editor > Live Templates。 添加新的模板组 (可选): 为了…...
什么是负载均衡?
负载均衡是指在计算机网络领域中,将客户端请求分配到多台服务器上以实现带宽资源共享、优化资源利用率和提高系统性能的技术。负载均衡可以帮助小云有效解决单个服务器容量不足或性能瓶颈的问题,小云通过平衡流量负载,使得多台服务器能够共同…...
Python和Java的优缺点
Python的优点: 简单易学:Python的语法简洁清晰,易于学习和理解。丰富的库和框架:Python拥有庞大的标准库和活跃的开源社区,可以快速使用各种功能强大的库和框架,比如NumPy、Pandas、Django等。可读性强&am…...
AES - 在tiny-AES-c基础上封装了2个应用函数(加密/解密)
文章目录 AES - 在tiny-AES-c基础上封装了2个应用函数(加密/解密)概述增加2个封装函数的AES库aes.haes.c在官方测试程序上改的测试程序(用来测试这2个封装函数)END AES - 在tiny-AES-c基础上封装了2个应用函数(加密/解密) 概述 在github山有个星数很高的AES的C库 tiny-AES-c …...
51和32单片机读取FSR薄膜压力传感器压力变化
文章目录 简介线性电压转换模块51单片机读取DO接线方式51代码实验效果 32单片机读取AO接线方式32代码实验效果 总结 简介 FSR薄膜压力传感器是可以将压力变化转换为电阻变化的一种传感器,单片机可以读取然后作为粗略测量压力(仅提供压力变化,…...
【maven】pom.xml 文件详解
有关 maven 其他配置讲解参考 maven 配置文件 setting.xml 详解 pom.xml 文件是 Maven 项目的核心配置文件,其中包含了项目的元数据、构建配置、依赖管理等信息。以下是一个 pom.xml 文件的主要部分: <?xml version"1.0" encoding"U…...
SpringMVC源码解析——DispatcherServlet初始化
在Spring中,ContextLoaderListener只是辅助功能,用于创建WebApplicationContext类型的实例,而真正的逻辑实现其实是在DispatcherServlet中进行的,DispatcherServlet是实现Servlet接口的实现类。Servlet是一个JAVA编写的程序&#…...
搞定Apache Superset
踩雷了无数次终于解决了Superset的一系列问题 现在是北京时间2023年12月27日,亲测有效。 Superset概述 Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用,可对接各种数据源,包括很多现代的大数据分析引擎ÿ…...
【每日试题】java面试之ssm框架
以下是20道常见的SSM(SpringSpring MVCMyBatis)面试题目和答案: 什么是SSM框架? SSM是指SpringSpring MVCMyBatis的组合,它是Java Web开发中常用的轻量级框架集合。 介绍一下SSM框架各个组件的作用? Sprin…...
Flutter 疑难杂症集合
一. Flutter集成uni小程序sdk 1. 手机连接电脑测试打开uni小程序没问题,打包成apk后debug编译下的apk也没问题,但就是release编译的apk包打不开小程序。 报错情景:点击后页面会闪现一下黑色的背景,然后又跳转回了点击之前的页面。…...
义乌小商品批发网上进货/windows优化大师怎么样
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid3886 题意:给一定区间[A,B],一串由/,\,-组成的符号串。求满足符号串的数字个数。 •/表示数字从左到右递增•\表示数字从左到右递减•-表示数字从左到右相等分析:dp[i][j][k]…...
北京齐力众信网站建设/电商推广和网络推广的区别
---恢复内容开始--- 逻辑控制器:控制执行顺序 simple controller:跟采样器配合,提供一个块的结构和控制。作为一个整体来执行。 loop controller:用${__threadNum}函数来获取当前线程,线程多时执行顺序被打乱。 once only controller:脚本只执…...
pc开奖网站开发/网址缩短在线生成器
来源是:Text at LEFT如何更改CSS以使两个DIV看起来像?----------------------|Text at LEFT | ####|| | ####|| | ####|| | || | |----------------------即。文本在左侧DIV左上角,图像在右侧DIV右上方对齐。更新:我使用的是&…...
wordpress 销售主题/搭建网站的步骤
EasyNVR视频边缘计算网关在视频能力上非常灵活,支持标准的RTSP/Onvif协议接入,并进行视频直播、录像、检索与回放服务,包括分发RTSP、FLV、RTMP、WS-FLV、HLS等格式的视频流,同时EasyNVR也提供了各种接口,便于用户的二…...
手机网站焦点图代码/百度入口网页版
HADDR HADDR是来自AHB总线上地址线,是字节地址。连接到FSMC_A[25:0],再连接到外部的存储器, 地址线 首先明确一点,26根地址线,它是26个位。它的寻址空间或者寻址容量是2^26,单位是Byte。HADDR是字节地址…...
wordpress 支持数据库/百度搜索排名推广
前言在日常的android开发当中,按钮是必不可少控件。但是如果要实现下面的效果恐怕写shape文件都要写的头晕w(゚Д゚)ww(゚Д゚)w,所以为了以后的开发,我们就简单的封装下。代码块很简单我们通过GradientDrawabl…...