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,弹出提示,点击确定),然后生成代码,如下图:

111810_0129_CCodeUIAut1.png 111810_0129_CCodeUIAut2.png

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

[TestMethod]

public void CodedUITestMethod1()

{

this.UIMap.RecordedMethod1();

}

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

111810_0129_CCodeUIAut3.png

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

111810_0129_CCodeUIAut4.png

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

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

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

111810_0129_CCodeUIAut5.png

它们应该是在一个类似如下的文件夹下,D:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies。如果不引用这些文件,编译会通过,但是运行时会报类似如下的错误:未能加载文件或程序集"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();

}

        public static void CleanUP()
        {
            Playback.Cleanup();
        }
 

}

要注意,这点很重要,必须运行Playback.Initialize(),不然你自己的应用程序获取的句柄全部都是无效的。 另外,需要注意Cleanup这个函数。在每一次退出测试的时候,我们需要执行Cleanup()。

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

TestInit.Init();

CodedUITest1 c = new CodedUITest1();

c.CodedUITestMethod1();

TestInit.Cleanup();

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

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

参考:

http://blog.csdn.net/quicknet/archive/2010/11/21/6025824.aspx

http://blog.csdn.net/quicknet/archive/2010/11/24/6032674.aspx

      理论上讲,在VS集成环境中能够执行的测试代码,在一般的程序代码中也是可以执行的,这里问题的关键在于,是否在你自己的程序中配置好了CUIT测试执行的环境, 即CUIT回放执行引擎是否正确启动了。当使用VS的CUIT工程时,每个测试类都被标识了[CodedUITest],当VS的Mstest测试引擎在执行每个测试用例的时候,它会自动读取测试所配置的属性,以判断测试的类型,当它看到是CodedUITest后,它会自动初始化CUIT的底层回放(Playback)执行引擎,让后执行该测试用例。

      在你的程序中是没有办法直接使用CodedUIAttribute和Mstest,这就需要Playback.Initialize()/Playback.Cleanup()这两个函数来帮助你完成启动初始化CUIT的底层回放执行引擎的工作,否则你的程序中无法直接应用CUIT类库中函数的。其实,不只是在非VS CUIT测试环境中调用CUIT函数需要显式调用Playback.Initilize/Cleanup,在CUIT的TestMethod外部调用任何Microsoft.VisualStudio.TeamTest.UITesting名字空间下的任何函数时,都需要这样显式地进行一下初始化和清理工作。VS Test Team的Gautam在的博文 How To : Get UITesting methods working outside the TestMethod of Coded UI Test进行了介绍。

      除了上面的函数,CUIT还有其它一些很有用的函数,例如:UITestControl.DrawHighlight() ,它可以在控件的边界上画出一个蓝色的边框并保持7秒钟 (这是时间长度是不可配置的),这在调试或者诊断问题的时候可以帮你判断所要的找的控件是否被成功地定位到了。

      还有UITestControl.CaptureImage() 和 UITestControl.Desktop.CaptureImage() ,它们可以用来获取控件和整个屏幕的截屏,这些截屏在测试失败的时候是非常有用的,可以帮助快速分析和定位测试失败的原因,特别是在问题出现具有一定随机性不易Repro的情况下,错误现场的图片对于分析问题至关重要。


本文转自最课程陆敏技博客园博客,原文链接:http://www.cnblogs.com/luminji/archive/2010/11/18/1880452.html,如需转载请自行联系原作者

