TestComplete的分布式测试

发表于:2007-9-05 13:31

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:陈能技    来源:陈能技的博客

        分布式测试与非分布式测试是测试类型的一种划分方法。非分布式测试运行在一个独立的机器上,通常不与其他机器进行交互;相反,分布式测试是指测试由好几部分组成并且在不同的机器上执行。
 
分布式测试
        这里“分布式”指的不仅仅是测试在几个机器上同时进行,分布测试还指在测试过程中不同的测试部分互相之间有交互,以某种合适的方式协调和同步。实际上,同步是分布式测试的关键环节。另外,管理和配置分布式测试也是很关键的内容,为了测试结果分析方便,所有机器的测试结果应该自动收集在一起。
 
分布式测试的应用范围
        分布式测试一般应用在Web或内部网络上的C/S结构或其它多层结构的应用系统,这些系统的服务器端会与多个客户端交互。我们可以把这些类型的应用系统称为分布式应用。
 
        同时测试是很容易实现的,在TC中,首先准备好测试脚本,在需要运行测试脚本的机器上安装好TC或TestExecute,然后在这些机器上运行所需的脚本,可以同时开始运行,也可以相隔合适的延迟时间运行。但是同时测试还缺乏不同测试部分之间的同步和其它方式的交互。
 
TC的分布式测试
        为了更好地支持分布式测试,TC提供了NetworkSuite对象。从NetworkSuite看来,一个TC项目可以分成Slave和Master类型。Slave类型的TC项目可以被Master类型的项目启动。通过NetworkSuite来管理同步点、关键区域、协调事件等。
 
Network Suites
        为了利用TC实现分布式测试,必须满足以下条件:
1、 必须在参与测试的机器上安装TestComplete或TestExecute
2、 Network Suite Remote Agent(<TestComplete>\Bin\tcrea.exe)必须正在运行。正常情况下tcrea.exe在操作系统启动时即启动。
 
NetworkSute包括几个基本的元素:hosts、job、task、synchronization points等。
Hosts:用于配置参与测试的机器列表
Job:是一系列Task的集合
Task:指定在哪台机器运行哪些脚本
Synchronization points:用于同步执行脚本
 
Shared Path 共享目录
        在某台参与测试的机器上设置网络共享目录,可以帮助你存储公用数据。例如,你可以存储需要测试的程序,测试需要使用的数据等,甚至把Slave项目的脚本文件放到共享目录,然后配置使用Slave项目脚本的Tasks。
 
        你可以手工设置共享目录,也可以利用Shared Path属性设置共享目录路径,如果路径有效,Network Suite初始化时,TC就会把指定目录设置为共享属性。当Master项目关闭时会自动取消共享。
 
校验Task、Jobs、Hosts和Network Suite
        在master项目运行一个Network Suite的Task之前,会执行下面的初始化工作
1、 确保host机器正在运行。
2、 确保参与测试的机器上安装了TestComplete或TestExecute并可启动。
3、 确保参与测试的机器上的Network Suite Remote Agent(tcrea.exe)正在运行。
4、 如果TestComplete或TestExecute尚未启动则启动它。
5、 把Task的Path属性所指定的项目脚本加载到TC或TestExecute。
 
        你也可以通过右键选择Verify功能菜单,自己手工地对Tasks、Jobs或Hosts进行预先校验。还可以在脚本调用NetworkSuite.Verify,Job.Verify,Task.Verify,Host.Verify来进行校验。
 
运行Network Suite
        可以直接选择Project Explorer上的NetworkSuite运行,也可以通过脚本调用NetworkSuite的Run方法。
        NetworkSuite会按顺序运行所有Active的Job,Job的运行意味着运行它下面的所有Active的Task。
 
        可以通过查看Run State来获取Network Suite的运行状态信息。
 
同步点
        分布式测试过程中需要协调同步不同的机器运行不同的测试。TC提供以下机制来支持分布式测试:
1、 Network Suite Variables
2、 Network Suite事件
3、 WaitForNetVarChange和WaitForState方法
4、 Critical Sections
5、 Synchronization Points
 
        Network Suite Variables,用于在参与测试的项目之间交换数据,每个项目都可以修改变量,一旦修改,其它项目都使用新的变量值,类似于编程语言中的全局变量。
 
        NetworkSuite.WaitForNetVarChange方法来暂停当前项目脚本的执行,直到变量改变。例如,下面的脚本暂停执行,直到Network Suite的变量VisualTestPassed返回True值:
ifnot NetworkSuite.WaitForNetVarChange('VisualTestPassed', true, 600000) then
  NetworkSuite.Stop;
 
        也可以使用OnNetVarChange事件,OnNetVarChange事件在Network Suite的变量发生改变时触发。
 
        另外一种同步的方法是通过检查Job、Task、Host的状态,使用Job.WaitForState、Task.WaitForState、NetworkSuite.WaitForState方法,例如:
if not NetworkSuite.WaitForState(ns_Idle, 600000) then
  NetworkSuite.Stop;
 
        默认地,任何参与分布式测试的项目都能改变NetworkSuite的变量。有时候,这种行为会导致一些问题。例如,当几个项目同时尝试改变某个变量值时。为了确保变量值的修改是可预见的,按顺序进行的,使用critical section来确保某段脚本代码范围内的代码同一时间只给一个项目独占地执行一次。critical section还可以确保对某些关键资源(文件、数据库等)的写操作的唯一性。
 
        最后,sychronization points用于确保几个项目同时在代码的某个点开始执行。可以用于同时在几个机器上运行脚本的某个重要部分,从而模拟对服务端施加实时的压力。使用同步点非常简单,只需要在有待同步执行的代码行前添加NetSuiteObj.Synchronize(Name, Timeout)方法,指定相同的同步点名称即可。
 
测试结果
        每次运行Network Suite、Job或Task,TC都会把测试结果显示在Test Log中。每个Task独立一个Log节点。
 
        关于分布式测试和Network Suite,TC的帮助文档和Sample提供了详细的分析说明和例子。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号