级别: 中级 Michael Kelly (Mike@MichaelDKelly.com), 咨询顾问, www.MichaelDKelly.com
2007 年 9 月 03 日 了解如何在使用数据池、置换和 Web 服务测试中的字段引用,以及验证点。
IBM® Rational® Tester for SOA Quality 会自动建立、执行和分析服务和面向服务体系结构 (SOA) 应用程序的功能测试。在这篇文章中,您将会学到如何在 IBM Rational Tester 中为 SOA Quality 使用动态数据。 动态数据 表示建立基于数据的测试和动态确认点。您可以下载 IBM Rational Tester for SOA Quality 免费试用版。
 |
关于软件
这篇文章是基于 IBM® Rational® Performance Tester Version 7.0.0,IBM Rational Tester for SOA Quality Version 7.0.0 Open Beta,Microsoft® Windows 2000 Professional SP2,以及最初可用版本的 Google Web API 软件环境。
|
|
IBM Rational Tester for SOA Quality 是 IBM Rational Performance Tester 应用程序的一个扩展。如果您对 Rational Tester for SOA Quality 或者 Rational Performance Tester不够熟悉的话,那么我建议您先阅读一些这篇文章最后资源部分提供的一些文章。
在学习的过程中,您将会对 Google Web API (查看:资源的获得产品和技术部分的关于 WDSL 的链接)进行 Web 服务测试。而且您会为 doSpellingSuggestion 执行一个测试。在这个测试中,您需要通过 API 主键和阶段的测试,这里我给您提供一个建议:带 IBM Rational Performance Tester 返回值的 IBM Rational Performance Tester(如图1所示)。
图1:doSpellingSuggestion 测试用例的初始化
这个操作同时还建立了一个比对确认点,它用来寻找从 IBM Rational Performance Tester 收到的回应。在您学习如何添加域资源和置换详细内容之前,希望您回顾一下在 Rational Tester for SOA Quality 中数据池的相关知识。如果您对数据池非常熟悉,那么您可以选择跳过此章节。
数据池 101
在执行过程中,一个测试会使用一个带可用测试数据的数据池来取代已记录测试的值。在这个章节中,您会学习到如何为您的测试建立一个数据池,以及数据池是如何构造的。
建立一个数据池
建立数据池的方法有很多。最常用的方法是使用文件菜单建立数据池:
- 依次点击 File > New > Datapool。
- 在 New Datapool 窗口中,点击您需要添加数据池的项目,然后在 Name 栏中输入数据池的名称(如图2所示),然后点击 Next 按钮
图2:定义一个新数据池的名称和路径
- (可选)在描述数据池窗口中,为数据池添加一个描述,并为它选择 变量和记录。您不必太关心这些值,因为您可以在以后任意添加这些变量和记录。纵列显示的是变量(如图3所示)。在这个测试中,我们需要两个变量:一个是请求值,另一个是预期返回值。
- 设置变量的数量,然后点击 Finish按钮。
图3:描述数据池内容和结构
现在您会在 Test Navigator 中,您的项目下看到一个叫 doSpellingSuggestion 的数据池。除此之外,这个空数据池应该处于打开并可以编辑状态。
数据池和等价类
首先您需要了解的概念是等价类。在测试中,通常的做法是将输入和输出分为两个等价类。一个等价类中包含的值通常根据所期待的结果被认为是等价物。我们看一个经典的测试问题,例如三角形问题:
"三角形程序从一个穿孔卡片中读取三个数据,并将它们作为三角形的三个边。然后程序会判断三角形是否为不等边三角形,等边三角形或者等腰三角形。"
当设计这个测试时,您会瞬间看到三类输入输出数据:不等边三角形,等边三角形或者等腰三角形。当然还可能有其它情况,例如非法值,过大或者过小的三角形,但是您都可以非常迅速的开始为输入值和相应的输出结果分类。
从输入类设置的任何值,都会产生出相同的结果;因此它们是相等的。例如,三角形的三条边分别是2,2,2和3,3,3,它们都是等边三角形。IBM Rational 通过允许用户定义包含一定范围数值的数据池子集来实现这个概念,当使用到一个测试时,产生出相等的通过或者失败结果。一个数据池必须包含一个等价类。
如果您查看您刚刚建立的数据池,您使用的是数据池的默认设置,如图4所示。
图4:doSpellingSuggestion 数据池中的等价类标签
如果您点击 Overview 标签,您会看到 Equivalence Classes 章节,在这里您可以为您的测试定义需要的等价类。如果您双击已经存在的等价类,您可以重命名它。将它重命名为 phrasesWithSuggestions。然后建立另一个等价类,命名为 phrasesWithoutSuggestions。(查看 图5。)
图5:添加第二个等价类
变量和记录
下一步,您需要熟悉变量(纵列)和记录(横行)。
- 一个变量是一个明明的数据列。数据存在于列之中,它的类型由被测试的应用程序决定。
- 一个记录是数据池中的一个行数据。行和等价类相关,从第0行开始。
您需要为数据池重新命名变量,您可以点击列并输入新名称。(您还可以在 Overview 标签上完成这个操作,这和您重命名等价类一样。)通常情况下,它通过使用相关元素的名称来命名变量。如果这样不可行,您可以选择其它一些有意义的名称,这样可以让今后看到您的测试的人能够从这个名称得到一些提示,让他们知道您在做什么。重点要记住:不要将列的名称命名为 Variable1。(查看图6)
图6:重命名数据池中的变量
注意,当您改变一个等价类的变量时,这个变化会串联影响到其他等价类。
数据池编辑器是一个虚框,类似于电子表格。右键点击这个虚框,打开弹出式选单(图7),用它来添加或者维护已有的数据池构件元素。在其中直接输入数据即可将它添加到数据池。
图7:数据池结构和数据的操作
在继续阅读之前,请先将下列数据添加到您的等价类中 表1:
表1:doSpellingSuggestion 等价类的数据值
| 等价类 | 术语 | 返回 |
|---|
| phrasesWithSuggestions | IBM Rational Perforlmance Tester | IBM Rational Performance Tester |
|---|
| phrasesWithSuggestions | IMB Rational Performance Tester | IBM Rational Performance Tester |
|---|
| phrasesWithSuggestions | IBM Ratanal Porformance Testar | IBM Rational Performance Tester |
|---|
| phrasesWithoutSuggestions | IBM Rational Functional Tester | (空白) |
|---|
| phrasesWithoutSuggestions | IBM Rational Performance Tester | (空白) |
|---|
| phrasesWithoutSuggestions | demeloperMorks | (空白) |
|---|
现在您已经设置好您的数据池了,拥有了以上数据之后,让我们学习如何在 Rational Tester for SOA Quality 中执行数据驱动的测试。
置换
我们需要了解的第一个动态数据类型是 置换。它可以将测试中的一个特定值和一个特定的数据池列关联起来。
导入一个数据池
现在您需要做的第一件事就是使您的数据池正常工作。
- 您可以点击 Test Element Details 下 Common Options 标签里的 Add Datapool 为您的测试套件启动数据池。
- 打开 Import Datapool 对话框(查看图8)。
图8:Import Datapool 对话框
- 点击您想要是用的数据池,然后选择 Select 将其启动。然后您可以查看 Common Options 下的数据池和变量列表(图9)。
图9:Test Element Details 下的数据池信息列表
建立一个置换
下一步,您需要使用置换关联值。
- 在 Test Contents 目录树中,选择 doSpellingSuggestion ,然后选择 Details 标签。
- 选择 片语 元素。在这里您可以右键点击 Value 域,然后选择 doSpellingSuggestion datap...的 Substitute From > "片语"
变量。注意 Substitute from 菜单列出的元素是基于和测试关联的数据池而动态产生的(图10)。
图10:选择一个置换
在您建立了置换后,您会看到值会变成绿色。如果您解除对片语元素的定位,您仍然会看到它被高亮显示。(查看图11。)这些都是显示它们已经被置换的指示器。这使您能够在调试和更新您的测试时,快速的找到这些置换值。
图11:高亮显示的置换元素
- 下一步,您需要根据数据池的返回值来更新确认点以作应答。您可以通过选择 Equal Verification Point,找到 Detailed 标签中的返回元素,再次建立一个置换来完成这个操作。无论怎样,这次选择 doSpellingSuggestion datap... 的返回变量。
使用置换运行您的 Web 服务测试
如果您现在就运行测试,那么测试会使用您数据池中的第一个值。在这个练习的设置过程中,这个值是 phrasesWithSuggestions 等价类中的 "IBM Rational Perforlmance Tester"。数据读取正确并且确认点通过。列表1和列表2中的代码同是来自于一个单用户测试的测试日志。
列表1:Web服务调用代码
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<rpcns:doSpellingSuggestion
xmlns:rpcns="urn:GoogleSearch"
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<key xsi:type="xsd:string">00000000000000000000000000000000</key>
<phrase xsi:type="xsd:string">IBM Rational Perforlmance Tester</phrase>
</rpcns:doSpellingSuggestion>
</soapenv:Body>
</soapenv:Envelope>
|
列表2:确认点代码
<Envelope>
<Body>
<doSpellingSuggestionResponse>
<return>IBM Rational Performance Tester</return>
</doSpellingSuggestionResponse>
</Body>
</Envelope>
|
下一步,设置您的测试循环测试所有数据。最容易的实现方法是添加一个循环:
- 选择 Test Contents 树中的 doSpellingSuggestion(查看图12),然后点击Insert > Loop 按钮。
图12:在您的测试套件中添加一个循环
- 您会被提示是否想要将选择的条目移动到循环中。点击 Yes 按钮。
- 循环下的 Test Element Details(图13),输入数据池值的数量(这里是6个)。
图13:循环的 Test Element Details
- 保存后执行测试套件。
如果您查看测试运行时的 Return Equal Verification Points 报告(图14),您会看到有6个确认点被执行,并且全部通过。
图14:Return Equal Verification Points 报告
如果您查看测试日志中 Events 树的 Web 服务调用请求和回应,您会看到所有的数据池记录都被正确的调用。如果您想要移除一个置换,那么您只需要右键点击并选择 Remove Substitution 按钮。
域的引用
一个 Web 服务请求可能包含先前请求响应中返回的数据值。例如,假象在一个过去的商业服务公司的项目中,第三方合作伙伴使用一个 Web 服务请求您的系统的信息。对请求的响应是一个简单的确认,它包含一个稍后将要发送的响应的引用号。您需要使用这个引用号来手机第二个响应的信息。因此,在您的测试中,对于每一个您启动的会话来说,都有第一个响应和第二个请求之间数据相关的两个请求 XML 文件和两个响应 XML 文件。
在 Rational Tester for SOA Quality 中,您可以使用一个域的引用来执行这类的操作。在一个 Web 服务测试中,请求中的数据在哪里,由先前请求的响应中包含的数据决定,请求数据被它所依靠的响应数据所置换。这个响应和请求数据的内部标签的条件是数据相关性。
一个域的引用是测试中的一个值,它可以被测试中的一个并发值所使用。当测试码生成程序检测到一个需要被先前值置换掉的请求值时,它会指定早一些到来的值作为引用,并将并发的请求值和引用关联起来。
提示:
您可以手动将测试中的两个值关联或者解除已经存在的关联性。
让我们看一个使用 doSpellingSuggestion 的例子。您将会在第一个请求中查找到一个拼写错误的单词,然后您需要响应这个请求,并将它注入另一个 doSpellingSuggestion 调用,并且要验证没有任何建议被返回。这个例子有一些冗余,但是它阐明了我在一个真实项目中遇到的一个情况。
建立您的域引用
- 建立一个新的测试套件,覆盖第一个测试套件的 doSpellingSuggestion 调用。粘贴调用两次,它的结构应该和图15类似。
图15:建立第二个 doSpellingSuggestion 调用
- 在第一个 doSpellingSuggestion 调用中,选择 Test Contents 树的响应,然后选择 Details 标签。
- 选择返回元素。
- 右键点击 Value 域,然后选择 Create Field Reference。
注意,元素变成了蓝色,Value 域的背景颜色发生了改变,一些蓝色的箭头图标出现在了响应节点的 Test Contents 树中(图16)。这种情况显示了一个已经定义的域引用。
图16:定义一个域的引用的指示器
使用您的域引用
- 在第二个 doSpellingSuggestion 调用中,选择 Test Contents 中的请求,然后选择 Details 标签。
- 选择片语元素。
- 右键点击 Value 域。然后选择 Substitute From > /Envelope/Body/doSpellingSuggestionResponse/return。
注意,正如同置换一样,域引用同样也是动态构成的。这一次,片语元素变成了紫色,Value 域的文本被紫色高亮显示,一些绿色的箭头图标出现在了请求节点的 Test Contents 树中(图17)。这表示测试正在使用一个域的引用。
图17:使用一个域的引用的指示器
- 请确保您选择了第二个调用上的 Equal Verification Point ,并且移除了值(因为引用值的请求的拼写都应该正确)。
如果现在您再次运行测试,两个校验点都会通过,如果查看测试日志中的细节信息,所有的使用值都在每一个请求和响应 XML 中。如果您想要移除一个域的引用,右键点击并选择 Remove Field Reference。
这篇文章介绍了 Rational Tester for SOA Quality 动态数据的一些基本内容。按照您的需要任意混合搭配置换和引用。如果您想要学习更多关于在 Web 服务测试中使用动态数据的内容,请访问下面资源部分的文章,课程和站点列表。
参考资料 学习
获得产品和技术
讨论
关于作者  | |  | Mike Kelly 是一名位于美国中西部的独立顾问。Mike 也编写和演讲关于软件测试的话题。您可以在他的 网站上找到他的大部分文章和博客:www.MichaelDKelly.com。 |
对本文的评价
|