相关文章
|
9天前
|
Web App开发 测试技术 API
自动化测试工具Selenium的深度解析
【5月更文挑战第27天】本文旨在深入剖析自动化测试工具Selenium,探讨其架构、原理及应用。通过对其核心组件、运行机制及在实际项目中的应用案例进行详细解读,以期为软件测试人员提供全面、深入的理解与实践指导。
|
21天前
|
IDE C# 开发工具
一个开源轻量级的C#代码格式化工具(支持VS和VS Code)
一个开源轻量级的C#代码格式化工具(支持VS和VS Code)
|
6天前
|
jenkins 测试技术 持续交付
软件测试中的自动化测试工具及其应用
传统的软件测试流程需要大量的人工投入,其效率低下且容易出现遗漏。而自动化测试工具的出现极大地提高了软件测试的效率和精度。本文将介绍几种常见的自动化测试工具及其应用,分析其优势和不足,并探讨在实际项目中的应用场景。
|
7天前
|
JSON 数据管理 测试技术
自动化测试工具Selenium Grid的深度应用分析深入理解操作系统的内存管理
【5月更文挑战第28天】随着互联网技术的飞速发展,软件测试工作日益复杂化,传统的手工测试已无法满足快速迭代的需求。自动化测试工具Selenium Grid因其分布式执行特性而受到广泛关注。本文旨在深入剖析Selenium Grid的工作原理、配置方法及其在复杂测试场景中的应用优势,为测试工程师提供高效测试解决方案的参考。
|
7天前
|
Web App开发 前端开发 Java
|
10天前
|
敏捷开发 监控 IDE
深入理解自动化测试工具Selenium的工作原理与实践应用
【5月更文挑战第26天】 随着敏捷开发和持续集成理念的普及,自动化测试在软件开发生命周期中扮演了至关重要的角色。Selenium作为最流行的自动化测试工具之一,以其开源、跨平台和支持多种编程语言的特性被广泛使用。本文将详细解析Selenium的核心组件,探讨其工作原理,并通过案例分析展示如何高效地实施Selenium进行Web应用的自动化测试。我们将从测试准备到结果分析的全过程,提供一系列实用的策略和最佳实践,帮助读者构建和维护一个健壮的自动化测试环境。
|
12天前
|
敏捷开发 IDE 测试技术
深入探索自动化测试工具Selenium的高效应用
【5月更文挑战第23天】 在快速演进的数字时代,软件开发周期不断缩短,而质量保证的需求却日益增加。自动化测试作为确保软件质量的关键手段之一,其重要性不言而喻。Selenium作为一种广泛使用的自动化测试工具,因其跨平台、多语言支持和开源等特性,在业界得到了广泛应用。本文将深入分析Selenium的核心功能,探讨其在真实项目中的应用策略,并通过案例分析展示如何通过Selenium提高测试效率和准确性。
|
21天前
|
敏捷开发 监控 测试技术
探索自动化测试工具Selenium Grid的高效集成策略
【4月更文挑战第30天】在现代Web应用的快速迭代和持续部署中,测试自动化已成为确保产品质量的关键。Selenium Grid作为一款支持多种浏览器和操作系统的测试工具,提供了并行执行测试用例的能力,极大地提升了测试效率。本文将深入探讨如何高效地将Selenium Grid集成到现有的测试框架中,以及实施过程中的最佳实践,帮助团队最大化测试覆盖率,同时降低资源消耗。
|
21天前
|
中间件 测试技术 API
探索自动化测试工具的新边界:Selenium与Appium的集成实践
【4月更文挑战第30天】 随着移动应用和Web应用的不断融合,传统的自动化测试工具需要适应新的测试环境。本文将详细分析Selenium和Appium这两款流行的自动化测试工具的集成实践,探讨如何构建一个能够同时支持Web和移动端应用的自动化测试框架。通过对比两者的技术架构、功能特性以及在实际项目中的集成过程,我们旨在为读者提供一个清晰的指导,帮助他们在复杂的应用环境中实现高效、稳定的自动化测试流程。
|
21天前
|
前端开发 测试技术 持续交付
【Flutter 前端技术开发专栏】Flutter 中的 UI 测试与自动化测试
【4月更文挑战第30天】本文探讨了 Flutter 应用中UI测试和自动化测试的重要性,包括保障质量、提高效率和增强开发信心。Flutter提供`flutter_test`库进行Widget测试,以及`flutter_driver`进行集成测试。UI测试涵盖界面布局、交互和状态变化的验证,最佳实践建议尽早引入测试、保持用例简洁,并结合手动测试。未来,随着Flutter技术发展,UI测试和自动化测试将更加完善,助力开发高质量应用。
【Flutter 前端技术开发专栏】Flutter 中的 UI 测试与自动化测试