VS2010测试功能之编码的UI测试之自动生成脚本的结构

来源:互联网 发布:淘宝店宣传推广 编辑:程序博客网 时间:2024/05/17 06:10

UI的自动化测试,目前的工具有很多,比如QTP, RotbotFramework,SilkTest等等,这类工具在做UI自动化的时候,大部分都是基于对对象的操作的(其实手动操作也是如此),因此会有一个对象的识别的过程,这里介绍的VS2010自带的编码的UI测试也是如此。下面主要介绍基于录制的编码UI测试,同时对录制的内容进行一些结构分析,为下一篇博文打下基础。

开始之前,可能需要看MSDN上面的这里“使用自动 UI 测试来测试用户界面”,里面介绍了使用VS2010创建自动化测试的基本步骤,这里不一一表述。

创建编码的 UI 测试后,录制完毕后,将向测试项目添加以下这些文件:

文件

说明

CodedUITest1.cs

包含编码的 UI 测试类、测试方法和断言。

UIMap.uitest

包含 UIMap 类的 XML 模型,包括所有窗口、控件、属性、方法、参数、操作和断言。

UIMap.Designer.cs

包含 UIMap.uitest 文件中包含的 XML 的代码表示形式。 不要编辑此文件。

UIMap.cs

包含 UIMap 类的更多代码。 可以在此文件中放置 UI 映射任何自定义。




UIMap.uitest文件是一个xml文件,这个文件主要描述了一些对象的结构,当点击"编码的UI测试生成器"里的"生成代码",就会生成
UIMap.Designer.cs文件。在看UIMap.uitest文件的时候,可以对照UIMap.Designer.cs文件,对象的描述和动作是一一对应的。
比如下面的UIMap.uitest中的<ExecuteAction/>动作节点的对应生成的代码


页面上的元素的对应关系


UIMap.uitest里面可以看出元素和元素之间的关系,比如父节点,子节点这类关系,同样在生成的代码中也会有这种体现。
如上图中的右边,父对象中有一个子节点的类型。
一旦代码生产了,UIMap.uitest内容就可以删掉,同理,在UIMap.uitest内容没有被破坏的情况下,UIMap.Designer.cs内容也可以删掉,重新生成。
最后运行测试脚本的时候,VS会从CodedUITest1.cs文件中查找方法前面有[TestMethod]的方法,如下:
        [ TestMethod]
        public void CodedUITestMethod1()
        {
            // 若要为此测试生成代码,请从快捷菜单中选择“为编码的 UI 测试生成代码”,然后选择菜单项之一。
            // 有关生成的代码的详细信息,请参见 http://go.microsoft.com/fwlink/?LinkId=179463
            this.UIMap.RecordedMethod1();
        }

然后根据方法,在UIMap.Designer.csUIMap.cs中获取对象和对应的方法
大致的工作流程就这样,在分析生成的代码的时候,可以发现,对控件的识别和操作,都是基于.net提供的一些程序集的,如下:
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Windows.Input;
using System.Windows.Forms;
using System.Drawing;
using Microsoft.VisualStudio.TestTools.UITesting;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.VisualStudio.TestTools.UITest.Extension;
using Keyboard = Microsoft.VisualStudio.TestTools.UITesting. Keyboard;
元素的关系也可以简单的被发现,比如Windows程序的整个对象继承自WinWindow,然后一些布局容器\元素都在整个WinWindow里面,元素之间也是有水平关系(同一个容器里面元素)和垂直关系(不同层次),同时WinWindow元素又是继承自VS提供的UITestControl,其他的一些元素的来源,可以同样分析。
系统级别的元素的关系如下(用户的元素分析也可如此分析)

这样对VS的UI自动化测试的结构有了一些了解后(元素、行为、代码的生成、行为的触发),就可以更好的组织自己的测试代码了。毕竟录制的过程,产生的内容不易于后期的维护。同时还面临的一个问题是,并不是所有的对象都可以录制的,有些对象需要通过VS提供的基类对象UITestControl来自定义。(类似于QTP的描述性编程)

下一篇博文主要分享符合利用上面的知识来自己组织测试代码的结构


原创粉丝点击