# stressTestSystem **Repository Path**: smooth00/stressTestSystem ## Basic Information - **Project Name**: stressTestSystem - **Description**: 继承于zyanycall/stressTestPlatform的开源项目;基于renren-fast开发平台开发,内核基于Jmeter脚本和Jmeter-Api实现在线性能压测。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**: 485 - **Forks**: 259 - **Created**: 2018-11-22 - **Last Updated**: 2026-07-09 ## 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 - 远程执行命令:Ganymed build210 - 批量上传组件:bootstrap-fileinput v4.5.2 - JVM内部缓存:Guava 32.1.3 **本地部署** - 通过git下载源码 - 创建数据库renren\_fast,数据库编码为UTF-8 - 默认调用application-h2.yml启动服务自动初始化h2数据库,如要改用Mysql则手动执行doc/db.sql文件初始化数据 - 使用mysql则调用application-dev.yml,更新MySQL账号和密码(application.yml配置dev,调用application-dev.yml配置,连接mysql数据库) - 修改MySQL中sys\_config表中Jmeter专属配置项,更新为本地地址 - Eclipse、IDEA运行RenrenApplication.java,则可启动项目 - 项目访问路径: - 账号密码:admin/admin - Swagger路径: **jar部署** - 修改application.yml,修改profiles,指定执行环境如线下环境pro - 修改application-pro.yml,更新线下环境的MySQL账号和密码 - 通过maven命令打包jar包:mvn clean package -f pom.xml - 将target目录下,打包好的jar包通过java -jar renren-fast.jar 调用 - 也可以将打好的jar包通过Dockerfile build到Docker镜像中 - 项目访问路径,如: - 账号密码: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路径,如: - 账号密码:admin/admin **Docker部署** - 部署方案参见 - Docker镜像见 **配置参数** 性能测试配置(全在数据库保存配置参数:系统管理->参数管理) - 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报告线程数错误 2020-07-27 解决TPS统计问题 新提供jmeter5.4.1的core包 - 如果想配合grafana + influxdb监控,需要注意后端监听器的配置,以免踩坑: - 各个节点的jmeter时间需要统一(否则影响监控报告和html报告数据),所以推荐使用docker版的jmeter,以便控制到分秒不差(时间统一配置Asia/Shanghai)