TestComplete的分布式测试

2024-03-26 07:08

本文主要是介绍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提供了详细的分析说明和例子。
 

这篇关于TestComplete的分布式测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/847658

相关文章

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)

《Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)》本文主要介绍了Golang分布式锁实现,采用Redis+Lua脚本确保原子性,持可重入和自动续期,用于防止超卖及重复下单,具有一定... 目录1 概念应用场景分布式锁必备特性2 思路分析宕机与过期防止误删keyLua保证原子性可重入锁自动

基于MongoDB实现文件的分布式存储

《基于MongoDB实现文件的分布式存储》分布式文件存储的方案有很多,今天分享一个基于mongodb数据库来实现文件的存储,mongodb支持分布式部署,以此来实现文件的分布式存储,需要的朋友可以参考... 目录一、引言二、GridFS 原理剖析三、Spring Boot 集成 GridFS3.1 添加依赖

Redis实现分布式锁全解析之从原理到实践过程

《Redis实现分布式锁全解析之从原理到实践过程》:本文主要介绍Redis实现分布式锁全解析之从原理到实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、背景介绍二、解决方案(一)使用 SETNX 命令(二)设置锁的过期时间(三)解决锁的误删问题(四)Re

Gradle下如何搭建SpringCloud分布式环境

《Gradle下如何搭建SpringCloud分布式环境》:本文主要介绍Gradle下如何搭建SpringCloud分布式环境问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Gradle下搭建SpringCloud分布式环境1.idea配置好gradle2.创建一个空的gr

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

redis+lua实现分布式限流的示例

《redis+lua实现分布式限流的示例》本文主要介绍了redis+lua实现分布式限流的示例,可以实现复杂的限流逻辑,如滑动窗口限流,并且避免了多步操作导致的并发问题,具有一定的参考价值,感兴趣的可... 目录为什么使用Redis+Lua实现分布式限流使用ZSET也可以实现限流,为什么选择lua的方式实现

Seata之分布式事务问题及解决方案

《Seata之分布式事务问题及解决方案》:本文主要介绍Seata之分布式事务问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Seata–分布式事务解决方案简介同类产品对比环境搭建1.微服务2.SQL3.seata-server4.微服务配置事务模式1