本文为在霍格沃兹测试开发学社中学习到的一些技术,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~
性能课程-电商压测实战

结合课程的学习,最近在梳理团队小伙伴写的jmeter压测脚本时,发现大家都是在用一个用户(token)来执行多个线程的压测场景,用 用户登录商城下单 这个业务场景来解释:一个已登录用户的token,启动100个线程,这100个线程都是这个用户在不停的下单。
乍一看,没有问题,能够得到下单的TPS,但是仔细一想,这样的脚本场景缺不是真实的业务场景,真实业务场景是不同的用户在不停的下单。为了能够更切合真实的用户场景,应该模拟多个用户而不是一个用户。

配置文件里面有两个用户

运行结果:

addOrder_1 使用 Login_1 生成的token
addOrder_2 使用Login_2 生成的token
登录用户为2 线程数量设置为3,如下图:

预期结果:线程3和线程1用的是同一个用户登录,若线程3登陆成功,会导致线程1后续的请求都报token失效。
实际结果:

线程1登录成功,第一次addorder也执行成功,在执行第二次addorder时,线程3登录成功,导致线程1的token失效,所以第二次addorder请求失败,报token已失效。
肯定不能在压测过程中,让token失效,那么该如何解决这个问题呢?
登录用户不够时,肯定是需要轮询用户,轮询用户登录会拿取新token导致原来的token失效,影响正在压测的脚本,那么就不轮询用户登录,而是直接轮询登录之后的token。
第一步:用setUp线程组先把所有的用户都登录,把token写入到一个txt文件中

import java.io.File;
import java.io.InputStreamReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
File tokenFile = new File("token.txt");
writer = new FileWriter(tokenFile,true);
BufferedWriter out = new BufferedWriter(writer);
out.write("${tokens}\r\n")
out.flush();
out.close();
配置文件读取txt数据

看执行结果:
