# stressTestSystem
**Repository Path**: smooth00/stressTestSystem
## Basic Information
- **Project Name**: stressTestSystem
- **Description**: 基于renren-fast开发平台开发,内核基于Jmeter脚本和Jmeter-Api实现在线性能压测,最新迭代到JAVA 17和JMeter 5.6.x版本。Docker版部署方案 https://gitee.com/smooth00/stressTestSystemDocker
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://smooth.blog.csdn.net
- **GVP Project**: No
## Statistics
- **Stars**: 487
- **Forks**: 259
- **Created**: 2018-11-22
- **Last Updated**: 2026-08-04
## Categories & Tags
**Categories**: testing
**Tags**: None
## README
# 项目说明
本项目基于 renren-fast Java 开发平台开发,内核基于 Jmeter-Api 和 Jmeter 脚本实现在线性能压测。目前已将平台环境从 JDK 8 升级到 JDK 17,JMeter 引擎升级到最高支持 5.6.3 版本,后续还会继续维护更新。
## 具有如下特点
- 友好的代码结构及注释,便于阅读及二次开发
- 实现前后端分离,通过 token 进行数据交互,前端再也不用关注后端技术
- 灵活的权限控制,可控制到页面或按钮,满足绝大部分的权限需求
- 页面交互使用 Vue2.x,极大的提高了开发效率
- 完善的代码生成机制,可在线生成 entity、xml、dao、service、html、js、sql 代码,减少 70% 以上的开发任务
- 引入 quartz 定时任务,可动态完成任务的添加、修改、删除、暂停、恢复及日志查看等功能
- 引入 API 模板,根据 token 作为登录令牌,极大的方便了 APP 接口开发
- 引入 Hibernate Validator 校验框架,轻松实现后端校验
- 引入云存储服务,已支持:七牛云、阿里云、腾讯云等
- 引入 swagger 文档支持,方便编写 API 接口文档
- 引入路由机制,刷新页面会停留在当前页
- 引入最新版本 Jmeter-Api,支持分布式压测,测试报告生成及在线查看下载
- 引入 Echarts,支持在线观测性能压测结果
## 项目结构
```
renren-fast
├─doc 项目SQL语句
│
│─lib 项目引用jar包
│
├─common 公共模块
│ ├─aspect 系统日志
│ ├─exception 异常处理
│ ├─validator 后台校验
│ └─xss XSS过滤
│
├─config 配置信息
│
├─modules 功能模块
│ ├─api API接口模块(APP调用)
│ ├─job 定时任务模块
│ ├─oss 文件服务模块
│ ├─sys 权限模块
│ └─test 测试模块
│
├─RenrenApplication 项目启动类
│
├──resources
│ ├─mapper SQL对应的XML文件
│ ├─static 第三方库、插件等静态资源
│ └─views 项目静态页面
```
## 技术选型
- 核心框架:Spring Boot 2.7.18
- 安全框架:Apache Shiro 1.12
- 视图框架:Spring MVC 5.3
- 持久层框架:MyBatis 3.5
- 定时器:Quartz 2.3.2
- 数据库连接池:Druid 1.2.18
- 日志管理:SLF4J 1.7、Log4j
- 页面交互:Vue2.x
- 前端监控:ECharts 3.8
- 压测内核:Apache JMeter 5.6.3
- 远程执行命令:JSch 0.1.55
- 批量上传组件:bootstrap-fileinput v4.5.2
- JVM 内部缓存:Guava 32.1.3
## 本地部署(H2数据库)
- 通过git下载源码
- 确保安装JDK 17,配置JAVA_HOME环境变量
- IDEA等工具直接运行RenrenApplication.java,系统自动使用H2内存数据库
- 项目访问路径:
- 账号密码:admin/admin
- API文档路径:
- H2控制台:
## 本地部署(MySQL数据库)
- 通过git下载源码
- 创建数据库renren_fast,数据库编码为UTF-8
- 执行doc/db.sql文件,初始化数据
- application.yml 配置 dev,调用 application-dev.yml 配置,连接 MySQL 数据库,修改application-dev.yml,更新MySQL账号和密码
- 修改MySQL中sys_config表中Jmeter专属配置项,更新为本地地址
- IDEA等工具运行RenrenApplication.java启动项目
- 项目访问路径:
- 账号密码:admin/admin
- Swagger 路径:[http://localhost:8080/swagger/index.html](http://localhost:8080/swagger/index.html)
## jar 部署(默认初始化h2数据)
- 修改 application.yml,修改 profiles,指定执行环境如线下环境 pro(默认运行h2环境)
- 修改 application-pro.yml,更新线下环境的 MySQL 账号和密码
- 通过 maven 命令打包 jar 包:`mvn clean package -f pom.xml`
- 将 target 目录下打包好的 jar 包通过 `java -jar renren-fast.jar` 调用
- 也可以将打好的 jar 包通过 Dockerfile build 到 Docker 镜像中
- 项目访问路径,如:[http://线下环境ip:8080/](http://xn--ip-0p2av66i/:8080/)
- 账号密码:admin/admin
## tomcat 部署
- 修改 application.yml,修改 profiles,指定执行环境如线下环境 pro
- 修改 application-pro.yml,更新线下环境的 MySQL 账号和密码
- 通过 maven 命令打包 war 包:`mvn clean package -f pom-war.xml`
- 将 target 目录下打包好的 war 包保存到 tomcat 的 webapps 目录下
- 通过 tomcat 的 bin 目录下的 startup 命令,启动 tomcat
- 访问 tomcat 路径,如:[http://线下环境ip:8080](http://xn--ip-0p2av66i/:8080)
- 账号密码:admin/admin
## Docker 部署
- 部署方案参见:[stressTestSystemDocker](https://gitee.com/smooth00/stressTestSystemDocker)
- Docker 镜像见:[smooth00 Docker Hub](https://registry.hub.docker.com/u/smooth00)
## 配置参数
性能测试配置(全部在数据库保存配置参数:系统管理 -> 参数管理)
- Jmeter 主节点路径,默认测试报告生成使用 jmeterHome:`D:\software\apache-jmeter-5.6.3`
- 存放用例的总目录,里面会细分文件存放用例及用例文件,用例保存路径 casePath:`D:\E\stressTestCases`
- Jmeter 节点机需要在 `/etc/bashrc` 中配置 `JAVA_HOME`,同时 `source /etc/bashrc` 生效
- 如果配置了 Jmeter 脚本启动,则额外开启 Jmeter 进程运行测试用例脚本及分布式程序:
- 分布式程序可以取消 ssl 校验(jmeter4 及以上版本要求)
- 同时可以配置支持 Jmeter + InfluxDB + Grafana 的实时监控
- 支持自带的 ECharts 实时监控
- 如果没有配置 Jmeter 脚本启动,则使用 Web 本身自带的 Jmeter 功能:
- `MASTER_JMETER_USE_SCRIPT_KEY` 默认是 false,即使用 Web 程序进程来启动 Jmeter-master 程序
- 默认支持以进程方式生成测试报告,也支持以脚本方式生成测试报告:
- `MASTER_JMETER_GENERATE_REPORT_KEY` 为 true 表示由进程生成测试报告,支持并发生成
- `SCRIPT_SCHEDULER_DURATION_KEY` 为 true 开启脚本限时执行,以免脚本忘记停止在后台一直压测
- `JMETER_THREADGROUP_SET_KEY` 默认为 false:
- `JMETER_THREADGROUP_SET_KEY` 为 true 则开启线程组管理功能,导入脚本时会往线程组配置库中也导入一份
## 注意事项
部署时请确保平台 jmeter 引擎版本、主节点版本、分布式节点版本保持一致(避免不同版本配置文件或生成的报告数据差异导致一些异常)。
## 友情提示
本平台支持 script 脚本命令压测和 jmeter api 压测两种模式,大家可以在配置中 [系统管理 -> 参数配置] 中修改。
- **script 命令压测模式**:不支持 ECharts 实时监控,但支持配合 Grafana + InfluxDB 实时监控,相当于是 jmeter 的 non-gui 模式
- **jmeter api 压测模式**:支持 ECharts 实时监控。如果要多脚本分布式压测并监控,请在各节点替换专用的 ApacheJMeter_core.jar 包(不断更新,只要替换 jmeter 节点即可,主节点可不动),目前提供 jmeter5.1.1 版的包:
- 2020-09-18 解决第三方插件线程组在分布式压测后的 html 报告线程数错误:[下载地址](https://download.csdn.net/download/smooth00/12859317)
- 2020-07-27 解决 TPS 统计问题:[下载地址](https://download.csdn.net/download/smooth00/12665241)
- 新提供 jmeter5.4.1 的 core 包:[下载地址](https://download.csdn.net/download/smooth00/16679034)
- 如果想配合 Grafana + InfluxDB 监控,需要注意后端监听器的配置,以免踩坑:[参考文章](https://smooth.blog.csdn.net/article/details/107558934)
- 各个节点的 jmeter 时间需要统一(否则影响监控报告和 html 报告数据),所以推荐使用 docker 版的 jmeter,以便控制到分秒不差(时间统一配置 Asia/Shanghai)