windows 应用 UI 自动化实战

news2024/12/27 1:23:36

UI 自动化技术架构选型

UI 自动化是软件测试过程中的重要一环,网络上也有很多 UI 自动化相关的知识或资料,具体到 windows 端的 UI 自动化,我们需要从以下几个方面考虑:

开发语言

毋庸置疑,在 UI 自动化测试领域,python 是最被广泛使用的编程语言,拥有的三方类库、自动化相关材料也是非常多,因此是我们开发 UI 自动化的首选编程语言。

选择使用 py 开发自动化脚本,需要提前在电脑中配好对应的 py 环境,最好再配置好开发工具 PyCharm,并配置 pip 安装三方库的国内镜像源,方便后续开发,本文不再详细阐述,读者可自行查阅相关材料进行配置

应用驱动框架

相比移动端或 Web 端的 UI 自动化,windows 应用的 UI 自动化方面的资料相对较少。被广泛使用的 windows 应用 UI 驱动有:Aotolt、WinAppDriver、PyAutoGUI、PyWinAuto、Airtest(底层基于PyWinAuto)、CodedUI、UIAutomation、TestWriter、QTP 等,详细的框架介绍见:windows桌面应用程序UI自动化工具_windows自动化工具-CSDN博客

PyWinAuto 作为一款使用简单,执行效率高、API 方法完善的 UI 驱动,满足我们的项目需要,本文使用该框架作为应用的驱动,PyWinAuto 的使用教程可见:windows UI 自动化测试框架 pywinauto 使用教程_pywinauto官方文档-CSDN博客

用例管理框架

UI 自动化的目标在于:开发自动化脚本替代人工,执行测试用例,生成测试报告

应用驱动框架选定后,可以确保开发自动化脚本后,应用可以非人工的运行起来。但如何控制测试用例的执行,驱动框架没有办法做到。对于 python 开发的 UI 自动化项目,pytest 是用例管理的首选框架,pytest 是一种单元测试框架,可以对测试方法提供强大的逻辑控制及丰富的三方插件,从而被广泛使用,pytest 使用教程可见:【汇总】pytest简易教程 - 全栈测试笔记 - 博客园

测试报告

选定 pytest 作为用例管理框架后,测试报告可以使用三方插件 allure,生成信息详细、页面美观的测试报告

整体设计思路

首先我们需要整理需要开发成 UI 自动化的测试用例,建议冒烟用例,不建议全量用例均使用 UI 自动化替代,一方面 UI 自动化本身的局限(只能识别页面元素进行逻辑校验)可能无法满足,另一方便 UI 自动化开发成本较高,收益相对较低。

整理完毕的测试用例,可以使用 excel 进行存储,对于每条用例需要包含:用例名称、前提条件、操作步骤、预期结果等。同时,我们可以在该测试用例文档中,新建一个 sheet,以 key、value 的形式,保存测试执行过程中需要的业务数据

对应于于 UI 自动化,我们可以使用三方库 pandas 读取这些功能用例和业务数据,接下来设计测试方法,在测试方法中调用驱动框架 pywinauto 相关 API,实现功能用例操作。应用操作完成后,获取应用页面进行预期结果断言。所有测试方法执行完成后,allure 生成测试报告

项目实战

以网易云音乐(windows 版,v3.0.5)为例,我们简单设计几条用例,来实现以上设计。

项目整体结构

项目整体设计采用 PO 模式(PageObject),将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类,并以页面为单位来写测试用例,实现页面对象和测试用例的分离,详细说明可以见UI 自动化测试框架:PO 模式+数据驱动 【详解版】_po设计模式框架-CSDN博客

data 目录:存放测试用例 excel 文件,该 excel 中通过不同的 sheet 分别存放业务数据、各模块用例,见图:

model 目录:抽象化每条测试用例的实体类,将符合相同字段的测试用例,例如每条用例都包含:用例名称、测试前提、测试步骤、预期结果、用例编号、校验文本等,我们可以对这样的一系列用例进行抽象化,使用 case_model 来保存、管理从 excel 中读取的测试用例数据

page 目录:存放不同页面,对页面中的元素、方法进行封装,对外提供一系列功能场景操作的接口,方便测试 case 直接调用

test_01_login/test_02_song 目录:存放不同模块的测试 case,通过编号进行人工排序

测试 case 是整个自动化测试的核心,以上图为例,test_xx 是具体的测试方法,一般与 excel 中的测试用例进行一一对应,这里同样可以通过编号,对测试方法进行排序。通过 pytest 提供的 fixture,我们可以非常灵活的对测试方法进行控制,包括测试方法执行前需要进行的操作,例如初始化业务数据、测试用例,测试过程中调用 page 页面封装的操作,传入业务数据。场景操作完成后,查找页面元素,使用 assert 进行断言,测试执行结束后,如果需要进行测试环境清理(例如:回到首页、退出账号等,根据实际业务处理),可在 fixture 的 yield 关键字后,调用相关代码

utils 目录:存放一些公用方法,提升代码复用性、可读性

conftest.py 文件:pytest 提供的特殊文件,如果多个模块使用的 fixture 相同,我们可以将 fixture 写在conftest.py 中,达到跨模块的效果,详细说明见:pytest简易教程(07):fixture跨模块共享(conftest.py) - 全栈测试笔记 - 博客园

项目运行

测试代码开发完成后,通过 pytest 提供的命令,可以分别按模块、按类、按方法级,来执行测试 case

例如:pytest ./ 执行全部 case

其他命令使用见:pytest简易教程(02):用例查找规则 - 全栈测试笔记 - 博客园

如果执行测试完成后生成美观的测试报告,可在项目中安装 allure 插件,生成测试报告,allure 使用可见:pytest简易教程(35):pytest常用插件 - allure报告(allure-pytest) - 全栈测试笔记 - 博客园

运行用例并收集测试结果:pytest -s -q --alluredir=./result --clean-alluredir

打开测试报告:allure serve ./result

测试报告效果:

测试项目源码

更详细的逻辑设计,参阅代码:https://github.com/liuweiqiang2016/windows_ui_test

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

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

相关文章

我不是挂王-用python实现燕双鹰小游戏

一.准备工作 1.前言提要 作为程序员在浩瀚的数字宇宙中,常常感觉现实世界是一台精密运作的虚拟机,其底层的物理逻辑如同铁律般难以撼动。然而我们拥有在虚拟世界中自由驰骋、创造无限可能的独特力量。突发奇我想用Python写出燕双鹰的小游戏,这样想想就很…

会议直击|美格智能亮相2024紫光展锐全球合作伙伴大会,融合5G+AI共拓全球市场

11月26日,2024紫光展锐全球合作伙伴大会在上海举办,作为紫光展锐年度盛会,吸引来自全球的众多合作伙伴和行业专家、学者共同参与。美格智能与紫光展锐竭诚合作多年,共同面向5G、AI和卫星通信为代表的前沿科技,聚焦技术…

3. STM32_串口

数据通信的基础概念 什么是串行/并行通信: 串行通信就是数据逐位按顺序依次传输 并行通信就是数据各位通过多条线同时传输。 什么是单工/半双工/全双工通信: 单工通信:数据只能沿一个方向传输 半双工通信:数据可以沿两个方向…

RPC与HTTP调用模式的架构差异

RPC(Remote Procedure Call,远程过程调用)和 HTTP 调用是两种常见的通信模式,它们在架构上有以下一些主要差异: 协议层面 RPC:通常使用自定义的二进制协议,对数据进行高效的序列化和反序列化&am…

Microsoft Excel如何插入多行

1.打开要编辑的excel表,在指定位置,鼠标右键点击“插入”一行 2.按住shift键,鼠标的光标箭头会变化成如下图所示 3.一直按住shift键和鼠标左键,往下拖动,直至到插入足够的行

【python】图像、音频、视频等文件数据采集

【python】图像、音频、视频等文件数据采集 先安装所需要的工具一、Tesseract-OCRTesseract-OCR环境变量设置验证是否配置成功示例语言包下载失败 二、ffmpeg验证是否安装成功示例 先安装所需要的工具 一、Tesseract-OCR Tesseract是一个 由HP实验室开发 由Google维护的开源的…

虚拟机docker记录

最近看了一个up的这个视频,感觉docker真的挺不错的,遂也想来搞一下: https://www.bilibili.com/video/BV1QC4y1A7Xi/?spm_id_from333.337.search-card.all.click&vd_sourcef5fd730321bc0e9ca497d98869046942 这里我用的是vmware安装ubu…

C++STL之vector(超详细)

CSTL之vector 1.vector基本介绍2.vector重要接口2.1.构造函数2.2.迭代器2.3.空间2.3.1.resize2.3.2.capacity 2.4.增删查找 3.迭代器失效4.迭代器分类 🌟🌟hello,各位读者大大们你们好呀🌟🌟 🚀&#x1f68…

