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,该解决方案共分为三个项目:
- WindowsFormsToBeTest,被测试的应用程序;
- TestProject1,VS2010的测试项目(使用.NET FRAMEWORK4);
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# ,