【JMeter】多用户token使用

在测试时,经常有模拟用户登录,获取用户token后再去请求接口的场景
性能中,需模拟多线程并发测试多用户产生多个token,每个用户使用各自的token进行接下来的请求

多用户获取多token并在接下来的业务接口请求中使用的场景非常多,接下来介绍的是其中一种通过将获取的token信息写入csv文件后再去读取的方式

一、场景接口

只有两个接口,一个是登录获取token的登陆接口,一个是使用token进行请求的业务接口

1.1 登录接口

请求:

POST http://localhost:5007/security/lluozh/login
Content-Type: application/json

{
	"username":"lluozh001",
	"password":"123456"
}

响应:

{"code":200,"data":"lluozh001-token","msg":"ok"}

1.2 业务接口

请求:

POST http://localhost:5007/security/lluozh/do?username=lluozh002
Content-Type: application/json
token: lluozh001-token

响应:

{"code":200,"data":"lluozh001-token","msg":"ok"}

服务接口简单的代码实现

@controller.route('/security/lluozh/login', methods=['POST'])
def lluozh_token():
    parser = RequestParser()
    parser.add_argument("username", location="json", required=True)
    parser.add_argument("password", location="json", required=False)

    req = parser.parse_args()
    token = req.get('username')+'-token'
    return make_response(jsonify(code=200, msg="ok", data=token), 200, '')


@controller.route('/security/lluozh/do', methods=['POST'])
def lluozh_do():
    return make_response(jsonify(code=200, msg="ok", data=request.headers.get('token')), 200, '')

二、登录接口处理

登录接口属于预请求,可以选择在setUp线程组中处理

2.1 csv账号文件

需要准备一个csv文件,里面用来存放需要登录的用户名和密码
在这里插入图片描述

2.2 csv数据文件获取

接下来在jmeter中配置csv文件,定义了两个变量username和pwd
在这里插入图片描述

2.3 登陆接口请求

然后配置登录的HTTP请求:
在这里插入图片描述

2.4 提取token信息

提取登陆成功后的token信息
在这里插入图片描述

2.5 access_token字段值被覆盖写入

由于有多个用户进行登录,但是这个提取操作每次都会把token赋值到access_token这个变量上面,是覆盖的操作
即每登录一个用户,这个access_token的值就会是最后一个登录的用户的token

那么需要把这些token存到一个地方,然后业务接口去这个地方取数据

2.6 获取的access_token写入csv文件

其实如果没有用户登录的操作,直接把token放到csv文件中,然后让jmeter循环使用准备好的token信息也是可以的
那么可以登陆后获取到token后,把token写到csv文件,这需要在登录接口后面加一个后置的处理
在这里插入图片描述
代码如下:

String p1 = System.getProperty("user.dir");
String p2 = System.getProperty("file.separator");
String p3 = "user_token.csv";
String path = p1 + p2 + p3;

FileWriter fileWriter = new FileWriter(new File(path), true);
BufferedWriter writer = new BufferedWriter(fileWriter);
writer.append(vars.get("username")+","+vars.get("access_token")+"\n");
writer.close();
fileWriter.close();

可以实现把用户名和提取到的access_token写进csv文件中,这个文件所在的位置为jmeter的目录

修改setUp线程组的属性,把循环次数改成3。可以循环读取csv文件中的3个用户执行3登录

三、业务接口处理

业务接口要放到正常的线程组里面,独立于setUp线程组

3.1 csv数据文件获取

登录后会有一个csv文件,所以首先要做的csv文件读取的配置
在这里插入图片描述
上面的截图用的是${__P(user.dir,)}${__P(file.separator,)}user_token.csv这个文件路径,这个在本地环境的Jmeter是可以通过的
也可以忽略前面的路径,直接填写user_token.csv即可,得到的文件路径是一样的,一个是绝对路径一个是相对路径

3.2 业务接口请求

然后配置业务的HTTP请求
在这里插入图片描述

3.3 配置header信息

需要配置header信息,将token在header中配置
在这里插入图片描述

3.4 执行jmx脚本

试跑两次,可以发现业务请求接口的token请求头每次都在交替变化,这个是符合预期
在这里插入图片描述

3.5 追加重复写入csv文件

但是发现生成csv文件里面的数据重复,没有自动清理掉上一次产生的数据。如果产生的token 过期,那么等于使用过期的token
在这里插入图片描述

3.6 执行脚本后删除csv文件

需要增加tearDown线程组,每次跑完脚本把这个文件删除掉
在这里插入图片描述
代码:

String p1 = System.getProperty("user.dir");
String p2 = System.getProperty("file.separator");
String p3 = "user_token.csv";
String path = p1 + p2 + p3;

log.info("准备删除文件:" + path);

File file = new File(path);
if (!file.exists()) {
  log.info("删除文件失败:" + path + "不存在!");
} else {
  file.delete();
}

3.6 执行并发操作

重复并发执行写好的jmx文件
在这里插入图片描述
执行结果满足需求
即可以读取登陆后的token进行并发操作

JMeter是一种功能强大的性能测试工具,能够用于模拟并测试各种网络协议的性能。当我们需要对带有token验证的接口进行测试时,可以采取以下步骤: 1. 创建测试计划:在JMeter中创建一个新的测试计划,并添加一个线程组。 2. 添加HTTP请求:在线程组下添加一个HTTP请求,设置请求的URL、请求方式等信息。同时,我们需要在请求的Header中添加一个字段用来存放token信息。 3. 添加HTTP Header管理器:在HTTP请求下添加一个HTTP Header管理器,用于设置token字段的值。在管理器中,我们可以添加Header名称和值,将token值设置为请求所需的验证信息。 4. 添加监听器:为了实时监控测试结果,我们可以在测试计划中添加一个合适的监听器,例如聚合报告、查看结果树等。监听器可以帮助我们分析接口请求的结果和性能指标。 5. 设置线程数和循环次数:根据需求设置线程数和循环次数,模拟多个用户同时访问接口,并重复执行指定次数。 6. 运行测试计划:保存并运行测试计划,JMeter将自动发送HTTP请求,并记录返回结果。 7. 分析测试结果:在监听器中查看测试结果,分析接口请求的响应时间、错误率等性能指标,以便进行优化。 需要注意的是,token的获取通常是通过登录接口获取,在执行接口测试之前,我们需要先通过登录接口获取到token,并存储在一个变量中,然后在其他接口的请求中使用该变量的值作为token。 通过以上步骤,我们可以使用JMeter对带有token验证的接口进行测试,以保证接口的性能和稳定性。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sysu_lluozh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值