注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭研自动组

快乐耕耘,收获成长!

 
 
 

日志

 
 

基于White+NUnit的客户端测试框架——搭建篇  

2011-02-25 14:22:42|  分类: 技术调研 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
作者:都都

有了以上WhiteNUnit基础,我们就可以开始搭建客户端自动测试框架了。

1       工具准备

整个框架的搭建我们会需要用到以下几种工具:

1.  IDEVistual Studio, 下载及安装。

2.  FrameWork.Net3.0 SDKWhite需要用到.Net3.0

3.  White:这个不需要安装,只需要有相应的dll文件就行。另外我们根据需要对White做了稍许改动,需要用修改后的dll文件。

4.  NUnit:下载及安装,用最新的2.5.9版本

5.  UISpy:这个在.Net3.0中有,或者自己下载了安装一个也行。

6.  Vistual StudioQAliber插件:这个工具的作用稍后会讲到。

好了,有了以上这些,那就开始吧。一个简单的实例见以下地址:

http://www.testage.net/html/88/n-3888.html

2       自定义控件识别

在正式开始写用例之前,还需要解决一个问题:由于popo使用了大量UISpy无法识别的自定义控件,在无法获得开发支持,添加对这些自定义元素识别支持的情况下,目前使用的方法为图片比较+相对定位。

2.1     相对定位

即获得某个元素的相对位置(XY)坐标,后续操作都针对该坐标点进行。这个方法的缺点是定位不稳定,维护成本高,只适用于少量相对位置稳定的元素。

2.2     图片比较

将无法识别的控件截取为图片保存,之后通过比较保存后的小图与其父元素的大图,获得该图片在整个大图中的位置,即(XY)坐标,再进行各种操作。

使用图片比较主要需要2个步骤:

  •   将控件保存成图片
  •   比较两张图片并获得控件图片在大图片中的相对位置

popo登录按钮为例

基于White+NUnit的客户端测试框架——搭建篇 - 网易杭研自动组 - 网易杭研自动组
 

,目前的UISpy工具无法识别该元素,只能使用图片比较。这里会用到在最之前就提到的QALiberVS插件。安装了QAliber之后,选择菜单栏上的UI Testing菜单,选择UI Controls Browser

基于White+NUnit的客户端测试框架——搭建篇 - 网易杭研自动组 - 网易杭研自动组
 

将鼠标移动到相应控件,会看到如下图所示信息,选中登录按钮,点击Create Resource from Image Selection,虚线框内选中的登录按钮图片被自动保存成vs下的资源文件,之后可以通过Property.Resource.图片名查找到对应的图片。

基于White+NUnit的客户端测试框架——搭建篇 - 网易杭研自动组 - 网易杭研自动组
 

保存了图片之后,在程序中的使用:

public static System.Windows.Point getPosition(Bitmap mainImage, Bitmap subImage)

        {

            Bitmap mainImage = parent.VisibleImage;

            Bitmap subImage = Properties.Resources.button_login

ImageFinder imageFinder = new ImageFinder(mainImage, subimage);

            Rect sub = imageFinder.Find();

            System.Windows.Point clickablePoint = new System.Windows.Point();

            if (sub.X > 0)

            {

                int x = (int)(sub.X + sub.Width / 2);

                int y = (int)(sub.Y + sub.Height / 2);

                clickablePoint = new System.Windows.Point(parent.Bounds.TopLeft.X + x, parent.Bounds.TopLeft.Y + y);

            }

            return clickablePoint;

    }

这样就获得了登录按钮的点击坐标,之后就可以对该位置执行Click()操作。

3       用例实例

现在可以开始真正写用例代码了

1.        VS下新建Visual C#项目,选择类库

2.        在已经建立的项目中添加引用,需要引用以下dll包:

基于White+NUnit的客户端测试框架——搭建篇 - 网易杭研自动组 - 网易杭研自动组
 

3.        开始写用例,以popo发送消息为例。发送消息包括以下几个步骤:

  •  登录:需要登录两个popo01 popo02
  •  查找好友:popo01需要给popo02发送消息,首先需要确认双方是好友,并定位该好友
  •  发送消息:点击菜单——发送消息
  •   验证消息:popo02接收到popo01的消息并验证
  •   退出登录

分析:登录和退出是所有用例的公共操作,分别需要在用例开始和退出之后执行,符合NUnit的生命周期中的Setup()TearDown()的特点。

        [SetUp]   //Setup时进行登录

        public void  TestSetUp()

        {

            TestSetUp(DataProvider.two_users);

}

 

        [TearDown]  //TearDown时关闭popo进程

        public void TestTearDown()

        {

            Process[] processes = Process.GetProcessesByName("MyPopo");

            for (int i = 0; i < processes.Length; i++)

            {

                processes[i].Kill();

            }

        }

进一步的,由于这两个步骤在每个测试用例中都需要用到,考虑封装一个测试用例父类TestFixtureEx,将这两个方法封装到该父类中,所有测试用例类直接继承TestFixtureEx,这样在每个测试类中,就只需要关注具体的测试步骤,登录和退出操作就可以由框架来完成。

其他部分测试代码:

[Test,TestCaseSource(typeof(DataProvider), "opers"), Description("发送消息")]

        public void SendMsg(string oper)

        {

            string msg = OperUtil.getRandomNum();

            Panel user_list1 = popo1.Get<Panel>("POPO Skin List");

            bool is_friend_exist = OperUtil.isElementExist(popo1, user_list1, user2);

            if (is_friend_exist)

            {

                MenuOper.right_menu_click(user_list1, "发送消息", ObjectByPosition.Image_friend);

                MessageOper.sendmsg(app1, msg);

                verifymsg(msg);

            }

            else

                Assert.Fail(user2 + "不是" + user1 + "的好友");

        }

 

用例完成之后,打开NUnit,加载用例编译生成的dll文件,执行,即可看到用例执行结果。
  评论这张
 
阅读(1614)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018