Mario洁 发表于 2018-4-20 15:21:03

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浏览器开展测试,VS2
010支持微软的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 C
ontrol"对控件进行定位,也就是看看Coded UI目前还能不能找到这个控件。



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

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

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

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

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



5. 组合测试用例

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

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





6. 执行测试用例

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



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



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



7. 追加录制

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

追加录制的方法如下,

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

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



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



8. 一些注意事项

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

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

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



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

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

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

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



view plain copy
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);
      }

梦想家 发表于 2018-5-9 10:01:45

:victory:
页: [1]
查看完整版本: Coded UI 自动化测试初步研究