logo smartbear TestComplete 系列教程 我也要发布文档

TestComplete使用教程:从.NET程序集调用函数(上)


TestComplete是一款具有人工智能的自动UI测试工具,利用自动化测试工具和人工智能支持的混合对象识别引擎,轻松检测和测试每个桌面,Web和移动应用程序。使用TestComplete,可以提高测试覆盖率并帮助提供经过实战考验的高质量软件。

点击下载TestComplete正式版

在TestComplete中,您可以从脚本中调用驻留在任何.NET程序集中的例程。该程序集可以与.NET Framework或第三方.NET应用程序一起提供。


要求

  • TestComplete Desktop模块的许可证。
  • 在TestComplete中启用的.NET类支持功能。

如果您在访问.NET类时遇到问题,请选择“文件”|“其他”。从TestComplete主菜单安装扩展,然后检查是否启用了.NET类支持功能。

通过dotNET对象调用.NET例程

您可以使用特殊dotNET对象访问.NET程序集、类型和类型成员。

配置项目的CLR桥设置

通过dotNET对象从.NET程序集调用例程:

1、使程序集可用于脚本引擎。

将所需的程序集添加到项目的CLR Bridge列表中。此列表包含.NET程序集,其功能可通过该dotNET对象供脚本使用:

  • 选择工具|从TestComplete主菜单中选择“当前项目属性”。
  • 选择“CLR桥”类别。
  • 要从全局程序集缓存(GAC)中添加一个或多个程序集,请单击“浏览GAC”并选择所需的程序集。
  • 要从磁盘添加一个或多个程序集,请单击“浏览文件”,然后选择所需的文件。

注意事项:

  • TestComplete始终可以访问mscorlib.dll程序集(即使它不在CLR Bridge列表中)。您始终可以在测试中使用mscorlib.dll的类。
  • 从列表中删除部件后,单击“重新加载”以解锁部件的文件。否则,TestComplete将保持程序集锁定以进行读写访问,直到退出TestComplete。

2、指定托管过程的类型。

TestComplete将.NET程序集加载到帮助程序托管进程tcHostingProcess.exe中。TestComplete可以同时使用32位和64位程序集,并且托管进程的位数必须与程序集的位数匹配。否则,TestComplete将无法将程序集加载到托管进程。

程序集托管过程设置的“首选”体系结构定义了托管过程的位数。可能的值为:

  • 32位
  • 64位
  • 与操作系统相同

注意事项:

  • TestComplete可以创建64位托管进程,并且只能在64位操作系统中在其中加载64位程序集。
  • 32位程序集只能在32位托管进程中加载,而64位程序集只能在64位托管进程中加载。因此,如果程序集列表同时包含32位和64位程序集,则TestComplete将不会加载位数与托管进程的位数不匹配的程序集。
  • 当您打开两个项目并且其中一个使用32位托管过程,而另一个使用64位托管过程时,TestComplete将创建两个托管过程实例:一个用于32位程序集,另一个用于64位程序集。
  • TestComplete在项目之间共享托管过程。它不会为每个测试项目创建单独的过程。也就是说,具有相同CRL桥位数的所有项目都将使用相同的托管流程实例。

3、指定调用线程的类型。

若要指定调用线程的单元模型,请使用属于项目属性的CLR Bridge组的调用线程设置的“首选单元”模型。可能的值为:

  • 单线程模型
  • 多线程模型
  • 并不重要

从.NET程序集调用例程

添加到CLR Bridge选项的程序集在脚本中可用作该dotNET对象的子对象。在特定程序集中定义的类型又是程序集节点的子对象。与类型相对应的对象提供对在此类型中定义的子类型,静态成员和构造函数的访问。

“代码完成”窗口显示所有可用的程序集,类型和类型成员:


调用.NET类的静态成员:

dotNET.namespace.class.subclass.method(parameters)

dotNET.namespace.class.subclass.property(parameters)

TestComplete自动将您作为参数传递的简单数据类型(例如字符串、整数和布尔值)转换为.NET兼容值。

仅当对象类型的参数是System.Object该类的后代时,才能将其传递给CLR Bridge引擎。否则,将发生类型不匹配错误。

使用点将名称空间和类名称(和子类名称)分开。用下划线字符替换名称空间名称中使用的点。

调用非静态成员:

首先,通过调用类构造函数或创建新类实例的静态成员来创建所需类的实例:

dotNET.namespace.class.zctor()
dotNET.namespace.class.zctor_2(parameters)

注意:通常,类的构造函数名称为_ctor()。一个类可以具有多个构造函数(_ctor()、_ctor2()、_ctor3()等。但是,在VBScript中,标识符不能以下划线(_)开头。因此,为使_ctor方法与VBScript兼容,TestComplete用z方法名称中的字母替换前导下划线字符。例如,要调用该_ctor3方法,请使用zctor_3。

通过应用程序域调用.NET例程

对应于.NET应用程序的所有过程对象都具有AppDomain方法。该方法提供对应用程序域的访问。AppDomain方法返回的对象是.NET AppDomain对象的包装器。

TestComplete dotNET向基础.NET AppDomain对象添加一个额外的属性。该属性提供对在应用程序中定义的类和在加载到应用程序域中的程序集中定义的类的访问。

注意:该dotNET属性还提供对mscorlib.dll程序集中声明的所有类的访问。

通过AppDomain调用类成员:

Sys.Process("MyProcessName").AppDomain("AppDomainName").dotNET.namespace.class.subclass.method(parameters)
Sys.Process("MyProcessName").AppDomain("AppDomainName").dotNET.namespace.class.subclass.property(parameters)

调用非静态成员:

首先使用类构造函数或特殊的静态成员创建一个类实例(请参见上文):

Sys.Process("MyProcessName").AppDomain("AppDomainName").dotNET.namespace.class.zctor()
Sys.Process("MyProcessName").AppDomain("AppDomainName").dotNET.namespace.class.zctor_2.(parameters)

AppDomain.dotNET与dotNET对象相比,该属性的优点在于,您可以创建应用程序类的实例,而无需将应用程序程序集添加到项目的CLR Bridge列表中。

如果需要创建.NET对象以将其作为参数传递给应用程序例程,建议您使用应用程序域来创建该对象。这样,如果您的计算机上安装了多个.NET Framework版本,则可以避免兼容性问题。

本教程内容较多,分为上下两篇文章,想要了解该教程下半部分,请继续关注我们慧都网~您也可以下载TestComplete试用版免费评估~

相关内容推荐:

TestComplete 使用教程>>>


想要购买TestComplete正版授权,或了解更多产品信息请点击【咨询在线客服】