亿级流量点赞系统第七章

项目地址

GitHub地址💥:https://github.com/tenyon61/likeboom

后端初始化模板💥:https://github.com/tenyon61/springboot3-demo/tree/single

快速开始

✨安装JMeter

地址:https://jmeter.apache.org/download_jmeter.cgi

2025-04-29-5f40a4.webp

✨压测配置

修改bin\jmeter.propertieslanguage改为zh_CN

点击jmeter.bat启动JMeter

  • 添加线程组
  • 添加信息头管理器
  • 添加HTTP请求
  • 添加响应断言

最后基本配置如下

2025-05-10-b97b51.webp

首先测试能否调通

2025-05-10-0a96e7.webp

✨压测流程

批量插入5w人数据

2025-05-10-61cf2a.webp

💥并行流获取SESSION

java
复制代码
@Test void testLoginAndExportSessionToCsv() throws Exception { List<User> list = userService.list(); try (PrintWriter writer = new PrintWriter(new FileWriter("session_output.csv", true))) { writer.println("userId,sessionId,timestamp"); // 使用并行流处理用户登录 list.parallelStream().forEach(user -> { try { long testUserId = user.getId(); MvcResult result = mockMvc.perform(get("/api/auth/login") .param("userId", String.valueOf(testUserId)) .contentType(MediaType.APPLICATION_JSON)) .andReturn(); List<String> setCookieHeaders = result.getResponse().getHeaders("Set-Cookie"); assertThat(setCookieHeaders).isNotEmpty(); String sessionId = setCookieHeaders.stream() .filter(cookie -> cookie.startsWith("SESSION")) .map(cookie -> cookie.split(";")[0]) .findFirst() .orElseThrow(() -> new RuntimeException("No SESSION found in response")); String sessionValue = sessionId.split("=")[1]; // 使用同步块保证线程安全 synchronized (writer) { writer.printf("%d,%s,%s%n", testUserId, sessionValue, LocalDateTime.now()); } System.out.println("✅ 写入 CSV:" + testUserId + " -> " + sessionValue); } catch (Exception e) { e.printStackTrace(); } }); } }

拿到csv

2025-05-10-e399dc.webp

💥读取CSV

2025-05-10-ceecbb.webp

💥配置sessionId

2025-05-10-ee20c4.webp

💥压测结果

Redis + 同步任务为例

1.单压测Redis

2025-05-10-45c8b5.webp

2.Redis+同步任务

2025-05-10-95f120.webp

本章总结

对于使用Apache JMeter对点赞系统压测,通过摸拟真实用户请求的方式,来实现高并发测试。

项目踩坑

  • 不同压测需要切换提交记录
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP