实用指南:【 GUI自动化测试】GUI自动化测试(一) 环境安装与测试

news/2025/9/25 21:15:36/文章来源:https://www.cnblogs.com/ljbguanli/p/19112051

实用指南:【 GUI自动化测试】GUI自动化测试(一) 环境安装与测试

请添加图片描述

文章目录

  • 一、为什么要做GUI⾃动化
    • 1.1 GUI⾃动化的意义
    • 1.2 GUI⾃动化适⽤场景
  • 二、为什么选择pywinauto
    • 2.1pywinauto的优势
    • 2.2 pywinauto的局限性
  • 三、安装pywinauto
  • 四、安装UI对象检查⼯具
  • 五、Python 虚拟环境的“环境隔离”核心特性
  • 六、GUI⾃动化简单⽰例
  • 总结


一、为什么要做GUI⾃动化

1.1 GUI⾃动化的意义

在软件测试过程中,有许多重复性的测试⽤例需要执⾏,例如对软件的各种基本功能进⾏验证。如果⼿动测试,测试⼈员需要不断地重复相同的操作步骤,这不仅耗时⽽且容易出错。⽽GUI⾃动化测试⼯具可以在短时间内快速执⾏⼤量重复的测试⽤例,并且能够始终按照预设的逻辑和步骤进⾏操作,从⽽极⼤地提⾼了测试效率。

通过GUI⾃动化测试,可以减少对⼈⼒的依赖。原本需要多名测试⼈员花费数⼩时甚⾄数天才能完成的测试⼯作,现在只需编写好⾃动化测试脚本,由⾃动化测试⼯具在规定时间内完成,这样可以将测试⼈员从繁琐的重复性⼯作中解放出来,在⼀定程度上降低了⼈⼒成本。
在这里插入图片描述

1.2 GUI⾃动化适⽤场景

GUI⾃动化适⽤于各种需要对图形⽤⼾界⾯进⾏重复性、⼀致性测试的场景,尤其在验证软件功能的稳定性、正确性和⽤⼾体验⽅⾯发挥着重要作⽤。

在软件开发的各个阶段,从集成测试到验收测试,它都可以帮助测试⼈员快速发现潜在问题,如界⾯元素是否正常显⽰、交互是否流畅、功能是否按预期⼯作等,从⽽确保软件质量。

GUI⾃动化可以模拟不同⽤⼾环境下的操作,测试其兼容性和稳定性。此外,在进⾏⼤规模测试时,它能显著提⾼测试效率,减少⼈⼒成本,快速提供反馈,⽀持持续集成和持续交付,加速软件开发周期。

总之,GUI⾃动化适⽤于需要⾼效、准确、重复测试GUI应⽤程序的各种场景,有助于提升软件质量、⽤⼾满意度和开发效率。需要注意的是,尽管GUI⾃动化适⽤于上述场景,但其成功依赖于界⾯元素的稳定性⸺若UI频繁变动或涉及复杂交互,维护成本可能陡增。
在这里插入图片描述

这个图展示了自动化测试在项目回归测试中的应用逻辑,结合软件版本迭代场景来解释:

  1. 版本与功能变化
  • v1.0版本:包含「功能1 ~ 功能10」,是初始版本的核心功能。
  • v2.0版本:在保留「功能1 ~ 功能10」(标注为“历史功能”)的基础上,新增了「功能11 ~ 功能30」(红色框突出显示,代表新版本的新增功能)。
  1. 自动化测试的作用(解决回归测试问题)
    回归测试的核心是:验证“新增/修改功能后,原有历史功能是否仍能正常工作”
  • 首先,在v1.0阶段,会为「功能1 ~ 功能10」编写自动化测试脚本(绿色文字“编写自动化测试脚本”指向v1.0,代表提前为旧功能构建自动化测试能力)。
  • 当版本迭代到v2.0(新增了功能11~30)时,需要验证「功能1 ~ 功能10」这些历史功能是否受新版本影响。此时,通过自动化测试(绿色文字“自动化测试”指向v2.0的“历史功能”区域),可以快速、批量地执行原有功能的测试,无需手动重复测试,高效完成回归测试。

