【秒杀项目3】系统压测模块

刚入门Java的硕士宝宝,实验室没什么Java项目,看到网上的秒杀项目,跟着学习并且记录一下,可能错误会很多,欢迎大家指正。



前言

本文介绍系统压测模块,具体详细介绍JMeter的使用、用户测试、正式压测。


`

一、JMeter的使用

JMeter 主要用于对 Web 应用程序、Web 服务和数据库等进行性能测试、负载测试和压力测试,以评估系统的性能、稳定性和可靠性。

  1. 创建测试计划:

在 JMeter GUI 中,创建一个新的测试计划(Test Plan)。
右键点击测试计划,选择 “Add” -> “Threads (Users)” -> “Thread Group”,创建一个线程组,用于模拟并发用户。

  1. 添加 Sampler:

在线程组下右键点击,选择 “Add” -> “Sampler”,选择相应的 Sampler,比如 HTTP 请求。
配置 Sampler,输入需要测试的目标地址和其他参数。

  1. 添加 Listener:

在线程组下右键点击,选择 “Add” -> “Listener”,选择相应的 Listener,用于查看测试结果。
常用的 Listener 包括 Summary Report、View Results Tree、Graph Results 等。

  1. 配置线程组参数:

在线程组上右键点击,选择 “Add” -> “Config Element”,可以配置线程组的参数,如线程数、循环次数等。
运行测试:

配置完成后,点击工具栏上的 “Start” 按钮,或者按下 Ctrl+R(Windows)/Command+R(Mac)键,开始运行测试。
JMeter 会模拟多个并发用户发起请求,并收集相应的性能数据。

  1. 查看测试结果:

在 Listener 中可以查看测试结果,包括响应时间、吞吐量、错误率等信息。
可以通过图表、表格等方式查看测试结果,以便分析应用程序的性能和稳定性。

二、自定义变量

准备测试接口(用户信息):

@Controller
@RequestMapping("/user")
public class UserController {
   @RequestMapping("/info")
   @ResponseBody
   public RespBean info(User user){
      return RespBean.success(user);
   }
}

三、正式压测

生成用户工具类(压测秒杀接口):

public class UserUtil {
   private static void createUser(int count) throws Exception {
      List<User> users = new ArrayList<>(count);
      //生成用户
      for (int i = 0; i < count; i++) {
         User user = new User();
         user.setId(13000000000L + i);
         user.setLoginCount(1);
         user.setUsername("user" + i);
         user.setRegisterDate(new Date());
         user.setSalt("1a2b3c");
         user.setPassword(MD5Util.inputPassToDbPass("123456", user.getSalt()));
         users.add(user);
     }
      System.out.println("create user");
      //插入数据库
      Connection conn = getConn();
      String sql = "insert into t_user(login_count, username, register_date, 
salt, password, id)values(?,?,?,?,?,?)";
      PreparedStatement pstmt = conn.prepareStatement(sql);
      for (int i = 0; i < users.size(); i++) {
         User user = users.get(i);
         pstmt.setInt(1, user.getLoginCount());
         pstmt.setString(2, user.getUsername());
         pstmt.setTimestamp(3, new Timestamp(user.getRegisterDate().getTime()));
         pstmt.setString(4, user.getSalt());
         pstmt.setString(5, user.getPassword());
         pstmt.setLong(6, user.getId());
         pstmt.addBatch();
     }
      pstmt.executeBatch();
      pstmt.close();
      conn.close();
      System.out.println("insert to db");
      //登录,生成token
      String urlString = "http://localhost:8080/login/doLogin";
      File file = new File("C:\\Users\\Administrator\\Desktop\\config.txt");
      if (file.exists()) {
         file.delete();
     }
      RandomAccessFile raf = new RandomAccessFile(file, "rw");
      file.createNewFile();
      raf.seek(0);
      for (int i = 0; i < users.size(); i++) {
         User user = users.get(i);
         URL url = new URL(urlString);
         HttpURLConnection co = (HttpURLConnection) url.openConnection();
         co.setRequestMethod("POST");
         co.setDoOutput(true);
         OutputStream out = co.getOutputStream();
         String params = "mobile=" + user.getId() + "&password=" + MD5Util.inputPassToFormPass("123456");
         out.write(params.getBytes());
         out.flush();
         InputStream inputStream = co.getInputStream();
         ByteArrayOutputStream bout = new ByteArrayOutputStream();
         byte buff[] = new byte[1024];
         int len = 0;
         while ((len = inputStream.read(buff)) >= 0) {
            bout.write(buff, 0, len);
         }
         inputStream.close();
          bout.close();
         String response = new String(bout.toByteArray());
         ObjectMapper mapper = new ObjectMapper();
         RespBean respBean = mapper.readValue(response, RespBean.class);
         String userTicket = ((String) respBean.getObj());
         System.out.println("create userTicket : " + user.getId());
         String row = user.getId() + "," + userTicket;
         raf.seek(raf.length());
         raf.write(row.getBytes());
         raf.write("\r\n".getBytes());
         System.out.println("write to file : " + user.getId());
     }
      raf.close();
      System.out.println("over");
   }
   private static Connection getConn() throws Exception {
      String url = "jdbc:mysql://localhost:3306/seckill? useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
      String username = "root";
      String password = "root";
      String driver = "com.mysql.cj.jdbc.Driver";
      Class.forName(driver);
      return DriverManager.getConnection(url, username, password);
   }
   public static void main(String[] args) throws Exception {
      createUser(5000);
   }
}

总结

以上就是今天要讲的内容,本文简单介绍了系统压测模块,具体参考 乐字节 Java电商秒杀项目。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值