在测试过程中,每次请求时有些数据是经常发生变化的,将动态变化的值存放在变量中,当需要使用该变量时,自动从服务器响应的信息中获取该值,并在后面使用的过程中进行替换,这个就叫做关联。比如:第二个请求提交的参数要从第一个请求的返回数据中获取、cookie和session。
本文以登录、查询功能为例介绍关联的几种常用方法。登录之后会随着登录的响应结果产生一个JSESSIONID,且JSESSIONID是动态变化的,查询请求必须带着JSESSIONID一起发给服务器,才会请求成功。这个时候就需要做关联,将登录时的响应数据JSESSIONID存放在变量中,供查询时自动获取。

1. 测试前准备

① 添加登录请求

右键点击“Thread Group”–>“添加”–>“取样器”–>“HTTP请求”,并配置HTTP请求。

jemeter保持的会话数 jmeter session_正则表达式


② 添加查询请求并配置

jemeter保持的会话数 jmeter session_数据_02


③ 运行并察看结果树

可以看到登录成功,查询未成功。

jemeter保持的会话数 jmeter session_正则表达式_03

jemeter保持的会话数 jmeter session_数据_04


④ 获取JSESSIONID行

在"察看结果树"中查看登录的响应数据:

jemeter保持的会话数 jmeter session_jemeter保持的会话数_05

2. 关联

接口响应结果,通常为HTML、JSON格式的数据。对于HTML的响应结果的提取,可以通过正则表达式、边界提取器来提取。对于JSON格式的数据,可以通过正则表达式、JSON Extractor、BeanShell 来提取。

方法一:正则表达式提取器

① 添加正则表达式提取器

右键点击“HTTP Request”–>“添加”–>“后置处理器”–>“正则表达式提取器”

jemeter保持的会话数 jmeter session_HTTP_06


② 配置正则表达式:

jemeter保持的会话数 jmeter session_Jmeter_07


正则表达式提取器参数详解:

引用名称:变量名,获取到的值存储到这个变量中。

正则表达式:通过在"察看结果树"中找到的JSESSIONID行,将JSESSIONID的值替换为正则表达式,即可匹配到JSESSIONID的值并存入变量中。

常用的正则表达式操作符:

操作符

说明

*

匹配前面的子表达式零次或多次

+

匹配前面的子表达式一次或多次

.

匹配除换行符 \n 之外的任何单字符

?

匹配前面的子表达式零次或一次,或指明一个非贪婪限定符

\

将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符

具体可以查看:[https://www.runoob.com/regexp/regexp-syntax.html]
模板:从正则表达式中获取的值为多个,模板表示从正则表达式结果引用的样式。jemeter保持的会话数 jmeter session_jemeter保持的会话数_08代表正则表达式结果的全部,jemeter保持的会话数 jmeter session_正则表达式_09表示第一个正则表达式,如果有2个正则表达式,写为jemeter保持的会话数 jmeter session_正则表达式_09jemeter保持的会话数 jmeter session_正则表达式_11
匹配数字:0代表正则表达式结果组中随机,1代表第一个,-1代表全部。
缺省值:没匹配到就用缺省值。

方法二:边界提取器

① 添加边界提取器

右键点击“HTTP Request”–>“添加”–>“后置处理器”–>“边界提取器”

jemeter保持的会话数 jmeter session_数据_12


② 配置边界提取器

jemeter保持的会话数 jmeter session_Jmeter_13


边界提取器参数详解:

引用名称:变量名,获取到的值存储到这个变量中。

左边界、右边界:通过在"察看结果树"中找到的JSESSIONID行确定左右边界,JSESSIONID值左边部分为左边界,JSESSIONID值右边部分为右边界。

例,登录后返回数据为:”Set-Cookie: JSESSIONID=7B27D1C4A7223C3A67A49468A7CFA505; Path=/git; HttpOnly"。

这里左边界为:Set-Cookie: JSESSIONID=,右边界为:; Path=/git; HttpOnly

匹配数字(0表示随机):0代表随机,1代表第一个,-1代表全部。

缺省值:没匹配到就用缺省值。

方法三:Json 提取器

由于测试的登录接口需要关联的JSESSIONID是在响应头中返回,不是json格式,这里以新增-删除为例。新增后会自动生成一个id,删除时需要根据新增接口返回的id(JSON格式)来删除,这时候就可以通过json提取器来关联,将id保存成变量供删除请求调用。

① 在察看结果树响应数据中找到需要关联的值。

jemeter保持的会话数 jmeter session_正则表达式_14


② 添加Json提取器

右键点击“HTTP Request”–>“添加”–>“后置处理器”–>“Json提取器”

jemeter保持的会话数 jmeter session_Jmeter_15


③ 配置json提取器

jemeter保持的会话数 jmeter session_HTTP_16


Json提取器参数详解:

Names of created variables:数据存储的变量名称,使用$ {variable name}引用它。

JSON Path Expressions:JSON路径表达式。根据第①步中可以看到路径为$ .data.List.projectid($.是固定写法)

Match No. (0 for Random):匹配数字(0表示随机),1代表第一个,-1代表全部。

Compute concatenation var(suffix_ALL):将匹配到的所有值保存,名为“变量名_ALL”。

Default Values:默认值,如果JSON 路径表达式未能匹配到值,将使用该默认值。

④ 在删除的请求里关联提取的参数

jemeter保持的会话数 jmeter session_数据_17


⑤运行并察看结果树

可以看到请求报文中使用了提取到的参数值。

jemeter保持的会话数 jmeter session_数据_18

3. 添加cookie管理器

① 给查询接口添加HTTP Cookies管理器

右键点击“HTTP Request”–>“添加”–>“配置原件”–>“HTTP Cookies管理器”

jemeter保持的会话数 jmeter session_数据_19


② 配置cookie管理器

jemeter保持的会话数 jmeter session_正则表达式_20


(也可在线程组下添加HTTP cookie管理器,什么都不用填,可以单个线程共享)

③ 运行并察看结果树

可以看到查询接口返回数据,关联成功。

jemeter保持的会话数 jmeter session_jemeter保持的会话数_21