创建模块化性能测试来节省时间并改进重用性,第 2 部分

指南教程

一个使用 Rational Performance Tester 测试变量的真实案例

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: 创建模块化性能测试来节省时间并改进重用性,第 2 部分

敬请期待该系列的后续内容。

此内容是该系列的一部分:创建模块化性能测试来节省时间并改进重用性,第 2 部分

敬请期待该系列的后续内容。

引言

这一教程提供了具体的指南,指导您怎样使用 Rational Performance Tester 测试变量功能,来在运行时交换数据,而不必使用用户生成的数据池。

开始之前应该做的事情

请确定您已经阅读了本系列的第一部分:“使用 Rational Performance Tester 来在模块化测试之间交换数据”。您可以查看总结后面的“查看本专题更多内容”,以得到这篇文章的链接。

免费下载:IBM® Rational® Performance Tester 试用版  |   IBM® Rational® 测试人员资源工具包
获取免费的 Rational 软件工具包系列,下载更多的 Rational 软件试用版

链接测试模块的步骤

在这个范例中,您将会看到四个 SAP 测试模块在一个真实的用户场景中是如何被合并和被使用的。测试模块包括 Login、Create order(VA01)、Delete order(VA02),以及 Logout tests。它们是使用 Rational Performance Tester 测试分割功能来创建的。测试变量功能用于交换 Create 与 Delete order 测试模块之间的数据。

第 1 步. 声明一个测试变量

定义一个测试变量的第一步就是声明它。您可以按照下面的方式来声明一个变量:

  • 右击 Test Variables 容器。
  • 点击 Add
  • 点击 Variable Declaration 并输入一个变量名。
图 1. 变量声明
声明测试变量,下拉菜单选项
声明测试变量,下拉菜单选项

第 2 步. 设置测试变量的范围

在声明测试变量之后,您需要设置它的范围。测试变量的范围决定了它对其他的测试是否可见。您可以将其设置为以下的一个选项:

  • “只对本测试”可见
  • “对本用户”可见

当一个测试变量被设置成“只对本测试”可见,这意味着它是一个本地变量,并且只能被声明它的测试引用。测试变量存储在数据区域之中,并且对其他的测试来说不可见。它只能通过通用代码进行访问。

当一个测试变量被设置成“对该用户可见”时,那它就是一个前用户(全局)变量。它的值在测试之间可以保持不变。

一个测试变量可以被设置为一个文本字符串或者其他的数据源值。当测试变量尚未初始化时,您可以处理运行时方面的错误。

对于这里的范例,测试变量范围被设置为“对该用户的所有测试可见”,因为它将会与其他的测试相共享。

图 2. 设置变量的范围
与测试变量相联系的字段
与测试变量相联系的字段

第 3 步. 创建一个“SAP 得到”元素

对于这里的特定范例,您需要创建一个 SAP GET 元素,因为响应被嵌入到一个 SAP GUI 对象中(屏幕)。SAP Get 元素会从屏幕那里获得字符串作为一个引用。

您可以按照下面的步骤来创建一个 SAP GET 元素(在图 3 中的屏幕截图中会有演示):

  1. 对于已经打开的测试,您可以展开一个交易。
  2. 点击您想要获得字符串的测试元素(屏幕),而屏幕会自动显示在 SAP Protocol Data 视图之中。
  3. 点击以从屏幕中选择字符串。
  4. 右击字符串并选择 Create element
  5. 在接下来的屏幕上选择 SAP Get
  6. 点击 Finish 按钮以创建一个元素。
图 3. 创建一个 SAP 测试元素
SAP 创建元素屏幕
SAP 创建元素屏幕

第 4 步. 创建一个字段引用

对于这个特定的范例,您需要创建一个 字段 引用,而不是单纯的引用,因为整个字符串需要作为论断传递给通用代码,来从中获得顺序号码。

您可以按照下面的步骤来创建一个字段引用(见于图 4):

  1. 选择您在第 3 步中所创建的 SAP Get 元素。
  2. 右击测试元素具体信息视图之中的 SAP Get 元素。
  3. 选择 Create Field Reference 并为引用提供一个名字。该范例保持了默认的名字,但是会一直使用对引用有意义的名字。这就使得识别它们变得更加容易。
