Coded UI 自动化测试初步研究

提到Windows的UI自动化,不得不能不说Coded UI测试。Coded UI测试是微软在VS2010里面推出的一个新功能,概念其实也不是很新,就是通过录制回放的功能来尽可能的简化Windows的UI自动化。

  个人的理解,Coded UI的底层仍然是基于Windows TestAutomation SDK的Code,它的最大的作用就是把Code封装了一层,使之能为可以调用的方法,大大简化了测试人员对于编码的硬需求,不懂C#或者VB的测试人员可以很容易的利用Coded UI开展自动化。

  Coded UI不仅可以测试Windows的应用程序(据说对WPF支持的特别好),它也可以对Web浏览器开展测试,VS2010支持微软的IE和Firefox,我用的是VS2013,还没有来得及用这个东西测网站,我一般都用Robotframework + Selenium2library进行测试。

  笔者最近在做一个和SCCM相关的项目,希望通过Coded UI能实施一些UI自动化的工作,尝试了一下,感受如下

  怎么用Coded UI

  1. 先分析Windows应用程序是啥技术

  这个估计测试人员用肉眼看不出来,可以请教开发,或者用一些工具帮忙看。Coded UI据说对WPF支持的比价好,对MFC支持的一般。

  知道了这点,心里面可以有个数,对后面测试中可能的风险有个心理准备

  2. 录制

  打开VS,建立一个Test Project,然后选Coded UI,VS2013的步骤大概就是这样,VS2010会复杂一点, anyway,然后差不多就可以开始录制了

  录制的窗口很小,点击红色的按钮就可以开始录制了,录制没什么特别的,Coded UI会记录你的鼠标和键盘的操作,并把他们变成一些可以用术语表现得事件。

  备注:录制的时候可以加入Assertion,这是为了判断测试结果的需要,否则录下来的就是一步一步的UI操作,特别注意。加入Assertion需要对Windows的控件属性有一点了解。

  3. 调整录制结果

  录制完了要点停止,之后点击中间的阶梯的按钮,就会出现录制的动作,这些动作都用很容易理解的步骤呈现在面板上。之后点击最右边的按钮就可以生成代码了。

  需要给生成的代码取个名字,做为一个动作次序的标志

  4. 调整UI操作次序以及其他属性

  双击右侧Panel的UIMap.uitest,就可以打开UI操作的面板

 里面包括了以前录制过的每一个动作次序,点开之后可以看到具体的动作,左边是录制的次序,右边是控件的定位方法,定位的方法和一般的Windows Ui自动化定位元素相比,其实变化不大,从窗口开始,一层一层的找Windows的控件,直到能够精确的定位。

  用右键点击一个动作次序,可以发现也就几个选项,注意,不能在这里把一个动作次序里面的动作移到别的动作次序里面去,除非你改后台的代码。(改后台的代码不是微软推荐的最佳实践)

  调整的另外一个目的是优化对控件的查找,右键点击控件的树形结构,你可以很容易的使用“Locate the UI Control"对控件进行定位,也就是看看Coded UI目前还能不能找到这个控件。

  如果找不到,大概有两个原因

  a. 原来的Windows应用窗口已经关闭了,需要重现打开

  b. 控件的属性发生的变化,需要再定义。

  如果真的属于控件属性变化,需要通过UIVerifier或者UI Spy重新查找该控件的属性,这不属于本文讨论的范围

  修改控件定位的方法是这样,先选一个控件,然后点"Search Properties"之后会出现对于控件的定义,然后修改这些定义就可以了。

  5. 组合测试用例

  录也录了,改也改了,剩下来的工作就是把他们组合成测试用例,组合的方法就要动代码了,这个我就不多说了,通过排列

  ”this.UIMap.次序的名字“,来把测试用例进行再组合


 6. 执行测试用例

  执行的方法有点绕人,一般用VS习惯的人会直接点Run按钮,然后你就等着报错吧,呵呵

  正确的方法,找到你在第5步里面的修改的那个代码,点击右键

  你可以选择Run test或者是Debug test来执行或者是调试测试用例,当然你可以可以通过其他的办法,这里VS2010和VS2013的方法不太一样,就不仔细说了。

  7. 追加录制

  任何人不可能第一次就把事情做完美,更何况是录制测试用例,如果你发现少录了一些步骤怎么办?答案就是追加录制

  追加录制的方法如下,

  1. 找到你在第5步里面的修改的那个代码

  2. 找到你要追加的地方,找到某一个动作的代码那里,点鼠标右键

  按照上图的方法来选,就可以打开录制的UI,继续录制啦

  8. 一些注意事项

  1. 对于每个点击事件里面鼠标坐标的理解

  如上图,里面有一个坐标295,11,有人肯定会问,在这种情况下,如果我得屏幕分辨率改了,或者程序没有最大化,那岂不就定位不到了?

  对这个的理解是这个坐标其实是对于一个控件里面的坐标,只要这个控件大小不变,坐标还是可以定位的。

  2. 不是每个控件都能识别

  就拿微软的SCCM来说,Coded UI对于里面的一些控件也不能做的很好的识别,有些是自定义的控件,有些控件识别的很不稳定,这里我就不举例子了。

  遇到这种控件怎么办,我推荐的方法就是用能稳定识别的控件的相对坐标来定义这些不能识别的控件。

  例如,如果一个按钮A不能稳定的被点击,而在它附近的一个按钮B每次都能点击,那么我们可以先取B的坐标,然后加入B和A之间的相对距离,就可以定位到A了,提供一个自己写的函数给大家参考


