背景:在实际的工作中,我们会对很多个接口进行测试,而大多数请求的接口都需要token作为请求头参数,如果每一个接口请求时都去登录一次来获取token进行使用的话,操作太繁琐也不符合实际的操作场景,有一种办法可以解决这个问题:将登录时返回的token提取作为全局变量存储起来给每个需要token的接口使用,我们以创建单据的接口为例,操作步骤如下:
我们之前已经以登录接口为例,成功返回了token数据,此时我们就需要将返回的token数据作为全局变量存储起来,提取方式有两种:
1.1使用JSON提取器提取,右键->添加->后置处理器->JSON提取器
1.1.1 建好JSON提取器之后我们就可以填写参数,参数的提取:$.datd.层级关系,引用:${变量名}如图所示:
1.2 使用正则表达式提取,右键->添加->后置处理器->正则表达式提取器
1.2.1 添加正则表达式之后,我们需要设置变量名称和正则表达式,如图所示,如有不懂可以搜索正则表达式理解具体匹配规则
2. 将token提取出来之后,我们需要设置一个全局变量将token存储起来,使用BeanShell后置处理程序,右键->添加->后置处理器->BeanShell PostProcessor
2.1添加之后,我们需要设置一些参数
3. 添加创建单据的请求,同我们添加登录接口步骤一致:
3.1 开始填写创建单据所需要的参数: 3.2.1 因为授权信息是放在请求头里的,所以我们需要添加一个信息头管理器,并且把我们设置的全局变量拿过来使用:
3.3 运行脚本即可看见运行成功
以上就是我们提取token设置为全局变量供其他请求使用的全部过程了,同时这里还有一个小知识点补充一下:关于HTTP信息头管理器
HTTP信息头管理器支持合并&覆盖
1. 头部管理器允许添加或覆盖HTTP请求头, JMeter支持多个头部管理器;
2. 如果存在多个头部管理器, 头部信息会合并,合并顺序按照作用域的优先级进行;
3. 如果要合并的头部信息与现有的头部名称匹配, 它将替换先前的头部信息;
4. 头部的信息值为空不会删除现有的头部信息, 而只是替换其为空值;
5. 同一作用域下,不论添加多少个头部管理器, 只会取第一个管理器的值, 不合并;
如图有ABCD四个信息头管理器
1. 登录接口下的头部管理器C会与线程组B和测试计划下的头部管理器A合并,若头部名称相同则C会替换B和A的值,作用域:登录接口的HTTP取样器
2. 线程组下的头部管理器B会与测试计划下的头部管理器A合并, 若头部名称相同则B会替换A的值,作用域:该线程组下的HTTP取样器
3. 测试计划下的头部管理器A, 作用域:测试计划下的所有线程组的HTTP取样器
4. 同一线程组下作用域完全重叠的管理器B和D, 在该线程组下的HTTP请求头部只会取管理器B的头部信息, 不取管理器D的头部信息
根据HTTP信息头管理器的作用域,我们可以把不同的请求头数据放在不同的位置(例如把所有接口公用的字段放在测试计划下,把同个接口公用的token放在线程组下),以此达到优化脚本的目的。