图 4. 创建一个字段引用
SAP 创建字段引用界面
SAP 创建字段引用界面

第 5 步. 向通用代码传递一个字段引用

既然 Delete order(VA02)不能按照当前的形式来使用来自 Create order(VA01)测试的响应,您可以使用通用代码来从第 4 步中所创建的字段引用中获取顺序号码。字段引用会作为对通用代码的一个论断传递。

您可以按照下面的方式来传递对通用代码的论断(见于图 5):

  1. 点击通用代码。通用代码属性会显示在 Test Element Details 区域之中。
  2. 点击论断部分中的 Add 按钮,另一个屏幕就会显示出来。
  3. 点击引用并点击 Select 按钮。引用就会出现在论断部分之中了。
  4. 保存测试。
图 5. 向通用代码传递一个字段引用论断
向通用代码传递论断
向通用代码传递论断

本例中使用的通用代码

通用代码的第一部分从字段引用中获取顺序号码,将其分配给 orderNumber 变量,并返回 orderNumber ,这样测试就可以使用它的值了。通用代码的第二部分将 orderNumber 的值写入到一个文件之中(见于代码行 1 中的代码)。这一部分并不是必需的,但是它可以作为代码正确书写的确认。

代码行 1. 通用代码范例
package test;

import com.ibm.rational.test.lt.kernel.services.ITestExecutionServices;
import java.io.*;
import java.util.StringTokenizer;

public class Extracting_OrderNumber implements
        com.ibm.rational.test.lt.kernel.custom.ICustomCode2 {

    private static Object mutex = new Object();
    /**
     * Instances of this will be created using the no-arg constructor.
     */
    public Extracting_OrderNumber() {
    }

    public String exec(ITestExecutionServices tes, String[] args) {
        
        StringTokenizer userVarTokens = new StringTokenizer(args[0], " "); 
            //$NON-NLS-1$
        String orderNumber = "";
        String tempStr = "";
        while (userVarTokens.hasMoreTokens()) {
            tempStr = userVarTokens.nextToken(); //$NON-NLS-1$
            //tes.getTestLogManager().reportMessage(tempStr);
            try {
                long i = Long.parseLong(tempStr);
                orderNumber = tempStr;
            //    return orderNumber; //new statement added 5/06/09.
                
            }
            catch (NumberFormatException ne) {
            }
        } //Writing orderNumber to a file
        try {
            synchronized (mutex) {
            FileWriter outFile = 
                new FileWriter("C:\\SAP_OrderNumberI4_99U.csv", true);
            outFile.write(orderNumber + "\r\n");
            outFile.close();
            }
        } catch (IOException e) {
            tes.getTestLogManager().reportMessage(
               "Unable to write to C:\\SAP_OrderNumberI4_99U.csv");
        }
        return orderNumber; //change from return null, 
            to return orderNumber on 5/06/09
       }            

    }

第 6 步. 向测试变量分配通用代码

在最后的一步中,Create order(VA01)测试模块中的测试变量 orderNumber 会分配给通用代码返回值。存储在 orderNumber 变量之中的值将会作为 Delete order(VA02)测试模块中请求的输入。

您可以按照下面的方法来设置 “Create order”(VA01)测试模块之中的测试变量:

  1. 右击一个测试元素并点击 Insert(如图 6 所示)。您可以选择,点击 Add。请您确保 set variable 声明直接位于通用代码之后。您可以使用 Up and Down 按钮来将通用代码移动至适当的位置。
  2. 选择 Variable Assignment
  3. 选择测试变量(本例中是 orderNumber)。
  4. 点击 OK
图 6. 向测试变量分配通用代码
选择测试变量值
选择测试变量值

图 7 显示了完整的测试,它描述了测试中创建和设置一个测试值的所有步骤。

图 7. 第 1 步到第 5 步的测试
第 1 步至第 5 步的屏幕截图
第 1 步至第 5 步的屏幕截图

