TestComplete的分布式测试

 
TestComplete 的分布式测试
 
陈能技
2007-9-3
 
分布式测试与非分布式测试是测试类型的一种划分方法。非分布式测试运行在一个独立的机器上,通常不与其他机器进行交互;相反,分布式测试是指测试由好几部分组成并且在不同的机器上执行。
 
分布式测试
这里“分布式”指的不仅仅是测试在几个机器上同时进行,分布测试还指在测试过程中不同的测试部分互相之间有交互,以某种合适的方式协调和同步。实际上,同步是分布式测试的关键环节。另外,管理和配置分布式测试也是很关键的内容,为了测试结果分析方便,所有机器的测试结果应该自动收集在一起。
 
分布式测试的应用范围
分布式测试一般应用在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( NameTimeout)方法,指定相同的同步点名称即可。
 
测试结果
每次运行Network Suite、Job或Task,TC都会把测试结果显示在Test Log中。每个Task独立一个Log节点。
 
关于分布式测试和Network Suite,TC的帮助文档和Sample提供了详细的分析说明和例子。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值