当前位置: 首页 > article >正文

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


http://www.kler.cn/a/413365.html

相关文章:

  • git分支管理:release分支内容重置为master
  • Hive的基础函数
  • 【数据结构与算法】排序算法总结:冒泡 / 快排 / 直接插入 / 希尔 / 简单选择 / 堆排序 / 归并排序
  • 《免费的学习网站推荐3》
  • 计算机网络 实验七 NAT配置实验
  • 自由学习记录(25)
  • 高级SQL技巧:解锁数据处理与分析的深层能力
  • python除了熟悉的pandas,openpyxl库也很方便的支持编辑Excel表
  • flink学习(5)——预定义source
  • linux安全管理-账号口令
  • 前端八股(自学笔记)分享—页面布局(四)
  • 讨论JAVA、JVM与Spring
  • nextjs+nestjs+prisma写todolist全栈项目
  • LeetCode—53. 最大子数组和(中等)
  • 【C/C++】数据库链接入门教程:从零开始的详细指南!MySQL集成与操作
  • 将自定义 AWS S3 快照存储库连接到 Elastic Cloud
  • zotero安卓测试版下载和使用
  • docker run创建容器如何执行多条命令
  • OpenCV图像基础处理:通道分离与灰度转换
  • 《Vue 初印象:快速上手 Vue 基础语法》
  • CSS笔记(三)卡片选择
  • 简易记事本前端开发(初步)
  • 分布式系统RPC原理面试题及参考答案
  • 解决stuid项目类爆炸问题
  • 矩阵/矩阵乘法/特征值/特征向量的讲解
  • Docker 启动和停止的精准掌舵:操控指南