【DevOps进行时】C/S端界面自动化测试:微软UIAutomation实践

2023-11-06 10:18

本文主要是介绍【DevOps进行时】C/S端界面自动化测试:微软UIAutomation实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

640?wx_fmt=jpeg

在界面自动化测试领域里存在许多流行的自动化测试工具,例如目前比较受欢迎的开源自动化工具Selenium、Katalon; HP旗下知名的商业软件Unified Functional Testing(更名前叫QTP); 隶属于IBM以数据驱动测试的RTF(Rational Functional Tester)等等,这些“明星”测试工具在网上有大量学习资料,可以很容易地查找到,这里就不多介绍了。 今天想要给大家介绍一款较少被人们熟知而又比较实用的自动化测试工具——微软UIAutomation。

一、微软UIAutomation简介

640?wx_fmt=png

UIAutomation是由微软开发的界面自动化测试工具,是.NET Framework的组件之一,可进行C/S类应用的界面自动化测试。 此自动化库一开始就是为可访问性和UI测试自动化任务而专门设计的,使用UI自动化库来测试运行支持.NET Framework的操作系统,例如Windows XP、Windows Vista、Windows 7、Windows Server 2003和Windows Server 2008等操作系统主机上的Win32应用程序、.NET Windows窗体应用程序和WPF应用程序。
在UIAutomation中,所有的窗体、控件都表现为一个AutomationElement,AutomationElement中包含此控件或窗体的属性,在实现自动化的过程中,通过其相关属性进行对控件自动化操作。 所有显示在桌面上的UI,实际上是一个UIAutomation树,它有一个根节点,表示的是当前桌面。 通过根节点,可以通过窗体或控件的Process Id、Process Names或者Windows Name找到相应的子AutomationElement,例如Dialog、Button、TextBox、CheckBox等标准控件,通过控件所对应的Pattern进行相关的操作。 UIAutomation树不是一个固定的结构,它其中的一部分是在需要时构建的,并且可以在添加、移动或删除元素时进行更改。
UIAutomation的体系结构如图1所示:

640?wx_fmt=png

(图1 UIAutomation的体系结构)
在UIAutomation的体系结构中,UIAutomationProvider.dll和UIAutomationTypes.dll主要负责的是服务端,UIAutomationClient.dll和UIAutomationTypes.dll主要负责的是客户端,UIAutomationCore.dll作为UI自动化的核心部分,主要负责服务端和客户端的交互,而UIAutomationClientSideProvides.dll主要为客户端程序提供自动化支持。

二、UIAutomation实践

640?wx_fmt=png

通过调研,发现 目前支持UIAutomation的UI元素识别工具主要有两种: UISpy和Inspect。 经过实际使用对比,发现UISpy有时候无法获取部分窗体或控件元素,而Inspect可以比较全面地识别窗体和控件元素,所以 推荐使用Inspect作为识别UI元素的工具。
Inspect工具大小不到1Mb,无需安装,可以在网上很容易搜到。 下载完毕之后,启动Inspect工具,具体的界面如下图2所示。

640?wx_fmt=png

(图2 Inspect主界面)
Inspect工具启动后,界面呈现主要有两部分,其中左面的树状图显示了各个控件或窗体的父子关系,可以看到其根节点显示为“桌面窗格”;将鼠标直接移动到树状图中的每个元素上,即可以在右面的框架中看到相应元素的属性,比如有Name(元素内容的名称)、AutomationId(唯一 的标识元素、将其与同级区分)、ControlType(控件的类型)等等。
Inspect工具的顶部是功能栏区域,界面显示如图3所示。

640?wx_fmt=png

(图3 Inspect功能栏)
其中 640?wx_fmt=png 的功能是定位到当前元素; 640?wx_fmt=png 的功能是复制当前元素的所有属性; 640?wx_fmt=png 的功能是显示/隐藏数结构; 640?wx_fmt=png 这些按钮从左到右的作用依次是: 找到父节点、找到第一个子节点、前一个兄弟节点、下一个兄弟节点、最后一个子节点,我们可以根据这些按钮来寻找相对应位置的元素。
在实际的测试过程中,我们可以直接将光标移动到要定位的元素,Inspect右侧窗口就可以直接显示对应元素的所有属性,具体情况如图4所示。

640?wx_fmt=png

(图4 测试过程中元素属性获取)
在显示的所有属性中,我们主要用到ClassName、AutomationId/Name、Ancestors(父级信息)属性,有时会根据不同系统的需求,还需要获取ControlType属性。 当获取到的ClassName中含有数字时,可以用ControlType属性替换ClassName属性。 我们把全部元素的主要属性存储在execl文件中,这样就完成了对象元素自动化定位信息的积累。
完成对象定位之后,就可以通过C#等语言编写自动化测试脚本,驱动界面对象完成界面自动化测试,如下图5所示:

640?wx_fmt=png

( 图5 编写自动化测试脚本)
通过上述方式编写自动化测试脚本,比较灵活。 对于经验丰富的编程人员来说,入门比较快。 但是它无法规避界面自动化测试领域普遍存在的入门门槛高、资产积累代价高、环境切换易失效、人员切换易失效、对象变更修复代价高、测试逻辑变更修复代价高等行业痛点问题。
针对这些痛点问题,中国农业银行研发中心定义了一套基于自然语言的、简单易懂的、满足行业最高标准的自动化测试描述语言——“商语言” ,使得普通业务背景的测试人员可以快速写出高可维护的自动化测试案例,自动转化为QTP/UIAutomation/Selenium脚本执行。具体技术方案,后续另行撰文介绍。

【作者简介】王唤宇

中国农业银行研发中心系统支持部 测试工程师 主要从事自动化测试以及自动化测试技术研究的相关工作。积极乐观,勤奋好学,生命不息,奋斗不止。

640?wx_fmt=png

640?wx_fmt=gif

这篇关于【DevOps进行时】C/S端界面自动化测试:微软UIAutomation实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/356012

相关文章

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源