简言之,图中用版本迭代的场景,说明“自动化测试能高效解决‘新版本新增功能后,历史功能是否正常’的回归测试问题”。

GUI
-》graphical图形化
GUI自动化测试适用场景:界面不会频繁发生改变,交互不会过于复杂

二、为什么选择pywinauto

Pywinauto是⼀款基于Python的跨平台GUI⾃动化库,专⻔针对Windows桌⾯应⽤程序设计,其核⼼能⼒在于通过模拟⽤⼾交互⾏为(如⿏标点击、键盘输⼊)实现对窗⼝、对话框及内部控件的精准定位与操作,适⽤于⾃动化测试、批量任务处理及⽇常办公流程优化等场景。

该库通过两种底层技术(backend="win32"和backend=“uia”)适配不同框架开发的应⽤程序:

2.1pywinauto的优势

  • 基于Python: Python语言简洁易学,适合快速开发和维护。
  • 跨平台支持:支持Windows 7及以上版本,兼容性良好。
  • 丰富的控件支持:支持Windows原生控件(如按钮、文本框、表格)以及第三方控件(如WPF、Qt)。
  • 动态查找机制:自动等待控件加载完成,无需显式等待。
  • 强大的调试工具:提供pywinauto.findwindows模块,方便定位控件。
  • 社区活跃:开源项目,持续更新,文档和示例丰富。

2.2 pywinauto的局限性

仅⽀持Windows:⽆法⽤于Mac或Linux平台。
对⾮标准控件⽀持有限:某些⾃定义控件可能需要额外处理。

注意:pywinauto⽀持传统Windows原⽣应⽤框架和部分跨平台框架(需在Windows运⾏),以下是⼀些⽆法使⽤
pywinauto 实现GUI⾃动化的应⽤程序分类,以及原因:

  1. 基于Web的应⽤程序
    原因:pywinauto 是为本地Windows应⽤程序设计的,⽆法直接与基于浏览器的Web应⽤
    程序交互。Web应⽤程序的⾃动化通常需要使⽤如Selenium这样的⼯具。

⽰例:GoogleChrome中打开的任何⽹⻚或基于Web的企业应⽤。

  1. 基于⾃定义渲染引擎的应⽤程序

    原因:某些应⽤程序(如使⽤Flutter、ReactNative或其他跨平台框架开发的应⽤)可能使⽤
    ⾃定义的渲染引擎,这些引擎不会暴露标准的WindowsUI⾃动化接⼝(如Win32或UIA)。

⽰例:企业微信、某些使⽤Flutter开发的桌⾯应⽤。

如何分辨什么是基于Web的应⽤程序、使⽤⾃定义渲染框架的应⽤程序?这些在⽬前看起来确实很难。如何分辨是否能⽤pywinauto进⾏⾃动化测试的应⽤程序,在后⾯的“安装UI对象检查⼯具”内容中,再来讲解

三、安装pywinauto

  1. 安装Python:确保已安装Python环境(推荐3.7或更⾼版本)。
pip install pywinauto==0.6.9

安装完成后,可以通过以下命令验证安装:

pip list

如果输出中包含pywinauto,则说明安装成功。

四、安装UI对象检查⼯具

在讲解selenium实现web⾃动化时,定位⻚⾯的元素是必须要的,如何进⾏元素定位?打开⻚⾯开发者⼯具,可以直接进⾏元素定位,定位到元素之后才能对指定元素进⾏⼀系列的操作,对于GUI⾃动化也是⼀样,要想对界⾯的元素进⾏操作,我们得先会“找元素”,⽽找元素我们需要⽤UI对象检查⼯具,

UI对象检查⼯具有很多,诸如Spy++、Inspect.exe、UISpy,这些⼯具基本都⻓得⼀样,且操作上基
本⽆差,上课我们统⼀使⽤UISpy⼯具来进⾏UI对象检查。
在这里插入图片描述

  • UISpy是⼀款由微软提供的⼯具,专⻔⽤于UI⾃动化测试。它允许测试⼈员查看应⽤程序的UI⾃动化模型,包括控件树、属性和事件。UISpy特别适⽤于编写UI⾃动化脚本,因为它提供了⼀个可视化的界⾯来帮助测试⼈员选择UI元素,并且可以模拟⽤⼾对这些UI元素的操作。

