当前位置:编程学习 > C#/ASP.NET >>

C#借助Code UI Automation脱离VS黑盒自动化测试工具编写

本文摘要:

1:测试要求

2:在VS中运行自动化测试

3:脱离VS进行自动化测试

 

在上一文中《C#借助API实现黑盒自动化测试工具的编写》(http://www.cnblogs.com/luminji/archive/2010/11/03/1867730.html),我们使用WINDOWS API来实现自动化测试工具的编写。但是,这种办法在大型软件测试的时候,需要很细致和繁杂的工作。在VS2010出来以后,我们不妨看看Code UI Automation这个好东西。关于Code UI Automation已经有人介绍过很多,本文要说明的重点如下:

1:使用Code UI Automation来录制手工操作UI的动作,让VS根据这些操作自动生成测试代码;

2:新建WINFORM项目(也即黑盒工具),在这个WINFORM项目调用这些自动生成的代码;

上文提到的1,之所以要让VS自动生成代码,是为了免去我们手动编写测试代码的繁杂工作。上文提到的2,是为了可以让我们的测试工具脱离VS。

本文代码下载:http://download.csdn.net/source/2839416

 

一:测试要求

测试的要求仍旧如下,假设存在这样一个应用程序:

1:提供一个WINFORM窗体,上面存在一个TextBox,以及一个Button;

2:点击Button,会弹出提示框,提示框内容为TextBox的值;

现在,测试要求如下:

1:在300台机器上运行上面的程序;

2:到这300台机器上去点击这个Button,看看上文中的功能2有没有实现;

 

二:在VS中运行自动化测试

为了说明这个例子,我们创建了解决方案WindowsFormsApplicationTest,该解决方案共分为三个项目:

  1. WindowsFormsToBeTest,被测试的应用程序;
  2. TestProject1,VS2010的测试项目(使用.NET FRAMEWORK4);
  3. WindowsFormsTester,要编写的黑盒工具,也是一个WINFORM;

     

假设WindowsFormsToBeTest已经编写完毕,运行之。现在使用TestProject1中的Code UI Automation(新建"编码的UI测试")来录制操作(操作过程为:在WindowsFormsToBeTest的文本框中输入"ABC",点击Button,弹出提示,点击确定),然后生成代码,如下图:

\ \

找到生成的代码中公开的测试方法:

[TestMethod]

public void CodedUITestMethod1()

{

this.UIMap.RecordedMethod1();

}

其实,通过查看this.UIMap.RecordedMethod1()这个方法,VS也是调用WINDOWS API来实现获取各类控件的句柄。这个时候,如果我们在VS的测试列表编辑器中运行这个选中的测试CASE,

\

就会发现VS自动为我们复现了一个完整的录制过程中的操作。如下:

\

 

三:脱离VS运行自动化测试

接下来的工作是需要在我们自己的应用程序WindowsFormsTester中运行这个测试。

3.1:首先,我们需要在WindowsFormsTester中引用这些DLL:

\

它们应该是在一个类似如下的文件夹下,D:Program FilesMicrosoft Visual Studio 10.0Common7IDEPrivateAssemblies。如果不引用这些文件,编译会通过,但是运行时会报类似如下的错误:未能加载文件或程序集"Microsoft.VisualStudio.TestTools.UITest.Extension.IE.Communication.Interop, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"或它的某一个依赖项。系统找不到指定的文件。

3.2:在TestProject1中提供一个类来提供一个静态方法,如下:

public class TestInit

{

public static void Init()

{

Playback.Initialize();

 

}

}

 

要注意,这点很重要,必须运行Playback.Initialize(),不然你自己的应用程序获取的句柄全部都是无效的。

3.3:现在,可以在WindowsFormsTester调用TestProject1中的公开方法了,如下:

TestInit.Init();

CodedUITest1 c = new CodedUITest1();

c.CodedUITestMethod1();

 

这样,我们便完成了一个脱离了VS的黑盒自动化测试工具WindowsFormsTester。

借助Code UI Automation的自动生成代码,使我们繁杂而细致的测试代码编写工作交给VS的测试引擎去实现,我们可以更多的将细节放在测试的业务逻辑上,而不是努力地去获取各种控件的句柄并操作他们。

特别感谢周京生http://hi.csdn.net/space-1424875.html提供的帮助。

    
补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,