public void offsetclick(UITestControl control, string button, int left, int top, int time)

{

int x = control.Left;

int y = control.Top;

x = x + left;

y = y + top;

if(button == "right")

{

Mouse.Click(MouseButtons.Right, ModifierKeys.None, new Point(x, y));

}

else

{

Mouse.Click(MouseButtons.Left, ModifierKeys.None, new Point(x, y));

}

Playback.Wait(time);

}

  OK,就写这么多,其实还有很多可以写的,比如微软推荐的调试步骤的实践,使用数据源等等,希望本文对大家能有所帮助。

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-08-04 02:02:52

Coded UI 自动化测试初步研究的相关文章

使用Coded UI进行UI的自动化测试

介绍 曾经有一段时间,人们习惯于在MS Excel里面编写单元测试用例,然后开发人员就按照单元测试用例一步一步的来实现用例.这通常是很耗时的漫长的过程,尤其是如果应用很大或者UI很复杂的话. 这一套单元测试的执行过程常常成为瓶颈,因为任何代码修改都会带来手工执行大量单元测试,以确保新的修改没有破坏原有功能. 如今是个快节奏时代,人们希望工作能够无需人工介入.自动化的快速完成.每个人都喜欢执行一个命令就能把工作搞定,而且在执行期间不需要人工介入.需要做的仅仅是检查一下最终的输出结果. 当这个世界正

outofmemoryexception-VS2013 coded ui test 编码的UI测试 导致程序内存溢出

问题描述 VS2013 coded ui test 编码的UI测试 导致程序内存溢出 我在使用VS coded ui test对一个Winform的程序做自动化测试的时候,每次都在最后抛出OutOfMemoryException的异常,不知道怎么解决. 大家能不能帮忙解决下? 有没有什么方法控制或者监测内存使用情况啊?

iOS多线程的初步研究(四、五、六)--NSTimer--NSURLConnection子线程中运行 ---- NSOperation

iOS多线程的初步研究(四)-- NSTimer 理解run loop后,才能彻底理解NSTimer的实现原理,也就是说NSTimer实际上依赖run loop实现的. 先看看NSTimer的两个常用方法: + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo; //生成

iOS多线程的初步研究(七、八、九)-- dispatch对象-- dispatch队列-- dispatch源-- dispatch同步

七.iOS多线程的初步研究()-- dispatch对象 谈起iOS的dispatch(正式称谓是Grand Central Dispatch或GCD),不得不说这又是iOS(包括MacOSX)平台的创新,优缺点这里不讨论,只有当你使用时才能真正体会到.我们说dispatch函数的主要目的是实现多任务并发代码,那么要理解dispatch函数,先来了解dispatch对象的定义.   dispatch对象类型的部分定义,主要使用C语言的宏定义: <os/object.h>文件: #define

iOS多线程的初步研究(一、二、三)-- NSThread -- 锁-- NSRunLoop

一)iOS多线程的初步研究(一)-- NSThread 对于多线程的开发,iOS系统提供了多种不同的接口,先谈谈iOS多线程最基础方面的使用.产生线程的方式姑且分两类,一类是显式调用,另一类是隐式调用. 一.显示调用的类为NSThread.一般构造NSThread的线程对象可通过两种方式: 1. 初始化线程主方法: [NSThread detachNewThreadSelector:@selector(run:) toTarget:target withObject:obj];//类方法 或 N

在Visual Studio 2010中实现数据驱动Coded UI Tests

通常情况下,我们要与不同的数据值一起重复一个测试.这个"数据驱动"在Coded UI Test中非常容易的.在本例子中,我们创建了一个Coded UI Test,以验证在计算器的两个数字增加.现在,让我们看看如何能够把一个简单的CodedUI Test转化为数据驱动测试. 1.首先创建Coded UI Test (Create the Coded UI Test)(请参考上一个实例): 然后创建数据集.Coded UI Test支持多个数据源.该数据集可以定义在一个CSV(逗号分隔值)

求推荐,不用写代码,易操作的UI自动化测试工具

问题描述 求推荐,不用写代码,易操作的UI自动化测试工具 求推荐,不用写代码的,不用搭建框架,易操作,维护成本较低的UI自动化测试工具,除了qtp ,selenium.非常感谢! 解决方案 开发者眼中最好的 22 款 GUI 测试工具 http://www.oschina.net/news/52531/22-gui-testing-tools

谈 Dojo 应用的 UI 自动化测试

本文首先列举了 Dojo 应用 UI 自动化测试所面临的挑战,进而引出设计 Dojo 应用 UI 自动化测试的框架时应考虑的一些原则.对于正从事 Web UI 自动化测试工作的读者(即便所测试的应用不是 Dojo 应用)或者对这方面感兴趣的读者,本文都有一定的参考价值. 随着富 Internet 应用(RIA)的不断兴起,各种 JavaScript 开发工具包的功能也在不断增强,Dojo 正是其中的佼佼者.Dojo 提供了一套完整的开发解决方案,包括核心的 JavaScript 库.简单易用的小

Silverlight/aspx/ajax/mvc的UI自动化测试

web前端的自动化测试,一般要能实现模拟鼠标点击.键盘录入.浏览器页面自动导航等功能,而且关键的是要对整个测试过程能自动录制并回放. vs2010的SP2已经集成了内置功能,但是目前尚未正式发布,所以本文就不介绍了.有兴趣的同学可参考以下文章: http://msdn.microsoft.com/zh-cn/library/gg413374 http://www.cnblogs.com/scottxu/archive/2011/02/28/1967112.html 除了微软自家即将推出的vs20