【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

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

如何使用Ansible实现CI/CD流水线的自动化

如何使用Ansible实现CI/CD流水线的自动化 持续集成(CI)和持续交付(CD)是现代软件开发过程中的核心实践,它们帮助团队更快地交付高质量的软件。Ansible,作为一个强大的自动化工具,可以在CI/CD流水线中发挥关键作用。本文将详细介绍如何使用Ansible实现CI/CD流水线的自动化,包括设计流水线的结构、配置管理、自动化测试、部署、以及集成Ansible与CI/CD工具(如Jen

遮罩,在指定元素上进行遮罩

废话不多说,直接上代码: ps:依赖 jquer.js 1.首先,定义一个 Overlay.js  代码如下: /*遮罩 Overlay js 对象*/function Overlay(options){//{targetId:'',viewHtml:'',viewWidth:'',viewHeight:''}try{this.state=false;//遮罩状态 true 激活,f