【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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码编辑器横评:为什么 VS Code 能拔得头筹

2015 年 4 月 29 日的 Build 大会上,微软发布了 Visual Studio Code 第一个预览版本。短短四年时间里,VS Code 高速成长。根据 2019 年 2 月的 PYPL Top IDE index 的排名,VS Code 的涨势迅猛,在所有编辑器与 IDE 中排名第六&…

设计模式——结构型模型

一:目录 1. 装饰者模式(Decorator) 2. 代理模式(Proxy) 3. 组合模式(Composite) 4. 桥接模式(Bridge) 5. 适配器模式(Adapter) 6. 蝇量模式&#…

利用Helm简化Kubernetes应用部署(1)

目录利用Helm简化Kubernetes应用部署 Helm基础 安装Helm 使用Visual Studio 2019为Helm编写一个简单的应用 利用Helm简化Kubernetes应用部署Helm是Kubernetes生态系统中的一个软件包管理工具,有点类似于Linux操作系统里面的“apt-get”和“yum”。结合上一节内容&am…

设计模式——行为型模式

一:目录 1. 策略模式(Strategy) 2.状态模式(State) 3.责任链模式(Chain Of Responsibility) 4.解释器模式(Interpreter) 5.命令模式(Command) 6.观…

网络编程——常用协议解析

** 1、网络基础知识 ** 1.1> 什么是OSI模型 OSI 模型(Open System Interconnection model)是一个由国际标准化组织?提出的概念模型,试图?供一个使各种不同的计算机和网络在世界范围内实现互联的标准框架。 它将计算机网络体系结构划分为七层,每层都可以提供抽象良好的…

在 ABP vNext 中编写仓储单元测试的问题一则

一、问题新项目是基于 ABP vNext 框架进行开发的,所以我要求为每层编写单元测试。在同事为某个仓储编写单元测试的时候,发现了一个奇怪的问题。他的对某个聚合根的 A 字段进行了更新,随后对某个导航属性 B 也进行了变更,最后通过仓…

TCP协议——三次握手与四次关闭

1. TCP协议基础 网络编程基础见,传送门 TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。 在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。 三次握手…

TCP协议——流量控制和拥塞控制

** 一、流量控制 ** 1.1 什么是流量控制 Sender won’t overflow receiver’s buffer by transmitting too much, too fast. (防止发送方发的太快,耗尽接收方的资源,从而使接收方来不及处理) 1.2 流量控制的一些知识点 &#x…

征集.NET中国峰会议题

月初做的调查《》,参与人数576人,愿意参与分享.NET Core经验的142人,今天发起分会场主题演讲和闪电演讲议题.2014年微软组织成立.NET基金会,微软在成为主要的开源参与者的道路上又前进了一步。2014年以来已经有众多知名公司加入.N…

TCP协议——粘包与拆包

TCP的基础 TCP协议基础,传送门 TCP协议流量控制,传送门 1.1 什么是TCP粘包/拆包 TCP是个“流”协议,所谓流,就是没有界限的一串数据。大家可以想想河里的流水,是连成一片的,其间并没有分界线。TCP底层并…

你的通勤时间都去哪了?

大家好,我是Z哥。今天我来唠叨一下。最近无意间看到一份报告,关于我们职场人士上下班通勤时间的。有时候想想也挺无奈的,我们越想去发达一些的城市打拼,反而越被通勤这种琐碎的事情给耽误更多的奋斗时间。但是没办法,在…

规模化敏捷必须SAFe

引子:规模化敏捷转型从来不是一件容易的事情。当只有1-2个敏捷团队进行协同的时候,计划和工作同步是可控的。团队和产品负责人互相聊一聊,基本就能搞清楚需要做什么,一个简单的SOS架构(Scrum of Scrums)就能…

http1.0 http1.1 http2 之间的区别

一、HTTP基础 1.1 HTTP定义 HTTP协议(HyperTextTransferProtocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。 1.2 HTTP发展史 1.3 HTTP1.0 早先1.0的HTTP版本,是一种无状态、无连接的应用层协议。 …

漫画:程序员一时单身一时爽,一直单身...有点惨

1妹子没吃早饭早啊敲哥,你在吃早饭啊嗯啊,你吃了吗?没呢,早上实在是太赶了,没来得及嗯...那我还是换个地方吃吧免得馋着你。。。2代码重要还是女朋友重要女朋友能哄好,代码能哄好吗?写代码是赚钱…

AutoMapper多个对象映射到一个Dto对象

一、定义源映射对象为了体现AutoMapper映射特性,在SocialAttribute中的Name属性没有定义在People中,People的Ear属性也不存在与SocialAttribute和PhysicalAttribute中。代码如下:二、注入AutoMapper例子中使用的IOC容器是Autofac,…

cookie 与 session

1 背景介绍 什么是会话? 用户打开一个浏览器, 点击多个超链接, 访问服务器多个web资源, 然后关闭浏览器, 整个过程称之为一个会话。我们知道,HTTP协议是一种"无状态"协议,客户浏览器与服务器建立连接,发出请求&#x…

Java写一个简单的静态文件的HTTP服务器(基于Socket)

** 一、实现思路 ** 1、使用 ServerSocket 监听某一端口,然后等待连接获取 Socket对象。 2、创建一个类 HttpServer 继承 java.lang.Thread 类,重写 run()方法,执行浏览器请求。 3、获得浏览器请求,解析资源文件路径。 4、读…

asp.net core 使用HttpClientFactory Polly实现熔断降级

前言在NET Core2.1后也是增加更新了很多东西,当然HttpClientFactory更新中的一部分.虽然说HttpClient这个实现了disposable,但使用它的时候用using包装块的方式通常不是最好的选择。处理HttpClient,底层socket套接字不会立即释放。该HttpClient类是未多个请求重复使用而创建的。…

Azure Application Insights REST API使用教程

本文是Azure Application Insights REST API的简单介绍,并会包含一个通过Python消费API的示例/小工具。新加入的team中的一项工作是制作日常的运维报表,制作方式是手工前往portal.azure.com,在网页中多次执行不同的查询语句、导出excel&#…

用Java Socket实现SMTP邮件发送

目录: 1、邮件基础概念2、Java Mail API介绍3、收发邮件代码示例 PS:如果你想直接拿代码用,可以直接跳到第3部分。 ** 一、邮件基础概念 ** 1.1 邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件…