因为登录是最先发生的一个动作,所以这里把登录接口放在setUp线程组中,这样每次执行一个测试计划都会先去执行登录的动作获取token。
右键测试计划,添加线程组(用户),选择setUp线程组,右键新加的这个线程组,添加取样器-http请求如下:(红色方框中的具体参数按照自己项目中的填写)
根据登录接口返回的信息,试图提取到里面的token字段的值,所以想到了匹配(这不是废话嘛)我们项目的登录接口返回的消息体格式如下:
{
"resultData":{
"loginDate":"2021-09-10 10:55:09",
"userName":"Admin",
"token":"xxxxxxxxx",
"loginName":"Admin"
}
}
分析 (看)了一下上述消息体,发现是JSON格式的(真机智)
于是我第一反应肯定是想到了Jmeter有没有什么能够直接提取到JSON里字符串的内容的,比如:resultData.token
有
在上一步中的登录http请求上右键,选择添加后置处理器-JSON提取器:
Names of created variables:设置的参数名称,相当于变量名,后续其他地方使用${name}
引用该参数
JSON Path expressions:可以匹配到想要字段值得JSON表达式,JSON第一层元素的值使用$.key
匹配,如:
$.resultData
JSON第二层的元素值继续使用.key
匹配:
$.resultData.token
注:
1.JSON提取器还可以提取多个参数,使用;
分隔即可
2.JSON提取器还可以提取JSON中的列表中的元素,使用$.key[0]
类似这种即可
Match No.(0 for Random):匹配数字,0代表随机匹配,1代表匹配第一个结果,-1代表匹配所有结果
Default values:未匹配到时参数的默认值,可以选择null
注:默认值上一个我个人没用到哈,不讲了(其实是不太知道)
如果你的返回值不是JSON,也可以使用正则表达式提取器,创建方法和JSON提取器一样,就不多说了。建好之后如图:
看得出来,参数也和JSON差不多,只是JSON Path Expressions变成了正则表达式,在这里填入相应的正则表达式即可。(不要问为什么我不举例了,因为我正则表达式玩的不溜,每次都要百度)
上述步骤之后,我们已经将token放入${token}
变量中啦,但是这时候的${token}
仅仅是一个局部变量,在登录这个线程组运行结束之后他就消失啦,如果你将其他接口的http请求放在该线程组之下的话呢,那你就可以直接使用了(不推荐,毕竟测试其他接口线程数一般设置为多个,但其实登录一次就够了)
所以这里一般将其他接口请求放在另一个线程组,可以自由设置自己的线程数了。
那么我们在登录请求右键添加一个后置处理器-BeanShell PostProcessor:
添加好之后,红方框中参数需要填写之前我们设置的参数名称:${token}
脚本中填写:${__setProperty(newtoken,${token},)}
,(别忘了后面有个逗号)将token
值赋给newtoken
,在其他线程组中可以使用newtoken
这个变量名
在其他线程组的http请求下,添加配置元件-Http信息头管理器,众所周知,信息头管理器就是管理请求的header的,所以token等内容放在这里:
好了!然后执行你的测试计划就可以~
有时候项目有不同的环境,想测试不同环境的接口们,但不想每个接口都去改服务器地址之类的信息,可以在最顶层的测试计划下添加一个配置元件-HTTP请求默认值:
填好协议、服务器名称或IP以及端口号,然后下面的所有接口下http请求对应的地方可以不填,就可以只改这一个地方,下面所有的都改啦!