使用 IBM Rational Tester for SOA Quality 在 Web 服务测试中添加元素和验证点 developerWorks

级别: 中级

Michael Kelly ([email protected]), 咨询顾问, www.MichaelDKelly.com

2008 年 2 月 14 日

学 会如何使用 IBM® Rational® Tester for SOA Quality 在您的 Web 服务测试中增加验证点和其它元素。这个 Rational 工具使得创建、运行以及基于 SOA(service-oriented architecture,即面向服务的架构)的 Web 服务和应用的分析功能测试、回归测试和性能测试的过程自动化。

测试服务和 SOA 应用程序

作者提醒:
这篇文章使用 IBM® Rational® Functional Tester 7.0.0 版本, IBM Rational Tester for SOA Quality 7.0.0 版本, Microsoft® Windows® 2000 Professional SP2, 和目前(此文章最初发布日期)的 Google Web API。

IBM® Rational® Tester for SOA Quality 使得创建、运行以及基于 SOA(service-oriented architecture,即面向服务的架构)的 Web 服务和应用的分析功能测试、回归测试和性能测试的过程自动化。在这篇文章中,您将学到如何使用这个工具在您的 Web 服务测试中添加验证点和其它元素。特别的,您将会看到每个验证点和每个元素的细节,您也会看到过去工程中的一个实例,其中所有工作已经准备就绪可以让一个 简单的测试正常运行。如果您还不太熟悉 Rational Tester for SOA Quality,花些时间阅读在这篇文章末尾 参考资料 中列出的一些介绍性文章。



验证应用程序行为

在 一个 Web 服务测试中检验应用程序应有的行为,您可以在消息返回前添加验证点。当您添加完验证点后,从一个 Web 服务消息返回的结果会与在验证点测试元素中特定的期待数据相比较。运行过程中,验证点会在 Web Service Verification Point 报告中产生一个 passfailerror, 或者 inconclusive状态。

有三种验证点您可以使用:

  • equal 或者 contain 验证点
  • Xpath 查询验证点
  • attachment 验证点

添加 equal 或者 contain 验证点

Web 服务 equal 或 contain 测试点使您能够监测一个返回消息的内容是否与所期望的标准匹配。Equal 或 contain 验证点使您能够直接把 Web 服务返回的 XML 文档与期望值作比较。像 IBM® Rational® Functional Tester 和 IBM® Rational® Performance Tester, Rational Tester for SOA Quality 支持这种类型验证点的正规表达式。

为一个 Web 服务测试添加一个 equal 或 contain 验证点,需要遵循以下几步:

  1. 打开 test editor, 选择一个 Web 服务 message return element
  2. 点击 Add, 选择 Contain Verification Point 或者 Equal Verification Point, 如图1所示。

图1.在您的测试中添加一个验证点
在您的测试中添加一个验证点

  1. 在测试编辑器的 Test Element Details 部分,为验证点键入 名称 , 并且选择是否在检测中包含 namespace XML data (如图2所示):
    • 启用 Namespace aware 在 XML 文档的合格结构上进行验证,包含名字空间的标签,而不是简单的名称。
    • 禁用 Namespace aware 忽略 XML 文档中的名字空间标签,仅检测元素的简单名称和最终的返回值。

图2. Equal验证点
Equal verification point screen capture

  1. DetailedOverview, 或 Source 页中, 指定期望的 XML 数据:
    • 对于一个 equal 验证点,所期望的 XML 数据包含来自于消息返回测试元素的 XML 文档。必要时您可以编辑所期望的 XML 数据。
    • 对于一个 contain 验证点,添加在测试中您期望在返回的 XML 文档中找到的 XML 元素。

添加 Xpath 查询验证点

Web 服务查询验证点使您能够检测一个消息返回与一个 Xpath 查询是否匹配。Xpath 是一种在 XML 文档中查找信息的语言,能够在 XML 文档中导航元素和属性。查询验证点能够使您检测通过一个 XML path 语言查询返回的结点数是否与所期待的验证点指定的结点数匹配。见 参考资料 部分有关创建 XPath 表达式的一篇文章的链接。

在 Web 服务测试中添加 XPath 查询验证点:

  1. 打开 test editor 并选择 Web 服务 message return element
  2. 点击 Add 并选择 Query verification point。您会看到如图3所示的对话框。

图3.查询验证点
查询验证点

  1. test editorTest Element Details 部分, 为验证点键入一个 名称
  2. 键入 一个有效的 XPath 表达式 (有关 XPath 的一个参考在下面的参考资料 部分中), 一个比较运算符 (=, >, 或 <), 和查询应该返回的所期望的结点数。

添加附属验证点

