windows 应用 UI 自动化实战

server/2024/11/29 14:55:48/

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.ppmy.cn/server/145933.html

相关文章

Spring Bean初始化流程

首先: 加载Bean定义(Configuration) 然后对于每个Bean: 1、实例化Bean(应该是从Bean方法中获取,Bean方法里面包含new这个类型的代码)2、依赖注入(所依赖的Bean要经历相同的流程)、调用Setter…

Docker化部署Flask:轻量级Web应用的快速部署方案

Flask是一个用Python编写的轻量级Web应用框架,以其简洁性和灵活性而受到开发者的喜爱。Docker作为一种流行的容器化技术,为应用的部署和管理提供了极大的便利。本文将探讨Flask的优点、Docker部署的好处,并详细介绍如何将Flask应用Docker化部…

嵌入式开发之IO多路复用(一)

目录 1、IO模型和多路复用模型 1.1、阻塞I/O模式 1.1.1、读阻塞 1.1.2、写阻塞 1.2、非阻塞模式I/O 1.3、信号驱动I/O 1.4、多路复用I/O 1.4.1、IO多路复用步骤: 1.4.2、伪代码示例讲解 1、IO模型和多路复用模型 在UNIX、Linux下主要有4种I/O模型: 阻塞I/O: 最常用…

HBase运维需要掌握的技能(1)

作为 HBase 运维人员,我们需要掌握一定的 HBase 和 Hadoop 生态系统相关的知识,特别是与系统安装、配置、性能调优、故障排除等相关的技能。以下是 HBase 运维人员需要掌握的核心知识点: HBase 是一个分布式的、面向列的 NoSQL 数据库&#…

新用户引导库-driverjs

一个比好用的新用户引导的库 driverjs 在做这个功能时,首先要确定目标是什么样子的, 如果只是随意点击下一步下一步,那我感觉可能用图片轮播图的方式会快一点,更容易解决且方便,想要什么步骤 只需要更改图片就好&…

同时在github和gitee配置密钥

同时在github和gitee配置密钥 1. 生成不同的 SSH 密钥 为每个平台生成单独的 SSH 密钥。 # 为 GitHub 生成密钥(默认文件路径为 ~/.ssh/github_id_rsa) ssh-keygen -t rsa -b 4096 -C "your_github_emailexample.com" -f ~/.ssh/github_id_…

HarmonyOS开发:DevEco Studio的Beta3(5.0.5.200)新增和增强特性

新增特性 DevEco Studio支持开发API 13工程。DevEco Profiler Frame模板新增Lost Frames和Hitch Time泳道,用于识别和优化卡顿和丢帧现象。具体请参考Frame分析。hvigor-config.json5中properties下新增ohos.arkCompile.noEmitJs字段,用于指定ArkTS编译…

论文阅读 - Causality Inspired Representation Learning for Domain Generalization

目录 摘要 1. Introduction 2. Related Work 3. Method 3.1. DG from the Causal View 3.2.因果关系启发的表示学习 3.2.2 Causal Factorization Module 3.2.3 Adversarial Mask Module 4. Experiment 4.1. Datasets 4.2. Implementation Details 4.3. Experimenta…