如何在 Rational Performance Tester 中实现条件循环

条件循环的自动化脚本示例

本文面向那些具有 Rational Performance Tester 初级和中级经验的自动化工程师,他们希望能够以最简单的方式创建一个条件循环。Vishalendu Pandey 将带您逐步体验这一过程,帮助您更加轻松地理解这个过程。

Vishalendu Pandey, 高级性能工程师, IBM

作者照片Vishalendu Pandey 在 IBM Supply Chain Application 工作了 5 年多时间,主要担任系统和性能工程师。在此期间,他使用不同的工具设计了自动化脚本,包括用于系统和性能测试的 Rational Performance Tester。



2012 年 12 月 06 日

免费下载:IBM® Rational® Performance Tester 试用版  |  IBM® Rational® 测试人员资源工具包
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

随着需求的不断变化,自动化正在变得日益复杂。要适应这一情况,我们需要以更加智能的方式开发自动化框架。决策控制是实现复杂自动化的关键概念之一。

在 IBM® Rational® Performance Tester 中,您可以将部分测试定义为 条件循环,也就是指运行指定次数的运行。您可以根据次数时间 设置循环的持续时间,或将其设置为无限 次。但是,软件没有提供相应的方法来动态设置循环的目标值。Rational Performance Tester 初学者可能没有样例代码来迅速上手。因此,本文的目的就是帮助您实现一个条件循环。本文将带您遍历一个完整的条件循环自动化脚本示例。不过,这并不是实现条件循环的惟一途径。

在 Rational Performance Tester 中创建一个条件循环

循环的逻辑或控制部分位于自定义代码(Java 类),这些代码负责限制循环的迭代次数。

首先进行一个新的性能测试。下面的屏幕截图显示了如何执行每个任务。

在 Rational Performance Tester 中打开一个新的测试

请注意:
Create New Test Wizard 中只显示了几个步骤。对于其他步骤,向导屏幕假定没有修改默认值,因此您仅需单击 Next 按钮即可。

  1. File 菜单中单击 New > New Test。
图 1. 创建一个新测试
屏幕显示了已选中的 Tests > New > New Test
  1. 在 Test File Name and Location 对话窗口中,为测试提供一个名称。对于本例,我将其命名为 LoopExample
图 2. 提供一个测试名称
New Test Wizard 窗口显示了位置和文件名
  1. 在 “Protocol and Features” 对话窗口中,只需选中 Core Features 复选框。
图 3. 选择测试协议和特性
在 Protocol and Features 视图中选中 Core Features 框

向测试添加一个无限循环

  1. 完成 Create New Test 向导后,在打开的新测试的窗口中,单击 Add 按钮并选择 Loop 元素。

这将向测试添加一个循环元素。

提示:
您可以通过右键单击测试名称调用相同的上下文菜单(图 4 中的 LoopExample)。

图 4. 从 Add 上下文菜单中添加一个循环
在下拉菜单中选中 Loop 选项
  1. 选择新添加的 Loop 元素。
  2. 在右侧的 Test Element Details 部分中,在 Duration 下,从列出的选项中选择 Infinite 单选按钮。
图 5. 修改循环的默认持续时间
从单选按钮组中选择 Infinite

图 5 的大图

添加自定义代码元素以控制循环

  1. 右键单击 Loop 元素。
  2. 从上下文菜单中选择 Add ,然后选择 Custom Code

这些 Java 代码将根据一些极限条件控制循环的迭代次数。在我们的演示测试脚本中,我们将使用脚本中位于循环外部的一个类来为迭代次数获取一个随机值。

图 6. 向 Loop 元素添加自定义代码
在菜单中选中 Loop > Add > Custom code

注意:
在命名自定义代码时,请遵守命名规则。由于所有类在默认情况下都保存在同一个目录中,因此最好使用不同的名称空间来实现较好的可读性,以避免混淆。例如:

  • customcode.com.ApplicationName.search.controlSearchLoop
  • customcode.com.ApplicationName.create.controlItemAddLoop

这两个例子显示了为两个不同类型的自动化脚本提供的自定义代码名称。第一个用于搜索类脚本,第二个是一个数据创建脚本。简单来说,这样做只是为了符合 Java 的命名规则和建议。

在循环之前添加另一个自定义代码,模拟一个动态值,以便控制循环

  1. 右键单击循环元素,从上下文菜单中选择 Insert,这样做的目的是为了将自定义代码插入到循环元素之前。

添加该类是为了给循环提供一个随机值,将无限循环限制为一个预定义的值。在真实场景中,您可以使用任意值替换该值,以确定循环中断条件。您需要相应地修改循环控制自定义代码。

下面提供了本例中一些类的名称,以供参考:

customcode.returnRandomValue

customcode.controlMyLoop

  1. 请注意,上下文菜单中的 Add and Insert 选项的行为十分有趣。使用 Add 在引用元素之后 应用一个元素,而使用 Insert 则会引用元素之前应用一个元素。在这里,引用元素就是右键单击的元素,在本例中是 Loop 元素。

快速参考:

  • Add 用于在引用元素之后应用元素
  • Insert 用于在引用元素之前应用元素

