实际用户场景:用户登录小游戏,可进行各种操作,例如查看排行榜,玩游戏,进行留言等,现在需要对三个接口查看排行榜/玩游戏/留言进行压测,有两种压测方案:
方案一:将登录接口和这三个接口放在一个线程组,也就是每个用户登录后,做三个操作后退出
方案二:将所有用户登录后不退出,随机抽取用户做这三个操作
显然,方案二更符合实际场景,那么问题来了,方案二用Jmeter怎么写这个压测脚本呢?思路就是先在一个线程组里,单独保存为login.jmx文件,调用登录接口,例如500个用户登录,将接口返回的500个token值提取出来,存入csv文件中,命名为tokens.csv,然后再开一个线程组,单独保存为game.jmx文件,调用排行榜/玩游戏/留言接口,这三个接口的token值可以在tokens.csv中获取,来模拟不同用户登录的场景。每次测试前,先运行登录接口的脚本获取token值,再运行排行榜/玩游戏/留言板等接口脚本,模拟不同用户进行操作。
下面主要介绍下调用登录接口,将返回的token值写入toekns.csv文件中的过程:
1、主要用到了正则表达式提取器和BeanShell PostProcessor后置处理器
正则表达式提取器,用来提取接口返回的token值,返回的接口信息:
2、将提取的token值存入csv文件中,需要用到BeanShell PostProcessor后置处理器,脚本如下:
代码以及注释:
FileWriter fstream = new FileWriter("/root/apache-jmeter-4.0/bin/tokens.csv",true);
//这里结尾的true表示续写,即数据每次写入都在最末行续上;默认值为false:每次跑这个脚本都会覆盖原有内容再写入
//路径可以换成windows机器的本地路径例如:D:\\dlink\\tokens.csv,本次是远程启动,直接写在远程服务器上了
BufferedWriter out = new BufferedWriter(fstream);
out.write(vars.get("token")+","+" ");
//将提取出来的token写入,注意加上 换行
out.close();
注意:每次运行之前,需要在本地或者远程启动服务器删除tokens.csv文件,否则文件会一直覆盖,保存原来过期的token值,或者每次执行脚本之前,将保存的文件tokens.csv重命名
PS:全网同名,转载请注明出处?