JMeter测试JWT的接口(本地保存接口)
流程介绍
最近在做一个带有Spring Security和JWT权限验证的秒杀系统,写的差不多准备压测一下,因为与其他接口不同,需要在请求头中带有token才能验证,所以必须要先生成Token再登录,
本文分为三个部分
- 用户注册
- 用户登录生成Token
- 带着Token去访问秒杀接口
用户注册
这部分很简单,写一个CSV文件然后去读就可以
先添加一个线程组,然后添加一个Http请求,再添加CSV数据管理。因为数据是Json形式,还要请求头指定Content-Type为application/json(这一步在下面都需要添加)。其他的报告和结果树可以随意。
总的结构如下
CSV数据设置
Http请求
请求头
然后请求就可以了,数据库应该就有数据了
用户登录并生成Token
这部分也是要去读CSV文件,与上面的一样。(CSV数据设置和请求头)这里不贴了,结构如下(JSR223那个是我用来log的):
Http请求
然后是重要的Token提取,服务器返回的是是这样的数据
然后我们添加一个正则表达式提取器去Response Header里提取,这里我的名字叫做Token提取,并给这个提取出来的这个变量取名叫做BEARER
然后再把这个Token保存一下。这里说明一下为什么需要单独保存下来,因为如果跨线程组,这个Token的变量是读取不到的,也有可能是我不会。如果写在同一个线程组下,登录和注册是共用线程的(这里我个人不确定,有高手可以会的话可以评论),达不到我们想要压测的目的,所以我只能“曲线救国”把Token保存下来,再用单独的线程组去访问秒杀的接口。
添加一个保存Token的BeanShell后置处理程序,并添加如下代码:
token=vars.get("BEARER");
f=new FileOutputStream("C:/Users/Louis/Desktop/token.csv",true);
p=new PrintStream(f);
this.interpreter.setOut(p);
print(token);
f.close();
然后运行就在指定的目录生成Token了
这里我把注册和登录两个线程组放在一个测试计划Test Plan里
需要注意的是,有几个地方需要修改:
首先是测试计划里,需要修改独立运行每个线程组
其次是CSV管理器需要设置线程共享模式为当前线程组
生成的Token如下
带着Token去访问秒杀接口
这部分和注册部分很像,读取CSV文件,再在请求头管理器添加Token就行,这里直接贴图
Jemter文件会上传到Github,先留坑
这篇博客主要是记录一下自己学习的过程,还有就是记录一下这个问题,希望以后能够了解到怎么样将上面三个步骤结合在一起写,一次运行就行