Web 服务附属验证点使您能够检测一个 Web 服务消息返回的附件与指定的标准匹配。附属验证点使您能够验证一个所期望的附件是否与消息返回一起被发送了。当一个附件所有的标准与验证点测试元素指定的 所期望的标准匹配时,附属验证点返回一个 Pass 状态。如果没有一个标准匹配,则验证点返回一个 Fail状态。

在 Web 服务测试中添加附属验证点:

  1. 打开 test editor 并选择 Web 服务 message return element
  2. 点击 Add, 并选择 Attachment verification point (图4)。

图4. 附属验证点
附属验证点

  1. 在测试编辑器的 Test Element Details 部分,为验证点键入 名称,并指定要被验证的 标准 。所有标准必须匹配以便验证点通过。
    • 如果您有多个附件,把 要被验证的 附件的 Index 设置为 要被检测的 附件的索引数。
    • 指定所期望的 Attachment Size ,以字节为单位。
    • 指定 Mime type 并且对附件进行 编码

对于任何一个验证点,您可以通过在测试编辑器中选择 Enable Verification Point 启用或者禁用每个 Web 服务验证点。


在 Web 服务测试中添加元素

您可以在一个测试中添加众多的元素,例如 Web 服务调用、消息返回、注释、循环或者条件:

  • 您可以在测试中使用 Web 服务调用元素来向 Web 服务发送一个请求。
  • 您可以在测试中使用 Web 服务消息返回元素来接收一个 Web 服务调用的结果。
  • 您可以在一个测试的某些部分插入 IF-THEN 逻辑,当且仅当特定的条件满足时运行那些部分。
  • 您可以定义一个测试中的部分为循环,让其运行特定次数。
  • 一个事务是一个特定的测试元素组,您可能对其所含的测试元素的性能感兴趣。事务可以包含 Web 服务测试元素或者其它事务。

您可以用以下方法中的任意一种在一个 Web 服务中添加一个元素:

  1. Test Contents 中右键点击 root element 并选择 Add
  2. 或者右键点击任意一个 request elements 并点击 Insert,如图5所示。

图5. 在一个 Web 服务测试中添加元素
在一个 Web 服务测试中添加元素

添加定制代码

定 制代码(如图6所示)使用测试中的引用作为输入,然后返回修改的值到测试中。定制代码输入值在引用或者字段引用中。这些引用必须包含在测试中。在这些测试 中,这些引用必须写在它们所影响的代码的前面。验证测试是否含有在您的代码中定制化输入所需的引用。想获得创建引用和字段引用的细节,请参考 参考资料部分中的文章 adding dynamic data to your Web service tests 。 如果您把定制的验证点裁决记录到您的定制代码中,这些都会被反映到所有的计划裁决中。


图6. 在一个 Web 服务测试中添加定制代码
在一个 Web 服务测试中添加定制代码

如果您点击 Generate Code,您将会看到您使用的是 ICustomCode2 接口创建您的定制代码 (如 列表 1所示),以及 ITestExecutionServices 接口扩展测试执行。 这些接口包含在 com.ibm.rational.test.lt.kernel.services 包中。 您能够找到 javadoc 文件中的 ICustomCode2 以及 Help 文件中的 ITestExecutionServices 接口。 如果您想调用的代码已经存在,则只需改变类名以与它的名称匹配。点击 View Code 打开 Java™ 编辑器中的代码。


列表1. 产生的定制代码
                
package test;

import com.ibm.rational.test.lt.kernel.services.ITestExecutionServices;

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

public Class1176656623734() {
}

public String exec(ITestExecutionServices tes, String[] args) {
return null;
}
}

向您的代码中传递参数:

  1. 点击 Add
  2. Custom Code 窗口中, 选择您的代码所需的所有输入。Custom Code 窗口列出了测试中能被用来作为您的代码输入(测试中的引用或者字段引用位于代码前面)的所有值。
  3. 点击 OK。窗口关闭, 被选择的引用会被添加到 Arguments 域, Used by 表也会随之更新。

测试中,在您的定制代码后:

  1. 定位您的代码返回到测试的值。
  2. 高亮显示此值:按住鼠标左键向下,把您的鼠标指针拖到此值上。
  3. 右键点击高亮显示的值,点击 Substitute from,然后选择您的定制代码的 class name 。 您已经添加的定制代码类已被列出来了。在您做出选择后,返回到测试的值被高亮显示成橙色, 并且 Used by 表也随着此信息一起被更新。

那么为什么使用定制代码呢?因为您可以使用它以某种方式扩展测试执行,包括以下这些通常的使用方式:

  • 管理循环的行为
  • 向日志中写入定制结果
  • 运行一个批处理文件或者程序,它可以建立测试所需的环境并且在以后可以重置此环境
  • 关联定制数据

添加一个循环

您 可以定义测试的一部分作为循环,此循环可以运行特定的次数,如图7所示。通过添加一个循环,您可以为一系列的迭代重复您的测试的任何一部分。循环能够比运 行一个简单序列的连续性测试提供更精细的控制。添加一个循环的好处在于循环是可见的,并且如果需要的话您可以通过循环控制迭代的速率。


