自动化测试框架设计的挑战——分布式测试模型(1)

软件质量报道 2014-10-11

分布式测试是使得自动化测试框架(Test Automation Framework,TAF)能够在相同或者不同的时间段在多个测试机上分配并执行相同或者不同的测试用例,并且从所有的测试机上监控其状态,并巩固测试的结果。

在分布式测试中,测试框架在逻辑上被分成两种:

1) 测试控制器(下面简称为“控制器-Controller”)—该机器分配测试用例,监视它们的整体状态并负责巩固测试的结果。

2) 测试运行机(下面简称为“运行机- Runners”)—该机器负责运行测试用例。

在某些情况下,一台机器可能既是控制器、又是运行机。因此,它可以拥有对应的一个或者两个逻辑功能区。

以下是一些分布式测试的比较典型的用途:

1) 操作系统平台的覆盖——在不同的平台上运行测试用例

2) 硬件覆盖——具用不同的硬件或者资源的机器上运行测试用例

3) 性能测试——对一个应用程序同时生成请求,因为单独一个机器不能够生成足够的目标负载。

4) 安全性测试——将运行机从控制器中分离出来,如果不这样做,容易导致操作系统的崩溃。

5) 减少测试周期时间——即便测试可以在一个单独的机器上运行,但是多个相类似的机器也是允许并行执行的。

6) 常见的测试框架——在不同的机器上运行不同的测试用例,因为不同类型的测试用例需要不同的配置。

在下面讨论中,我们会试着去了解在分布式测试机制中将要面临的挑战以及各类开发自动化的解决方案的途径。

在实验分布式机制中的一些设计问题

了解了分布式测试的基础之后,让我们看一看当设计一个支持分布式测试的TAF时,我们需要回答的各种各样的问题(多达14个问题):

1) 测试注册——测试是否可以被注册到控制器中,这样它们在逻辑上代表分配意图?

2) 测试分配——TAF是否可以将测试用例的一个子集(子集可以像超集一般大小)分配到一个运行机中?

3) 测试调度——对于一个给定的测试周期,控制器能够支持位运行机建立一个测试调度么?它是否同时支持多个产品/构建?它是否为一些测试/构建/产品/请求者分配优先级?它是否支持优先级重构以防止出现低优先级的运行被高优先级所取代?

4) 测试配置——除了测试,控制器能否支持配置选项,例如被测试的版本(Build under test)构建、报告的详细程度()等等?

5) 测试触发——一个测试周期是如何触发的?它是随着按下按钮/人工介入的命令/自动事件而触发?谁触发了在运行机上的测试——是控制器还是运行机本身?

6) 启动运行机——如果一个运行机在前一个周期中被关闭,那么当需要的时候,控制器能否将它重新开启?

7) 测试调度/配置与运行机共享——测试调度是在控制器中完成的,那么运行机是如何知道测试在运行机中的调度情况呢?

8) 通信协议——运行机拥有控制器发送给它的指令,那么运行机是否可以解读该指令呢?

9) 确保运行机拥有所需要的资源——运行机知道它必须要执行什么样的测试用例。那么我们是如何确认它已经得到所有的资源——测试代码的最新版本(或者一个给定的版本)、测试构建(verbosityof reporting)、测试数据等等?

10) 监控运行机的状态——控制器是如何知道运行机在测试执行的哪个阶段?他是如何知道测试的执行是否会因为一个问题而已经被停止了,比如在系统崩溃的时候?

11) 与控制器共享测试的结果——运行机是如何以及什么时候将测试的结果反馈给控制器的?运行机在不同的阶段共享的内容是不是不同的?

12) 结果的整合——在运行机执行中或者执行后,控制器能够整合来自所有的运行机器的结果并显示它们的整体状态?

13) 连续执行——一旦一个运行机完成执行一个给定配置的测试,它能否从控制器获取分配给它的下一组测试,或者它可以被控制器指示这么做而无需人工的干预?

14) 中止测试的执行——控制器是否可以中途中止在运行机中的测试的执行?

很明显上述的问题在一篇文章中很能全部被解决。我将会在这系列之后的文章中详细地介绍关于所有这些领域的内容。在这篇文章中,仅仅讨论在基本的分布式测试中我们如何确保控制器和运行机之间的通信。

分布式测试模型

我们可以通过不同的方法为分布式测试设计一个解决方案,我喜欢将它们称之为模型,“模型”就是有助于我们用一种高层次的模式来了解一个相当复杂的问题。我已经实施/设计了遵循下列模型的自动化解决方案:

1、Push

2、Pull

3、Peer

4、Hybird

为了用一种简单的方式理解模型,我会将它们做一个类比。下面我们考虑一个由老师和由教师分配任务必须完成的学生所组成的类,这个类是建立在老师的性质,学生主体,课程类型等的基础上的。教师与学生、学生与教师以及他们各自之间的交互方式是不同的。在一个分布式测试模型的TAF实现中教师相当于控制器,而学生就相当于运行机。

注意:由于在下面的章节中会参考到一些基本的网络词汇比如守护进程,接口等。如果你对这些词汇并不了解,我建议你浏览一下下列网站:

http://en.wikipedia.org/wiki/Daemon_(computer_software)

•http://en.wikipedia.org/wiki/Network_socket


本站仅按申请收录文章,版权归原作者所有
如若侵权,请联系本站删除
觉得不错,分享给更多人看到
软件质量报道 热门文章: