(原创)如何在性能测试脚本中建立关联

版权声明:本文为原创文章,转载请先联系并标明出处

性能测试中的关联,说简单一点,就是把某些写死(固定)的数据,通过参数化变成动态的数据;或者说把前面脚本中的结果数据,提取出来作为后续脚本的请求数据使用。

进一步理解关联之前,我们简单看一下请求-响应模型:

客户端和服务器的连接是基于一种请求-应答模式。在HTTP1.1协议中,客户端和服务器建立一个连接,客户端提交一个请求,服务器收到请求后返回一个响应,客户端解析该响应数据后,根据该响应数据组织并发送请求,服务器返回响应数据,直到交易完成。

基于请求-响应模型,我们再来看一下关联:在录制脚本的时候,发出请求后,服务器返回的响应中会给一个sessionId,在脚本中后续的请求中也会基于这个“写死的”sessionId数据继续发送请求;当脚本回放时,发出第一次请求后,服务器返回新的sessionId值,接着在执行脚本发送第二次请求时,由于sessionId在脚本中是写死的,客户端会依然以脚本录制时的sessionId发出请求,此时服务器会返回异常响应。在这种场景中,就需要把“写死”的sessionId提取为一个动态参数,在后续脚本用到这个值时都用该动态参数替换。

诸如现在主流的测试工具:HyperPacerLoadRunnerJmeter都有建立关联的相关文档,查看LoadRunner的实现方式请猛戳此处~

那么在HyperPacer工具中是怎么达到关联的呢?下面我们用一个简单的实例来说明一下:

例子:某性能测试场景中,每个用户登录业务系统,都会获得一个sessionId,在一个虚拟用户内,这个数据是不会发生变化的,更换用户后,数据才发生变化。我们需要做的,是将sessionId这个数据提取为变量,参数化到后面的请求中。

HyperPacer中,关联就是通过数据抽取器将某一数据定义成变量,再将脚本中的所有相同数据都替换成变量,步骤如下:

1、脚本录制完成后,找到我们要进行关联的数据,如图:

说明:查看响应数据,查看的是录制脚本过程中产生的响应数据。

2、在取样器下,创建数据提取器sid;

3、提取响应数据中的sessionId值;

数据提取器的具体设置,可以参见HyperPacer帮助文档,这里不再赘述。

4、参数化后续的请求;

HyperPacer中参数化的写法是${变量名},本例中即为${sessionId},参数化之后为:

系统中需要参数化的数据比较多,推荐一个批量替换的方式,将所有的实例数据“6556957688931024897”替换为“${sessionId}”:

5、在HyperPacer工具中回放脚本,脚本执行通过即可。

明确了关联在HyperPacer中的实现步骤后,我们来探讨一下什么时机使用关联。很不幸的,并没有一个明确的错误信息标明脚本中需要做关联。一般情况下,回放脚本的时候,执行有错误,有可能是需要做关联的。我们判断的标准是动态的、重复出现的且数据来自于响应的情况下,是需要做关联的。

 

关于关联,为了保证关联提取数据的质量和稳定,我们规定以下几条规范:

1、关联应遵循“就远原则”,即从服务端第一次返回该信息的响应中提取数据。比如上面的例子中,如果脚本中的响应数据多次出现sessionId,那么应该用第一次响应的数据做关联;

2、由于关联的原理是通过字符串匹配的方式进行数据提取,因此,作为判断条件的边界字符串应该保证稳定,边界字符串本身不可以再包含动态信息。

3、为了提高边界字符串匹配的效率,边界字符串的选择应尽量简短并尽可能保证提取的数据唯一性。实在无法做到唯一性,也要尽量保证提取的数据范围最小。建议最多不超过5个,否则脚本本身的正确性和效率都不能得到保证。

这里给大家介绍的参考文章:


Jmeter关联


原文出处

你可能感兴趣的:((原创)如何在性能测试脚本中建立关联)