内容
简介: 利用 Rational Performance Tester(RPT)进行性能测试的过程中,数据关联往往是测试脚本编辑和调试过程中最繁琐的工作,直接影响测试脚本调试的效率。基于使用中的最佳实践,RPT
提供了一套自动数据关联规则,能够满足大部分测试脚本的需求。在被测系统非常复杂的情况下,RPT 还提供了扩展数据关联规则的功能,可以最大限度的满足用户需求。本文详细描述了
RPT8.1 提供的自动数据关联规则及扩展数据关联规则的方法,旨在帮助读者了解 RPT 所能提供的数据关联,并根据业务需求扩展规则,提高测试脚本开发的效率。
Rational Performance Tester(以下简称为 RPT)是由 IBM Rational
团队开发的性能测试产品。其内在支持的 HTTP 协议使得其广泛应用于 Web 应用程序,用于验证系统的性能,识别和解决各种性能问题。RPT
的测试分为五个阶段:测试脚本生成、脚本编辑、负载设计、测试执行和结果分析。
在 RPT 针对 web 应用录制生成的测试脚本中,某个 HTTP 请求中的数据常常依赖于前面请求的响应内容中的数据,如被测系统为每个新创建的资源(resource)分配一个
ID 并返回,以后对该资源的操作需要使用该唯一值来进行标识。为了保证测试在多用户和不同数据输入的情况下正常运行,该请求中的数据需要被替换为其所依赖的响应数据,我们称该响应数据为引用,这种脚本内部的链接称为数据关联。
数据关联往往是测试脚本编辑和调试阶段最繁琐的工作,直接影响测试脚本调试的效率。鉴于数据关联的复杂性,RPT
根据内嵌的算法提供了一套自动数据关联规则,在测试脚本生成阶段,当自动数据关联算法检测到一个请求值需要被前面的响应数据替换,会自动将该响应数据设置为引用,并将随后的请求值自动与该引用关联起来。该自动关联规则基于使用中的最佳实践,能够满足大部分测试脚本的需求。在被测系统非常复杂的情况下,RPT
还提供了扩展数据关联规则的功能,可以最大限度的满足用户需求。
本文详细描述了 RPT8.1 提供的根据算法生成的自动数据关联规则,并给出了 RPT 扩展数据关联规则的方法,旨在帮助读者了解
RPT 所能提供的数据关联,根据业务需求扩展规则,提高测试脚本开发的效率。
通过选择窗口→首选项→测试生成→HTTP 测试生成的数据关联和协议选项卡,可以修改或关闭
RPT 的自动数据关联功能,如图 1 为 HTTP 测试生成中数据关联的通用设置,图 2 为基于 HTTP
协议的具体应用的支持,其中包括对 IBM Rational 下一代协作软件交付平台—Jazz 的支持。本文中的自动数据关联规则基于如图的默认设置。
图 1. HTTP 测试生成的数据关联配置 1
图 2. HTTP 测试生成的数据关联配置 2
3.1 主机和端口
基于 Web 的应用程序可能在一个测试,甚至在一个页面中会发起多个连接连接不同的服务器。如图 3,在“测试内容”中,每个连接由相关联的请求下面的一个图标表示。选择连接,就可以看到具体连接信息和测试中使用这个连接的所有请求。由于最初录制的性能测试以后有可能需要在不同的系统环境中执行,可能有不同的主机或不同的端口,所以
RPT 提供了主机和端口的自动关联,图中该连接的主机自动关联到变量 192.168.0.27_Host ,端口自动关联到变量
192.168.0.27_Port 。
图 3. 主机和端口的自动数据关联
3.2
Cookie
Cookie 由服务器生成,通常用来存储一些动态数据,如会话 ID、认证 token,从而辨别用户身份,进行会话跟踪等。用
Cookie 的形式提交动态数据的好处是其值往往来自 Cookie 自身。如果服务器选择使用 Cookie,会使用
Set-Cookie 语句在 HTTP 响应头中指定这些数据和值。当客户应用程序发出后续请求时,会将这些
Cookie 包含在 HTTP 请求头中发出。RPT 能够自动实现 cookie 的数据关联,在脚本回放时自动将请求中的
cookie 值替换为服务器实际返回的值。
3.3 URL
URL 的一般语法格式为 :
http[s]://hostname[:port]/path/[;parameters][?query]#fragment |
query 字段通常是由 & 符号连接的若干个“name = value”组成,RPT 首先从中分析出所有的
name 字段,将其放入特定列表,当生成测试脚本时,会搜索最近出现的响应头或相应内容中的 name=value ,将
value 作为引用,自动与该 URL 中的 value 关联,如图 4 示例。
图 4. URL 自动数据关联
3.4 重定向
当某请求的响应代码为 301,302,303,307 时,RPT 会自动将响应头中的
location 的真实路径作为引用,搜索后续请求的完整 URL,当发现匹配时进行自动关联,如图 5 示例:
图 5. 重定向 URL 自动数据关联
3.5
请求内容
如果请求内容中出现由 & 符号连接的“name=value ”字段,则同
3.3 节,搜索最近出现的响应头或响应内容中的 name=value ,进行自动关联,如图
6 示例:
图 6. 请求内容自动数据关联
如果请求内容为 XML 文档格式,即以“<?xml version= ”开头。此时在内容中搜索每一个
XML 文档元素,即起始标签和结束标签之间的内容,自动与最近出现的响应内容中的 XML 文档元素的值关联,如图
7 示例:
图 7. XML 请求内容自动数据关联
IBM 基于 Jazz 平台的软件应用产品是 Jazz Foundation Services 的扩展实现,其基于
REST(Representational State Transfer)规范,以 REST API 的形式提供数据和服务的访问,也就是说可以通过
HTTP 的 POST/GET/PUT/DETELTE 方法来实现数据的 CREAT/READ/UPDATE/DELETE。
图 8. 基于 Jazz 产品的数据关联
RPT8.1 针对 Jazz 协议提供了在 HTTP 协议基础上的默认的数据关联规则支持,如图 2。
对于完整的请求 URL,除了自动实施上述 HTTP 协议的通用关联规则外,还要搜索最近的响应内容中出现的符合正则表达式
(?s)<link rel=\"[^\"]*\" type=\"[^\"]*\"
href=\"[^\"]*\" 的字符串,将 href 字段的值作为引用;或者搜索正则表达式
</title>.*?src=\"(.*?)\" ,将
src 字段的值作为引用,从而实现自动关联,如图 9 所示:
图 9. Jazz URL 自动数据关联一
对于请求头或请求内容中出现由 & 符号连接的“name=value ”字段,除了自动实施上述
HTTP 协议的通用关联规则外,还要对 name 匹配,如果 name 以“id ”(不区分大小写),“Area ”,“uuid_versionable ”,“Values ”结尾,则向前在响应中搜索最近出现的
value 字段作为引用,实现自动关联,如图:
图 10. Jazz URL 自动数据关联二
然而在 Jazz 产品性能测试的实践过程中,我们发现,由于采用了 web2.0 等新技术,脚本的请求变得愈加复杂,使得目前的数据关联规则不能满足需要,数据关联成为测试脚本编辑和调试的瓶颈。因此在实际测试项目实践的基础上,借助
RPT 提供的数据关联扩展功能,我们在测试生成过程中实现了针对需求的 RPT 数据关联扩展规则。
首先需要了解测试生成阶段的数据关联原理。自动数据关联的实现类为 DataCorrelator
类。在测试生成阶段,RPT 数据关联引擎调用其方法 CorrelateAll() ,该方法将遍历每个数据关联插件,调用插件中的
findSubs() 方法,找到需要替换的变量和位置,并将其加入列表 subSites
返回。之后扩展插件的 findReference() 方法搜索关联源并生成引用,默认从被替换的位置开始,向上搜索,直到找到最近的相匹配的引用。如图
11。
图 11. RPT 自动数据关联原理图
因此,如果需要实现数据关联的扩展规则,则需要开发处符合自身被测试的应用需求的数据关联插件。本节将以自定义的插件
com.ibm.rational.test.lt.datacorrelation.testgen.rta(简称
rta)为例进行阐述,该插件应用于基于 Jazz 产品的性能测试,主要功能是按照用户定制需求,将 RPT
自动生成的某些数据关联去掉,同时生成一些测试需要的关联。
RPT 提供了与数据关联相关的扩展点:
com.ibm.rational.test.lt.datacorrelation.testgen.DCTestgenProto |
例子插件 rta 中,实现该扩展点的代码为:
<extension
point="com.ibm.rational.test.lt.datacorrelation.testgen.DCTestgenProto">
<dcProtoAdapter
class="com.ibm.rational.test.lt.datacorrelation.testgen.rta.RTAProtoAdapter"
generic="false"
protoType="com.ibm.rational.test.lt.models.behavior.http.HTTPRequest"
uniqueID="rtaProtoAdapter">
</extension>
|
其中,point 为扩展点;protoType 为插件将要处理的协议的类型,例如 HTTP 协议为 com.ibm.rational.test.lt.models.behavior.http.HTTPRequest,因为基于
Jazz 的产品的性能测试是在 HTTP 协议的基础上处理的,所以该 rta 插件的协议类型亦声明为与
HTTP 协议相同;generic 是一个 boolean 型变量,如果取值为 True,在有多个插件共同处理同一协议类型时,此插件将会最后被调用;uniqueID
为该插件的唯一标识。
实现了该扩展点之后,当处理扩展中指定的协议的测试生成数据时,RPT 数据关联引擎会调用该扩展点声明的类中的相关代码,以例子插件为例,类的实现代码如下,完整代码请参见附件:
public class RTAProtoAdapter extends HTTPProtoAdapter implements IProtoElementAdapter7_0 {
public RTAProtoAdapter() {
}
public List findSubs(ArrayList elem, int index) {
if (!(elem.get(index) instanceof HTTPRequest))
return null;
List subs = super.findSubs(elem, index);
RTASubSites subSites = new RTASubSites(elem, index);
subSites.processSites(subs);
return subSites.getList();
}
public void findReference(LTTest test, Substituter sub, ArrayList elem,
int index) {
if (!(elem.get(index) instanceof HTTPRequest))
return;
RTASource source = new RTASource();
source.findSource(sub, elem, index);
}
...
} |
如图 12,在使用该插件之前,自动数据关联规则只实现了 processAreaUUID
的数据关联。
图 12. 使用 rta 插件前的自动数据关联
在使用该插件之后,根据用户的配置需求,我们可以取消 processAreaUUID
的数据关联,增加 ItemID ,StateID ,TransactionID
这个几个关键词的数据关联。
图 13. 使用 rta 插件后的自定义动数据关联
对于 rta 插件中关键词的设置,我们通过对 RPT 首选项的扩展实现,实现后的图形界面如图 14 所示,用户可方便地在界面上输入需要去除的数据关联和需要新增的数据关联。实现扩展点的代码如下所示,所涉及类的完整代码实现见附件。
<extension
point="org.eclipse.ui.preferencePages">
<page
class="com.ibm.rational.test.lt.datacorrelation.testgen.rta.ui.preference.RTATest.GenPreferencePage"
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
category="com.ibm.rational.test.lt.testgen.ui.preference.RPTTestGenPreferencePage"
name="RTA Test Generation"
id="com.ibm.rational.test.lt.datacorrelation.testgen.rta.ui.preference.RTATestGenPreferencePage"/>
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
</extension>
|
图 14. rta 设置界面
利用 Rational Performance Tester 进行性能测试的过程中,数据关联处理在测试脚本的编辑和调试中显得至关重要,其正确性直接影响加上负载后系统测试的结果可信性。RPT
提供了脚本的自动数据关联功能,该自动关联规则基于使用中的最佳实践,能够满足大部分测试脚本的需求。但其规则内嵌于代码中,其不透明性决定了用户对自动关联结果的茫然,本文揭秘了
RPT 自动数据关联的详细规则,使得用户对自动生成的测试脚本更加了解、容易掌控。而且对于复杂的被测应用系统,RPT
还提供了扩充数据关联规则的方法,本文以实例说明了如何扩展数据关联规则,方便用户在了解具体待测试的应用的基础上,根据需求在此规则上加入自定义的规则,从而大大提高了脚本编辑和调试的效率。
学习
获得产品和技术
讨论
|