JMeter多用户token使用
Posted sysu_lluozh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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使用的主要内容,如果未能解决你的问题,请参考以下文章