一、关联
关联是Jmeter工具中非常重要的一个技术。因为在测试过程过有些数据是经常发生变化的,要获取并使用这些数据,就要使用关联。
比如:用户登录后,session信息都不同,有些操作要使用session,就需要将这个动态的信息保存下来。 还有经常遇到的场景,第二个请求提交的参数要从第一个请求的返回数据中获取。
今天我们就来解决:将请求A响应数据的部分内容提取出来,保存成变量供后续请求使用。
二、目标
需求:我们这边有一个注册接口、一个登录接口,登录接口中的用户名参数是注册接口注册的用户。
环境介绍:
1、注册的用户名、密码参数化,使用用户参数做的参数化,用户名称ruser的参数是通过函数助手__RandomString来生成的,(5个随机数,取值范围0~9,a~z),密码固定不变,方便登录。
2、因为接口提交的请求格式是application/json,所以请求参数写在消息体数据。
3.通过JSON表达式测试提取name值。
在查看结果树中,查看注册的响应数据,然后把查看方式改成JSON Path Tester,最后编写JSON表达式测试提取响应数据中的name值。
通过 $.name 表达式可以提取到响应数据中name的值。
三、实现上下文关联(JSON提取器)
1.右击 注册->添加->后置处理器->JSON提取器
2.配置JSON提取器
JSON提取器说明:
1) Name of created variables:变量名称,引用时格式${token}
2) JSON path expressions:步骤2中获取的表达式
3) Match No:可以填三个值 (0:随机 1:第一个 -1:全部)(获取到的值有多个时,选择其中的某部分)
4) compute concatenation var(suffix_ALL): 是否统计所有,即将获取到的所有值都保存(目前用到的不勾选)
5) default values:默认值
3.在登录接口中使用JSON提取器中的变量名称进行上下文关联。
登录接口参数中配置变量。
4.最后运行,查看注册和登录的name,是一样的,登录响应显示登录成功了。说明我们做的上下文关联成功了。
当然使用JSON提取器只适合于响应数据是json格式的数据,如果不是json格式的数据,我们也可以使用正则表达式进行数据的提取。
四、实现上下文关联(正则表达式提取器)
要使用正则表达式提取器,首先得知道什么是正则表达式,请自行查看《正则表达式》。
1.右击 注册->添加->后置处理器->正则表达式提取器
2.通过正则表达式测试提取name值。
在查看结果树中,查看注册的响应数据,然后把查看方式改成RegExp Tester,最后编写正则表达式测试提取响应数据中的name值。
通过 "name":"(.*?)","pwd"表达式可以提取到响应数据中name的值。
"name":"相当于LR左边界
(.*?)括号里.*?为正则表达式
","pwd"相当于LR右边界
3.配置正则表达式
正则表达式提取器说明:
Apply to:应用范围
要检查的响应字段:样本数据源。
引用名称:其他地方引用时的变量名称,我这里写的zzname,可自定义设置,引用方法:${引用名称}
正则表达式:数据提取器,()括号里为你要获取的的值。 "name":"( 相当于LR左边界 ),","pwd"(相当于LR右边界)。而括号里 .*? 为正则表达式,用来匹配所需要获取的数据
模板:用于从找到的匹配项创建字符串的模板。这是一个带有特殊元素的任意字符串,用于引用正则表达式中的组。引用组的语法是:' $ 1 $ '引用组1,' $ 2 $ '引用组2,等等。$ 0 $引用整个表达式匹配的内容。
匹配数字:正则表达式匹配数据的所有结果可以看做一个数组,匹配数字即可看做是数组的第几个元素。-1表示全部,0随机,1第一个,2第二个,以此类推。若只要获取到匹配的第一个值,则填写1
缺省值:匹配失败时的默认值。可以不写。若需用于后续逻辑判断,可简单写为 ERROR。
4.在登录接口中使用正则表达式提取器中的变量名称进行上下文关联。
登录接口参数中配置变量。
5.最后运行,查看注册和登录的name,是一样的,登录响应显示登录成功了。说明我们做的上下文关联成功了。