Jmeter 跨线程组动态获取token

Jmeter 跨线程组动态获取token

  • 获取token
    • 创建setUp线程组
    • 创建提取器提取token(JSON提取器&正则表达式提取器)
      • JSON提取器
      • 正则表达式提取器
    • 将token设置为全局变量
  • 使用token
  • 废话一句

Jmeter,测试性能的王者!(好吧,只是我最近用到,具体有没有别的更好的工具我也不知道)
在Jmeter中可以设置线程组来测试接口的并发效果balabala的,在实际项目中接口调用基本上都是需要使用token进行身份认证的。如果测试每个接口都单独登录获取token真的很麻烦呀!

获取token

创建setUp线程组

因为登录是最先发生的一个动作,所以这里把登录接口放在setUp线程组中,这样每次执行一个测试计划都会先去执行登录的动作获取token。

右键测试计划,添加线程组(用户),选择setUp线程组,右键新加的这个线程组,添加取样器-http请求如下:(红色方框中的具体参数按照自己项目中的填写)

创建提取器提取token(JSON提取器&正则表达式提取器)

根据登录接口返回的信息,试图提取到里面的token字段的值,所以想到了匹配(这不是废话嘛)我们项目的登录接口返回的消息体格式如下:

{
    "resultData":{
        "loginDate":"2021-09-10 10:55:09",
        "userName":"Admin",
        "token":"xxxxxxxxx",
        "loginName":"Admin"
    }
}

分析 (看)了一下上述消息体,发现是JSON格式的(真机智)

于是我第一反应肯定是想到了Jmeter有没有什么能够直接提取到JSON里字符串的内容的,比如:resultData.token

JSON提取器

在上一步中的登录http请求上右键,选择添加后置处理器-JSON提取器

Jmeter 跨线程组动态获取token_第1张图片
如下图:

红框中的几个参数:

  • 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}变量中啦,但是这时候的${token}仅仅是一个局部变量,在登录这个线程组运行结束之后他就消失啦,如果你将其他接口的http请求放在该线程组之下的话呢,那你就可以直接使用了(不推荐,毕竟测试其他接口线程数一般设置为多个,但其实登录一次就够了)

所以这里一般将其他接口请求放在另一个线程组,可以自由设置自己的线程数了。

那么我们在登录请求右键添加一个后置处理器-BeanShell PostProcessor

添加好之后,红方框中参数需要填写之前我们设置的参数名称:${token}
Jmeter 跨线程组动态获取token_第2张图片
脚本中填写:${__setProperty(newtoken,${token},)},(别忘了后面有个逗号)将token值赋给newtoken,在其他线程组中可以使用newtoken这个变量名

使用token

在其他线程组的http请求下,添加配置元件-Http信息头管理器,众所周知,信息头管理器就是管理请求的header的,所以token等内容放在这里:

  • Content-Type:不用介绍了吧?
  • 认证头:key值可以去自己项目前端按F12去看,有很多种:
    Jmeter 跨线程组动态获取token_第3张图片 value值填${__P(newtoken,)},(别忘了后面有个逗号)

好了!然后执行你的测试计划就可以~

废话一句

有时候项目有不同的环境,想测试不同环境的接口们,但不想每个接口都去改服务器地址之类的信息,可以在最顶层的测试计划下添加一个配置元件-HTTP请求默认值

填好协议服务器名称或IP以及端口号,然后下面的所有接口下http请求对应的地方可以不填,就可以只改这一个地方,下面所有的都改啦!

你可能感兴趣的:(打工人的学习记录,jmeter)