# 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)