您的测试应当类似图 7 所示。

图 7. 测试设计屏幕
Test Contents 视图显示了包含自定义代码的 Loop

编写自定义代码

清单 1. customcode.returnRandomValue(用于执行随机循环)
public String exec(ITestExecutionServices tes, String[] args) {
	int rndNumber = (new Random().nextInt(10))+1;
	tes.getTestLogManager().reportMessage("Random Number:"+rndNumber);
return  ""+(rndNumber);}

在该代码中,要模拟一个动态值,您将使用一个随机值来生成 1 到 10 之间的一个整数。您可以将该值传递给循环内部的自定义代码(customcode.controlMyLoop)来控制循环迭代。

您可以在以下文件中找到完整的代码(参见 下载 部分):
returnRandomValue.java

注意:
tes.getTestLogManager().reportMessage() 是一个 Rational Performance Tester 方法,我在前面的清单中使用它来输出随机数值。它将出现在两个位置上:

  • 在测试日志中
  • 在 Protocol Data > Event Log 下方

通常,在设计脚本时,我会使用大量此类语句来检查动态值。这有助于调试功能和代码问题。然而,在执行长期运行时,我会禁用这些语句。

清单 2. customcode.controlMyLoop
public String exec(ITestExecutionServices tes, String[] args) {
                int i = tes.getLoopControl().getIterationCount();
                if(i>Integer.parseInt(args[0]))
                       tes.getLoopControl().breakLoop();
                else
                       tes.getTestLogManager().reportMessage("Iteration No:"+i);
		
                return null;
         }

您可以在以下文件中找到完整的代码(参见 下载 部分):
controlMyLoop.java

图 8 所示的屏幕截图显示了在 customcode.controlMyLoop 的 Test Element Details 下,如何使用自定义代码 returnRandomValue 的返回值作为参数(args[0])传递给自定义代码 controlMyLoop。

图 8. returnRandomValue 的随机输出
Test Element Details 下的 Arguments 部分

该代码测试最内层循环的迭代次数。最内层循环将在其迭代次数大于测试值(在本例中为 customcode.returnRandomValue) 的输出)时中断。

如果迭代次数小于测试值,那么代码将输出相应的迭代次数。

注意:
在处理 tes.getLoopControl() 对象时要注意,如果有多个循环,那么它将为最内层循环提供一个句柄。

例如,在 清单 3 的伪代码中,myloop 引用变量将具有到 LOOP2 的句柄。因此,该对象可用于获得迭代次数,或者用于中断或继续循环。

清单 3.
LOOP1
    {LOOP2
         { ILoopControl myloop = tes.getLoopControl();
    }
  }

完成上述步骤后,开始运行该脚本。

执行者应当能够看到循环在完成特定次数的迭代之后将会自动中断。

执行脚本

图 9 显示,customcode.returnRandomValue 生成的随机数为 1(参见右侧的文本框)。虽然循环运行了两次,但是它满足 customcode.controlMyLoop (2>1) 中指定的条件检查,因此循环在第二次执行时被中断。

因此,我们实现了在特定条件下中断循环的目标。不过,可以将这里所示的条件检查替换为其他类似的条件检查。

例如,我们可以使用一个来自 HTTP 请求的引用值(而不是此处使用的自定义代码),并且根据自定义逻辑来中断循环。

图 9. 执行后的测试日志
测试日志显示循环在特定条件下中断

如何在特定条件下继续执行循环

循环的一个新增特性就是 continue 操作。在某些情况下,当您希望循环在满足某个条件后跳过执行时,那么这个特性很有用。例如,如果我希望只在偶数时执行循环体,那么可以使用这个特性。在清单 4 中,我修改了前面的代码以包含这个条件。

清单 4 显示了实现此目的的代码。

清单 4. 修改 customcode.controlMyLoop 代码以跳过非偶数迭代的循环体执行
public String exec(ITestExecutionServices tes, String[] args) {
		int i = tes.getLoopControl().getIterationCount();	
    if(i>Integer.parseInt(args[0]))
			tes.getLoopControl().breakLoop();
		else
			if(i%2 !=0)
				tes.getLoopControl().continueLoop();
			else
			tes.getTestLogManager().reportMessage("Iteration No:"+i);
		return null;
	}

在对这些修改运行测试时,测试日志如图 10 所示。

图 10. 修改代码以继续执行循环后的测试日志
测试日志显示了继续执行循环的条件

可以看到,customcode.returnRandomValue 中生成的随机数为 9。对于非偶数的迭代,会跳过循环执行,直到完成 10 次循环,这是循环的最终次数。

我希望本文能够帮助使用 Rational Performance Tester 的人实现测试自动化。阅读本文后,您应当能够创建一个自动循环,即使您刚刚开始接触 Rational Performance Tester。虽然可以通过其他方式实现相同的目标,但是本文演示的是我们已经在项目中成功实现的方法。


下载

描述名字大小
测试最内层循环的迭代次数controlMyLoop.java359KB
生成 1 到 10 之间的一个整数returnRandomValue.java1KB

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=850562
ArticleTitle=如何在 Rational Performance Tester 中实现条件循环
publish-date=12062012