是否还记得,我们在“pywinauto局限性”内容中还遗留了⼀个问题:“如何分辨是否能⽤pywinauto 进⾏⾃动化测试的应⽤程序”,在这⾥我们可以跟⼤家公开答案了,应⽤程序可以通过UI对象检查⼯具定位到元素,说明该元素的实现是⽀持传统Windows原⽣应⽤框架,⽽⽆法识别的元素则属于“不能⽤pywinauto进⾏⾃动化测试的”。

五、Python 虚拟环境的“环境隔离”核心特性

在这里插入图片描述

  1. 左侧:Python 通用库(全局环境)
    这是系统级/全局的 Python 环境,安装了 requestsyamlpytestpywinauto 等库。所有不使用“虚拟环境”的项目,都会直接依赖这个全局环境的库

  2. 中间:虚拟环境(Test01 项目)
    下方说明“每个项目独有一份环境,单独来管理所需要的库”,体现了虚拟环境的核心作用:

  1. 右侧:虚拟环境(Test02 项目)
    Test02 的虚拟环境里安装了 pytestpywinauto 库——这说明 Test02 项目的依赖是 pytestpywinauto,它的虚拟环境与全局环境、Test01 的环境完全隔离,库的安装/版本仅服务于 Test02 自身。

核心意图:解释虚拟环境的价值
虚拟环境的本质是为每个项目打造“独立的依赖空间”,解决以下问题:

六、GUI⾃动化简单⽰例

⽰例:打开电脑⾃带记事本,输⼊内容,并保存⽂件。
在这里插入图片描述
在这里插入图片描述
第一种安装方法
在这里插入图片描述

第二种安装指令安装
在这里插入图片描述

在这里插入图片描述
代码:

import time
from pywinauto.application import Application
# 启动应用程序
app = Application(backend="uia").start("notepad.exe") # 这里直接赋值给app
time.sleep(3) # 等待记事本启动
# 连接到已启动的记事本
app.connect(title_re=".*Notepad")
# 获取窗口
notepad = app.window(title_re=".*Notepad")
# 输入文本
notepad.Document.type_keys("Hello, Pywinauto!")
# 等待1秒看效果
time.sleep(1)
# 关闭应用程序
notepad.close()

效果:自动写文本文件测试,自动关闭
在这里插入图片描述


总结

请添加图片描述

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

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

相关文章

怎么建一个卖东西的网站网站怎样关键词排名优化

在日常编码环节,很大比例的错误处理工作和参数的输入有关。当程序里的某些数据直接来自用户输入时,必须先校验这些输入值,再进行之后的处理,否则就会出现难以预料的错误。 需求: 写一个命令行小程序,它要求…

喵喵大王の新日记

2025 9.25 突然心血来潮了,于是开了新日记,但是实际上我也不一定更的多么频繁,毕竟上了大学还是有点忙的。才不是一直打三角洲懒得更新 这里应当有一篇新文章。啥时候写完想起来放上。本文来自博客园,作者:北烛青…

【JavaEE】MyBatis - Plus - 教程

【JavaEE】MyBatis - Plus - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

多GPU本地布署Wan2.2-T2V-A14B文本转视频模型 - yi

多GPU本地布署Wan2.2-T2V-A14B文本转视频模型一,#本机环境检查 执行nvidia-smi,查看右上角。验证显卡驱动已安装最高支持的版本。nvidia-smi#在调试时,为了实时观察GPU利用率,一般新开一个命令窗口,执行以下命令,…

NOI 模拟赛五

DPA. 纪念场切题。 记 \(f[i, j, x, 0/1, 0/1]\) 表示前 \(i\) 个车站都已经经过,\(i\rightarrow i+1\) 的边走过 \(j\) 次,总距离 \(\bmod m=x\) ,是否钦定起点,是否钦定终点(这 \(j\) 条边经过是有顺序)。 为了…

常州装修网站建设公司企业的建站方式

运行软件前提前安装好OPC运行组件: 为方便演示,提前准备好了一个DAServer服务器: 接下来开始配置: 该软件主要实现的功能如下: 配置过程也相对简单: 第一步: 编辑如下文件: 第二步…

