在测试时,常遇到需要模拟多用户并发的场景。
例如:模拟100个用户同时登录(需要100个账号,并且同时登录系统)
jmeter具体操作步骤如下:
文章目录
一、100个真实的用户
1、一个账号模拟100虚拟用户同时登录和100账号同时登录
- 区别 (1)1个账号100个人用,同时登录; (2)100个人100个账号,同时登录。
- 相同 (1)两个都是100人同时登录,具体看项目需求。
2、账号来源
(1)利用“注册”或“创建”账号接口,创建100个用户;
(2)“查询”接口,保存100个账号的账号、密码到一个文件。
3、提取100个账号、密码的文件
(1)jmeter脚本整体布局
线程组(一级)---->请求默认值、请求头、http请求、察看结果树(二级)----->正则表达式、BeanShell 后置处理程序(三级)。
HTTP请求默认值:是存放系统通用ip的位置(协议:http; 服务名称或ip:127.0.0.1);
HTTP信息头管理:接口请求之前需要带的信息,部分接口不带不能运行(Authorization、Content-Type、Accept、User-Agent),例如必须带的token就在信息头中存放;
登录请求:请求方法、请求路径、消息体;正则表达式提取token
创建请求:请求方法、请求路径、消息体;参数化用户名,创建多个用户;
查询账号:请求方法、请求路径、消息体;正则表达式提取用户名、密码;BeanShell 后置处理程序存储返回值到文件中
(2)查询请求中的正则表达式和BeanShell 后置处理程序
- 正则表达提取----->获取想要的字段内容 (详看:https://blog.csdn.net/belief_009/article/details/123051440)![在这里插入图片描述](https://img-blog.csdnimg.cn/12372508012a4b8a8384bd7a722ad5f6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiJ5Y2D6Iqx54Gv,size_20,color_FFFFFF,t_70,g_se,x_16)
- BeanShell 后置处理程序---->将提取到的字段内容存储在指定文件4.csv中
FileWriter fs=new FileWriter("D://近期//4.csv",true);
BufferedWriter out =new BufferedWriter(fs);
out.write(vars.get("username")+","+vars.get("id"));//username、id为正则定义名称
out.write(System.getProperty("line.separator"));//相当于"\n"自动换行
out.close();
fs.close();
- 线程组线程数设置数目等于提取到的条数,执行脚本得到100个用户的账号和密码
二、100个用户同时登录
1.设置线程组
- 线程数:并发用户数
- Ramp-up时间(秒):启动所有线程所需要的时长 (1)0---->代表同时并发; (2)100---->线程数100,时间100秒。代表每隔1s启动一个线程(100/100=1)
- 循环次数:Loop Count (1)默认值是1; (2)2---->线程数100,循环次数2。代表启动200个线程; (3)勾选“永远”,会一直执行,需要人工停止,一般配合调度器使用。
补充:同步定时器:
(1)作用:阻塞线程,直到指定的线程数量到达后,在一起释放,可以瞬间产生很大的压力;
(2)使用同步定时器时,循环次数要勾选为永远
2.模拟多用户登录
- 线程组下添加----->CSV 数据文件设置 将存储用户账号、密码的文件引入,并命名变量名称,在登录时调用。
- 调用,传参${name} 注释:本系统账号密码一致,所以只需要调用一列值
/api/v1/oauth/token?username=${name}&password=${name}&scope=all&grant_type=password
3.执行测试,查看结果
100用户同时登录
版权归原作者 三千花灯 所有, 如有侵权,请联系我们删除。