深度学习实验十三 卷积神经网络(4)——使用预训练resnet18实现CIFAR-10分类

目录 一、数据加载 二、数据集类构建 三、模型构建 四、模型训练 五、模型评价及预测 附完整可运行代码: 实验大体步骤: 注: 在自己电脑的CPU跑代码 连接远程服务器跑代码√ 本次实验由于数据量巨大,我的笔记本上还没有…

【Maven Helper】分析依赖冲突案例

目录 Maven Helper实际案例java文件pom.xml文件运行抛出异常分析 参考资料 《咏鹅》骆宾王 鹅,鹅,鹅,曲项向天歌。 白毛浮绿水,红掌拨清波。 骆宾王是在自己7岁的时候就写下了这首杂言 Maven Helper A must have plugin for wor…

Android 桌面窗口新功能推进,聊一聊 Android 桌面化的未来

Android 桌面化支持可以说是 Android 15 里被多次提及的 new features,例如在 Android 15 QPR1 Beta 2 里就提到为 Pixel 平板引入了桌面窗口支持,桌面窗口允许用户在自由窗口同时运行多个应用,同时可以像在传统 PC 平台上一样调整这些窗口的…

【深度学习】四大图像分类网络之VGGNet

2014年,牛津大学计算机视觉组(Visual Geometry Group)和Google DeepMind公司一起研发了新的卷积神经网络,并命名为VGGNet。VGGNet是比AlexNet更深的深度卷积神经网络,该模型获得了2014年ILSVRC竞赛的第二名&#xff0c…

Pytest框架学习20--conftest.py

conftest.py作用 正常情况下,如果多个py文件之间需要共享数据,如一个变量,或者调用一个方法 需要先在一个新文件中编写函数等,然后在使用的文件中导入,然后使用 pytest中定义个conftest.py来实现数据,参…

【力扣】389.找不同

问题描述 思路解析 只有小写字母,这种设计参数小的,直接桶排序我最开始的想法是使用两个不同的数组,分别存入他们单个字符转换后的值,然后比较是否相同。也确实通过了 看了题解后,发现可以优化,首先因为t相…

HarmonyOS4+NEXT星河版入门与项目实战(23)------组件转场动画

文章目录 1、控件图解2、案例实现1、代码实现2、代码解释3、实现效果4、总结1、控件图解 这里我们用一张完整的图来汇整 组件转场动画的用法格式、属性和事件,如下所示: 2、案例实现 这里我们对上一节小鱼游戏进行改造,让小鱼在游戏开始的时候增加一个转场动画,让小鱼自…

Wireshark常用功能使用说明

此处用于记录下本人所使用 wireshark 所可能用到的小技巧。Wireshark是一款强大的数据包分析工具,此处仅介绍常用功能。 Wireshark常用功能使用说明 1.相关介绍1.1.工具栏功能介绍1.1.1.时间戳/分组列表概况等设置 1.2.Windows抓包 2.wireshark过滤器规则2.1.wiresh…

Vue3 开源UI 框架推荐 (大全)

一 、前言 💥这篇文章主要推荐了支持 Vue3 的开源 UI 框架,包括 web 端和移动端的多个框架,如 Element-Plus、Ant Design Vue 等 web 端框架,以及 Vant、NutUI 等移动端框架,并分别介绍了它们的特性和资源地址。&#…

探索Python词云库WordCloud的奥秘

文章目录 探索Python词云库WordCloud的奥秘1. 背景介绍:为何选择WordCloud?2. WordCloud库简介3. 安装WordCloud库4. 简单函数使用方法5. 应用场景示例6. 常见Bug及解决方案7. 总结 探索Python词云库WordCloud的奥秘 1. 背景介绍:为何选择Wo…

Kali Linux系统一键汉化中文版及基础使用详细教程

Kali Linux系统一键汉化中文版及基础使用详细教程 引言 Kali Linux是一款基于Debian的Linux发行版,专为渗透测试和网络安全而设计。由于其强大的功能和丰富的工具,Kali Linux在安全领域得到了广泛应用。然而,许多用户在使用Kali Linux时会遇…

网络安全(三):网路安全协议

网络安全协议设计的要求是实现协议过程中的认证性、机密性与不可否认性。网络安全协议涉及网络层、传输层与应用层。 1、网络层安全与IPSec协议、IPSec VPN 1.1、IPSec安全体系结构 IP协议本质上是不安全的额,伪造一个IP分组、篡改IP分组的内容、窥探传输中的IP分…