企业微信手机片网站制作上海建筑工程招投标网

这是什么?这是有关警告,错误和注意事项的许多答案,这些警告,错误和注意事项在您对PHP进行编程时可能会遇到,并且不知道如何解决它们。这也是一个社区Wiki,因此邀请所有人参与添加并维护此列表。为什么是这样…

免费咨询律师24小时电话桂平seo快速优化软件

数学建模常用的算法分类 全国大学生数学建模竞赛中,常见的算法模型有以下30种: 最小二乘法数值分析方法图论算法线性规划整数规划动态规划贪心算法分支定界法蒙特卡洛方法随机游走算法遗传算法粒子群算法神经网络算法人工智能算法模糊数学时间序列分析马…

中小型网站建设与管理总结wordpress手机怎么用

性能对比:Memcached 与 Redis 的关键差异 在选择合适的缓存系统时,Memcached 和 Redis 是最常被提及的两种技术。它们都是内存存储系统,用于提高数据访问速度和应用性能。尽管它们在功能上有很多相似之处,但在性能、特性和应用场…

AI热点周报(09.14~09.20):Gemini集成到Chrome、Claude 强化记忆、Qwen3-Next快捷落地,AI走向集成化,工程化?

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

什么是Delphi4Python?

什么是Delphi4Python? Delphi for Python的主要重点是为Python开发者提供免费的Python模块或Delphi的GUI框架的绑定。基于Delphi的两个不同的框架两个不同的库。DelphiVCL,用于 Windows 的本地库;DelphiFMX,用于跨…

实用指南:Python的大杀器:Jupyter Notebook处理.ipynb文件

实用指南:Python的大杀器:Jupyter Notebook处理.ipynb文件pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

flask认证机制logging模块实战

flask认证机制logging模块实战 ​ 如何在项目中实现日志的记录呢?在 Flask 中我们可以使用 Python 的内置 logging 模块来实现记录日志。你可以对照表格看看具体的日志级别分类,从上往下级别依次升高,最高的是 CRIT…

1核1g服务器做网站网站建设模块有哪些

大家好,这里是深海网络,今天给大家讲解一下新版影视小程序搭建。  首先给大家看一下新版影视小程序是什么样子的,它有黑夜和白天两种观影模式,而且搜索精准,播放速度快。01第一步,开始正式搭建。新版区小…

25.9.25随笔联考总结

考试 开考后忘记通读题面了,主要是看到 T1 太简单直接写了,写完才去读的题。然后决定的开题顺序是 324,结果后面 4 个小时一道都不会,破防了。T2 我觉得直接 manacher 是很诡异的,然后就去思考套一个 ds 啥的,不…

软工9.25

今天学的内容,没有,学习什么。

2025/9/25 模拟赛总结

招笑。 A. prime显然 \(v(i)u(i)\) 是若干个升序的连续段,而连续的数量为 \(u(i)-v(i)\)。于是不难想到小学奥数裂项相消,即 \(\frac{y-x}{xy}=\frac{1}{x}-\frac{1}{y}\),然后连续的 \(-+-+\) 抵消掉,只剩下首尾两…

电商网站开发流程list兰州网页设计

Kubernetes 项目作为容器编排领域的事实标准, 成功推动了诸如阿里云 Kubernetes (ACK)等云原生服务的迅速增长。但同时我们也关注到,Kubernetes 的核心 API 资源比如 Service、Deployment 等,实际上只是应用中的不同组…

完整教程:C 语言宏函数进阶:逗号表达式与 GNU 拓展的妙用

完整教程:C 语言宏函数进阶:逗号表达式与 GNU 拓展的妙用2025-09-25 20:58 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importan…

代码随想录算法训练营第九天 |151.翻转字符串里的单词、 LCR 182. 动态口令、28. 实现 strStr()、459.重复的子字符串

151.翻转字符串里的单词 思路:前去头空格,再去尾空格,然后依次取出所有的单词,然后用一个字符串接受,然后从放入的数组,倒置输出。难在去空格细节,我是内置for来进行去空格的func reverseWords(s string) strin…