如何配置Gatling对接Jenkins拉取多个Git仓库的性能测试用例执行
多仓库Gatling测试Jenkins Pipeline配置方案
核心思路
你不需要把所有测试用例都放到同一个项目里,只需要维护一个轻量的Gatling执行入口项目,在Pipeline运行时动态拉取多个业务仓库的测试代码合并后执行即可。
前置要求
- 所有存测试用例的仓库(项目A、项目B)的Gatling版本和入口项目保持完全一致,避免依赖冲突
- 不同仓库的测试类建议按项目加不同包名前缀,避免类名重复导致执行异常
具体实现步骤
1. 准备Gatling入口项目
这个项目仅包含公共依赖配置,不存储任何业务测试用例:
- 如果是sbt项目,
build.sbt中仅引入Gatling核心插件和公共依赖 - 如果是maven/gradle项目,同理仅配置公共的Gatling插件和依赖
2. 编写Jenkins Pipeline配置
直接使用如下可参数化的Jenkinsfile即可实现拉取多仓库用例执行的需求:
pipeline { agent any parameters { string(name: 'REPO_A_URL', defaultValue: 'git@你的Git地址/项目A.git', description: '项目A Git仓库地址') string(name: 'REPO_A_BRANCH', defaultValue: 'main', description: '项目A拉取分支') string(name: 'REPO_B_URL', defaultValue: 'git@你的Git地址/项目B.git', description: '项目B Git仓库地址') string(name: 'REPO_B_BRANCH', defaultValue: 'main', description: '项目B拉取分支') string(name: 'RUN_SIMULATION', defaultValue: '*', description: '指定要执行的测试类,填*则执行所有仓库的全部用例') } stages { stage('拉取Gatling执行入口代码') { steps { // 替换为你自己的入口项目Git地址 git url: 'git@你的Git地址/gatling-runner.git', branch: 'main' } } stage('拉取多仓库测试用例') { steps { // 拉取项目A测试代码合并到入口源码目录 dir('temp-a') { git url: params.REPO_A_URL, branch: params.REPO_A_BRANCH } sh 'cp -rf temp-a/src/test/scala/* src/test/scala/' // 拉取项目B测试代码合并到入口源码目录 dir('temp-b') { git url: params.REPO_B_URL, branch: params.REPO_B_BRANCH } sh 'cp -rf temp-b/src/test/scala/* src/test/scala/' } } stage('运行Gatling测试') { steps { // 以下是sbt执行命令,用maven/gradle的话替换为对应执行命令即可 sh "sbt gatling:testOnly ${params.RUN_SIMULATION}" } } stage('归档测试报告') { steps { // 需提前安装Jenkins的HTML Publisher插件 publishHTML(target: [ allowMissing: false, alwaysLinkToLastBuild: true, keepAll: true, reportDir: 'target/gatling', reportFiles: 'index.html', reportName: 'Gatling性能测试报告' ]) } } } }
3. 扩展说明
如果后续要接入更多仓库的测试用例,只需要在Pipeline参数里新增对应仓库的地址、分支配置,再加一步拉取合并代码的逻辑即可,不需要修改入口项目的内容。
常见问题排查
- 如果出现类找不到的报错,先检查测试用例所在仓库的Gatling版本是否和入口项目一致
- 如果只执行了单个仓库的用例,检查cp命令的路径是否正确,有没有覆盖合并的问题
- 报告显示异常的话,检查Jenkins的HTML渲染策略是否允许运行JS,可执行
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")调整。
内容的提问来源于stack exchange,提问作者giuseppe giorgi
相关产品推荐
相关产品推荐