图7. 在 Web 服务测试中添加一个循环
在 Web 服务测试中添加一个循环

如果您选择 Control the rate of iterations, 您可以设置迭代的速率为每毫秒、每秒、每分钟或每小时。您也可以选择让那些迭代或者 Randomly vary the delay between iterations 或者使用一个固定速率。如果您真的需要精确地模拟用户(即在某个时间段上随机展开),那么选择 Delay before the first iteration of the loop 复选框也是一个好的主意, 这会使每个迭代中的第一次延迟不稳定。这些选项经常在装载测试中使用,但是还有一些情况比如在您的功能测试中时间可能重要,并且您可能需要设置事务速率。

添加一个条件

您可以在一个测试的某些部分插入 IF-THEN 逻辑,当且仅当特定的条件满足时运行那些部分。大多数情况下,一个条件块依靠一个引用的值发出用户输入动作。这个引用必须存在于测试中并且在条件块前。如果条件块为了输入而使用的引用不存在,那么就创建它(这在 参考资料 部分的文章 adding dynamic data to your Web service tests 中有解释)。另一方面,测试可能已经包含条件逻辑要使用的 Web 服务调用或者信息返回元素。

当您选择 Conditional (If),您会收到一个即时的询问,问您是否想把选中的项放到 IF 逻辑中。如果您选择 Yes, 那么您选择的元素从 Test Contents 区(如图8所示)的If 下拷贝到 Test Element Details 区(如图9所示)的 Then域中。


图8. 嵌入在一个 IF 条件句中的 Web 服务请求
嵌入在一个 IF 条件句中的 Web 服务请求


图9. IF 条件句的 Test Element Details
IF 条件句的 Test Element Details

添加一个 Else 块,,选择 If 下您想拷贝到 Else 块中的元素,点击右键并选择 Insert > ELSE Block。 您将会被再次问到您是否想把选中的元素移动到新块中去。

Test Element Details 区,First operand 域是包含着一个会与 Second operand 比较的字符串值的引用,或者一个与包含运算符一起使用的字段引用。Operator 域表明了两个运算域(注意两个运算域都是字符串)比较的基础。 在 Second operand 域,您既可以为块(一个包含与 First 运算域比较的字符串值的引用)选择输入,也可以键入一个值。当使用默认(两个运算域都被设置成 true 并且 Operator 域设置成 Equals),块总是被处理。如果您愿意,通过选择合适的Options可以使运算符无效并进行区分大小写的比较。

添加事务、注释和延迟

事务、注释和延迟是相当直接的:

  • 一个 事务 是一个特定的测试元素组,您可能对其所含的测试元素的性能感兴趣。事务可以包含 Web 服务测试元素或者其它事务。您可以使用事务元素将 Web 服务元素分组使得测试更加容易阅读。
  • 在记录或者编辑时,您可以在您的 Web 服务测试中插入 注释。 注释有益于为脚本记录文档。考虑到许多测试仅是 XML, 一个小注释对解释清楚您测试的意图非常有帮助。
  • 通过在您的测试中添加一个 延迟, 您能够控制 Web 服务调用。 您可以设置 Delays 为毫秒、秒、分钟或小时。

把上述所有都综合在一起

最近的一个工程中,我们在测试中遇到了一个有意思的场景。服务如下工作:

  1. 向提供信息的服务提交一个 XML 请求。
  2. 接受一个含有确认数字的确认。
  3. 等待60秒(SLA,即 Service Level Agreement,响应时间)。
  4. 使用确认数字向一个不同的服务提交第二次请求来获得您所请求的实际信息。
  5. 使返回的 XML 响应有效,

That's a bit more involved then 您的正常请求和响应 Web 服务测试情况 ????。图10显示了我们如何把所有综合在一起(例子使用了 Google Web API)。


图10. 在一个测试中使用多种元素
在一个测试中使用多种元素

在图10所示的测试套件中,以下情况会发生:

  1. 一个请求会被发送到 doSpellingSuggestion
  2. 来自 doSpellingSuggestion响应会被验证以保证它含有正确的拼写建议。
  3. 如果响应包含一个拼写建议,则我们要等待60秒然后向 doGoogleSearch提交所建议的拼写。
  4. 我们检测来自 doGoogleSearch 的响应以得到正确的搜索结果。

有时,您需要一个简单的验证点,但是有时您需要条件语句,还有时您需要添加一个延迟或者循环。这些都取决于您测试的服务。使用您可以利用的各种元素开发适合您的测试。如果您发现用标准工具您不能做您需要做的,那么问问您自己您是否可以使用定制代码元素做您需要做的。



参考资料

学习

获得产品和技术

讨论

你可能感兴趣的:(developer)