- 前言
- 一、确定需求
- 二、编写代码
- 1.引入库
- 2.编写代码
- 总结
前言
最近在学黑马程序员的redis课程中,老师要模拟进行1000个用户同时秒杀优惠卷的压力测试,但是本菜鸟完全不知道如何生成1000个用户的token,一直在想这个脚本该在哪里写,又该怎么写。然后灵光一现!,之前有学过springboot测试的内容,那么我们可以用mockMvc模拟发送http请求开达到我们的目的。
一、确定需求
使用的是jmeter作为测试工具,设置如图
token.txt就是1000行uuid
大概是这样,这里只有10行,我们需要创造1000行token
jmeter会读取这文件的每一行字符赋值给请求头中,这样就能模拟1000个用户进行秒杀优惠卷的迸发 *** 作
二、编写代码 1.引入库将这个工具包导入,用于将对象和json格式之间的转换,很方便好用
//工具包
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.17</version>
</dependency>
//springboot测试环境
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2.编写代码
代码如下:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
public class UserToken {
@Autowired
MockMvc mockMvc;
@Resource
IUserService userService;
@Test
public void getToken() throws Exception {
String phone = "";
String code = "";
//注意!这里的绝对路径设置为自己想要的地方
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("e:\dyyhub\token.txt"));
//先模拟10个用户的登录
for (int i = 10; i < 20; i++) {
//通过id从数据库中获得user对象
User user = userService.getById(i);
phone = user.getPhone();
//创建虚拟请求,模拟通过手机号,发送验证码
ResultActions perform1 = mockMvc.perform(MockMvcRequestBuilders
.post("/user/code?phone=" + phone));
//获得Response的body信息
String resultJson1 = perform1.andReturn().getResponse().getContentAsString();
//将结果转换为result对象
Result result = JSONUtil.toBean(resultJson1, Result.class);
//获得验证码
code = result.getData().toString();
//创建登录表单
LoginFormDTO loginFormDTO = new LoginFormDTO();
loginFormDTO.setCode(code);
loginFormDTO.setPhone(phone);
//将表单转换为json格式的字符串
String loginFormDtoJson = JSONUtil.toJsonStr(loginFormDTO);
//创建虚拟请求,模拟登录
ResultActions perform2 = mockMvc.perform(MockMvcRequestBuilders.post("/user/login")
//设置contentType表示为json信息
.contentType(MediaType.APPLICATION_JSON)
//放入json对象
.content(loginFormDtoJson));
String resultJson2 = perform2.andReturn().getResponse().getContentAsString();
Result result2 = JSONUtil.toBean(resultJson2, Result.class);
//获得token
String token = result2.getData().toString();
//写入
osw.write(token+"\n");
}
//关闭输出流
osw.close();
}
}
总结
这个项目是前后端分离的项目,所以不管是发送还是接受的对象都是Result对象,可以直接通过cn.hutool.json.JSONUtil 这个对象的toBean方法来转换,非常方便,然后获取Result中的data数据写入循环1000次就大功告成啦!
如果有任何错误或者不妥的地方欢迎大家指导~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)