接下来的两步显示了怎样去引用测试模块之间的测试变量。

第 7 步. 为第二个测试声明一个测试变量

在第二个测试模块(Delete order)之中,您可以声明一个变量,该变量的名字与第一个测试变量(Create order)的名字相同。

第 8 步. 替换变量之中的测试数据

在这里的范例之中,第二个测试的数据(orderNumber)会被第 7 步中所声明的变量替换。

图 8. 使用测试变量替换测试数据
Test Contents 与 Test Element Details 选择
Test Contents 与 Test Element Details 选择

第 9 步. 在日程安排中使用测试模块

这一步显示了使用测试模块的日程安排。该工作负荷模拟了一种用户场景,该场景会从 SAP 系统中创建和删除顺序。

图 9. 使用 SAP 测试模块的 SAP 安排模型
使用 SAP 测试模块的安排范例
使用 SAP 测试模块的安排范例

当您在日程安排中再使用测试模块时,维护测试的基本结构,这一点是十分重要的。例如,SAP 测试结构需要包含一个 Login,一些其他的任务,以及一个 Logout。在运行测试之前评审测试模块,也是很重要的,这样就可以确保测试变量得到了定义,并在测试模块之间得到了适当的设置。

对于 SAP 测试而言,Login 与 Logout 测试模块不需要与其他的测试模块相联系。这是因为交易通常都是通过 SAP 系统进行导航的,而 SAP 测试在交易中已经得到分割了。测试模块不再需要与其他的测试模块联系。这是因为交易通常都是通过 SAP 系统进行的,而 SAP 测试已经在交易中分割了。执行会从一个过程流向另一个过程。但是,您需要确定第一个测试终结于适当的界面,它将会为随后的测试提供一个进入点。这就是为什么记录测试时,在每一个交易末期总是要返回至 SAP Easy Access 界面非常重要的原因了。

该日程安排之中的用户场景可以通过添加更多的测试模块来得到扩展,或者通过删除一些模块来降低规模。

对 HTTP 场景应用这些步骤

前一部分所描述的步骤可以用到一个 HTTP 场景之中,但是其中有一些不同。第 3 步和第 4 步对于 SAP GUI 测试是特定的。您可以查看“Rational Performance Tester 帮助”来学习更多关于创建引用和数据相关性的信息。

当您合并来自不同 HTTP 测试的分割测试模块,确定不同的测试模块之间存在联系,这一点是十分关键的。Rational Performance Tester 会自动创建测试模块之间的联系,该测试模块通过测试变量分割自相同的测试记录,并且它们保存在测试变量容器之中,Variables Created by Split Test,如 图 10 所示。但是,您将需要手动联系测试模块,该模块创建于不同的测试记录中,以与其他的测试模块一起使用(查看 图 11)。

为了手动联系从不同记录创建的测试模块,您需要确定变量得到了创建,并在特定测试模块之前和之后分配值。

图 10 显示了一个场景,该场景合并来自相同 HTTP 测试记录的三个测试模块。测试模块之间的联系会由 Rational Performance Tester 分割测试过程自动创建。注意测试变量是由 Login 测试模块所声明并设置的,然后会由第二个测试模块使用。另外,第二个测试模块还会声明并设置 Logout 测试模块所使用的测试变量。

图 10. HTTP 测试模块会通过测试变量来进行自动联系
通过测试变量联系测试模块
通过测试变量联系测试模块

图 11 显示了一个场景,该场景合并了来自不同 HTTP 测试记录的三个测试模块。第一个(Login)和第三个(Logout)测试模块来自相同的测试记录,但是第二个测试模块来自不同的测试记录。这些测试模块之间的联系是手动创建的。

图 11. 将测试模块与不同测试联系的范例
来自不同测试记录的联系测试
来自不同测试记录的联系测试

本文演示了怎样通过测试变量联系来自测试记录的测试模块,并合并它们以构筑一个用户场景。查看参考资料部分以得到更多有用的信息。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=628187
ArticleTitle=创建模块化性能测试来节省时间并改进重用性,第 2 部分: 指南教程
publish-date=02212011