前言:
黑马点评的课程视频并没有讲如何生成1000个测试用户和相应的token,而这又是测试并发问题所必要的,导致我们很难亲手去验证结果。所以在这篇文章我讲下如何去解决这个问题,虽然过程比较曲折(没啥测试基础),但好在最后还是顺利解决了。
目录
1.创建1000个测试用户
1.1 创建测试路径
首先我们在Controller包下创建一个新类UserControllerTest(请原谅我的不正规):
这个接口用于直接调用usermapper生成相应用户数据
下附代码:
@RestController @RequestMapping("/userTest") @Slf4j public class UserControllerTest { @Resource private IUserService userService; @PostMapping("/resigiter") public Result resigiter(@RequestBody User user) { userService.createUserWithPhone(user.getPhone()); return Result.ok(); } }
在IUserService类中生成相应接口
这个方法本身在UserServiceimpl类下就有,不用自己实现,加个@override重写注释,把private改为public就可以拿来用了。
最后记得要排除在loginInterceptor拦截器之外
1.2 jmeter生成相应用户
我使用的1000线程在300s内启动生成,电脑不好的可以100个线程,循环10次生成
相应的路径,请求方式,IP端口等填好(记得不要填错)
下面的请求参数选择Body Data,写好json式子:
它的意思是生成139开头的11位随机数字
{ "phone": "139${__Random(10000000,99999999,)}" }
最后,请求头加上就可以测试了。
name:Content-Type ,Value:application/json
测试完成没问题可以查询数据库。
数据库直接查询可能显示不出来,显示不出来的使用分页查询
成功的生成了1000个用户数据
2. 使用这1000个测试用户生成相应的token
2.1 修改Java代码
给UserServiceimpl类中login方法,关于验证码校验的功能去掉
注释完就可以测试下,随便输入个验证码,看是否登录成功
可以看到我随便输入的验证码登录成功了
2.2 导出tb_user表的csv文件
导出tb_user表的csv文件
将其命名为tb_user.csv文件,记得只留手机号一行数据,并且phone字段也要去掉,只留数据
2.3 使用jmeter生成
打开jmeter
因为要生成1000个token,我就设了100组线程,分10次循环,时间方面给的是100s
在thread group下创建一个CSV Data Config
其中filename写你的那个csv文件路径(后面browse选就行)
file encording选UTF-8
Vairable Names : 填写phone
其他的保持默认
创建http请求
路径啥的配好(/user/login)
选择Body Data写好下面的json式子
因为验证码写什么都行,我们这固定写成111了
{ "phone" : "${phone}", "code" : "111" }
请求头记得要带上
接着在http请求下创建一个JSON Extractor
这边选项一定要选Main sample only,我就是这在卡了两个小时
variable写啥都行(跟后面代码对的上就行,我写的auth_token)
然后因为返回结果是这种格式的:
"success":true,"data":"c13d39a2..."}
所以在JSON path这我们写$.data
(这个不能乱写)
然后在http请求下创建一个BaseShell PostProcessor
写好如下代码,auth_token要跟前面对上
下附代码:
// 读取变量(如果不存在,默认值设为 "NULL") String phone = vars.get("phone") != null ? vars.get("phone") : "NULL"; String token = vars.get("auth_token") != null ? vars.get("auth_token") : "NULL"; // 确保目录存在 new File("D:/JMeter_Results").mkdirs(); // 写入 CSV 文件 try { FileWriter fw = new FileWriter("D:/JMeter_Results/tokens_audit.csv", true); fw.write(phone + "," + token + "\n"); fw.close(); log.info("写入成功: phone=" + phone + ", token=" + token); } catch (Exception e) { log.error("写入失败: " + e.getMessage()); }
这两个东西就不用多说了,创建好
另外说一点:
redis方面,如果跟我一样用的是这玩意的话(ARDM),要更改下设置,他默认只会显示最多500个字段
Load number改为1000,点击ok就行了
2.4 测试结果
运行jmeter,
完毕后可以看到在新生成的tokens_audit文件中,有两行数据,一行是phone,一行是token
redis中也储存了对应的数据
这边建议在运行前可以先拿一个线程测试下(循环别勾)
如果生成的文件有相应的数据的话,在正式进行1000个用户测试也不迟
如果有误,在jmeter.log文件中会生成错误日志,可以去看看是啥问题。
最后:
今天的分享就到这里。如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!(๑`・ᴗ・´๑)