windows 应用 UI 自动化实战

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【R语言管理】Pycharm配置R语言及使用Anaconda管理R语言虚拟环境

目录 使用Anaconda创建R语言虚拟环境1. 安装Anaconda2. 创建R语言虚拟环境 Pycharm配置R语言1. 安装Pycharm2. R Language for IntelliJ插件 参考 使用Anaconda创建R语言虚拟环境 1. 安装Anaconda Anaconda的安装可参见另一博客-【Python环境管理工具】Anaconda安装及使用教程…

C语言进程编程

getpid函数&#xff1a; 原型&#xff1a;pid_t getpid(void) 特性&#xff1a;返回值是PID值 用途&#xff1a;获取当前进程PID 用法例 #include<stdio.h> #include <sys/types.h> #include<unistd.h> int main() {pid_t pid;pid getpid();printf(&qu…

SpringMVC |(一)SpringMVC概述

文章目录 &#x1f4da;SpringMVC概述&#x1f407;三层架构&#x1f407;异步调用 &#x1f4da;SpringMVC入门案例&#x1f407;入门案例&#x1f407;注意事项 &#x1f4da;小结 学习来源&#xff1a;黑马程序员SSM框架教程_SpringSpringMVCMaven高级SpringBootMyBatisPlus…

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

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

Vue+Vite 组件开发的环境准备(零基础搭建)

一、什么是Vite Vue3作为一款现代化的JavaScript框架&#xff0c;配合Vite这样的构建工具&#xff0c;极大地简化了流程&#xff0c;提升了效率。Vite 是一个基于现代浏览器原生的 ES 模块系统&#xff0c;能够以原生模块导入的方式运行源代码的开发服务器。它被设计用来替代传…

linux高级系统编程之进程

进程 一个正在进行的程序 并行与并发 并行:执行的程序在不同CPU上同时执行 并发:一个CPU,多个进程交替执行,因为交替速度很快,所以从宏观上来看是同时执行的,但是从围观的角度是交替执行的 单道与多道 单道程序设计:所有进程一个一个排队执行,若A阻塞,B只能等待,,即使CPU处于空…

git 命令之只提交文件的部分更改

git 命令之只提交文件的部分更改 有时&#xff0c;我们在一个文件中进行了多个更改&#xff0c;但只想提交其中的一部分更改。这时可以使用 使用 git add -p 命令 Git add -p命令允许我们选择并添加文件中的特定更改。它将会显示一个交互式界面&#xff0c;显示出文件中的每个更…

Excel中根据某列内容拆分为工作簿

简介&#xff1a;根据A列的内容进行筛选&#xff0c;将筛选出来的数据生成一个新的工作簿(可以放到指定文件夹下)&#xff0c;且工作簿名为筛选内容。 举例&#xff1a; 将上面的内容使用VBA会在当前test1下生成5个工作簿&#xff0c;工作簿名分别为TEST1.xls TEST2.xls TEST3…

数据结构 (10)队列

前言 队列是一种特殊的数据结构&#xff0c;它遵循先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的原则。 一、定义与基本概念 定义&#xff1a;队列是一种只允许在一端&#xff08;队尾&#xff09;进行插入操作&#xff0c;而在另一端&#xff08;队头…

Tomcat10部署Servlet加载错误问题解决

Servlet加载错误&#xff1a;HelloServlet不是Servlet 环境信息&#xff1a;IDEA中的maven项目&#xff0c;tomcat10.1.33 问题信息&#xff1a;XXX.Servlet不是Servlet 问题原因&#xff1a;tomcat10将JavaEE也换成了Jakarta EE&#xff1b; Jakarta EE较以前的JavaEE有一个重…

2024年第十三届”认证杯“数学中国数学建模国际赛(小美赛)

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

百度智能云发布首个空间智能解决方案,百度AI优势如何分析?

首先&#xff0c;百度智能云此次推出的空间智能解决方案&#xff0c;在技术底座上展现了其强大的AI异构计算能力。百度百舸AI异构计算平台作为该方案的底层支撑&#xff0c;为2D和3D应用中的人物、物件及场景生成提供了强大的算力支持。这一平台的推出&#xff0c;不仅提升了空…

RTSP摄像头、播放器为什么需要支持H.265?

H.264还是H.265&#xff1f; 好多开发者在做选RTSP播放器的时候&#xff0c;经常问我们的问题是&#xff0c;用H.264好还是H.265好&#xff1f;本文我们就H.264 和 H.265的主要区别和适用场景&#xff0c;做个大概的交流。 一、压缩效率 H.265 更高的压缩比 H.265 在相同视频…

BGP协议路由黑洞

一、实验环境 1、分公司与运营商AS自治系统内运行IGP路由协议OSPF、RIP或静态路由&#xff0c;AS自治系统内通过IBGP路由协议建立BGP邻居关系。 2、公司AS自治系统与运营商AS自治系统间运行EBGP路由协议。 3、通过loopback建立IBGP与EBGP邻居关系&#xff0c;发挥loopback建立…

解决数据传送问题:内网http传输

在服务器上启http服务 在服务器上输入命令&#xff1a; python3 -m http.server 1234 回车启动 访问和下载方法&#xff1a; 然后可以在本地的浏览器上访问&#xff1a;服务器IP:1234 例如192.11.1.1:1234&#xff0c;然后就可以下载对应文件夹下的东西了 在本地上启htt…

飞塔防火墙只允许国内IP访问

飞塔防火墙只允许国内IP访问 方法1 新增地址对象&#xff0c;注意里面已经细分为中国内地、中国香港、中国澳门和中国台湾 方法2 手动新增国内IP的对象组&#xff0c;目前好像一共有8632个&#xff0c;每个对象最多支持600个IP段

《Learn Three.js》学习(3)光源

前言&#xff1a; WebGL本身不支持光源&#xff0c;不使用three.js,则需使用着色程序来模拟光源。 学习大纲&#xff1a; Three.js中的光源 特定光源的使用时机 如何调整和配置所有光源的行为 如何创建镜头光晕 光源表 基础光源&#xff1a;THRER.AmbientLight、THERE.Point…

Linux——基础命令(2) 文件内容操作

目录 ​编辑 文件内容操作 1.Vim &#xff08;1&#xff09;移动光标 &#xff08;2&#xff09;复制 &#xff08;3&#xff09;剪切 &#xff08;4&#xff09;删除 &#xff08;5&#xff09;粘贴 &#xff08;6&#xff09;替换,撤销,查找 &#xff08;7&#xff…

鸿蒙开发App 如何通过抓包查看 http 网络请求?

通过借助第三方工具 Charles https://www.charlesproxy.com/ https://www.zzzmode.com/mytools/charles/https://www.zzzmode.com/mytools/charles/ Charles 激活码计算器 相关博客日志&#xff1a;https://zhuanlan.zhihu.com/p/281126584 MAC上的使用方法&#xff1a; ch…

【Git】Git 完全指南:从入门到精通

Git 完全指南&#xff1a;从入门到精通 Git 是现代软件开发中最重要的版本控制工具之一&#xff0c;它帮助开发者高效地管理项目&#xff0c;支持分布式协作和版本控制。无论是个人项目还是团队开发&#xff0c;Git 都能提供强大的功能来跟踪、管理代码变更&#xff0c;并保障…