如何在GitLab CI/CD中结合JMX与CSV文件运行JMeter测试
GitLab CI/CD配置JMeter性能测试的问题修正
问题背景
需要搭建GitLab CI/CD流水线,通过JMeter的GIS_2CSV_sample_sya.jmx测试计划和Config_Setup_LotInfo_sample.csv数据源文件运行性能测试,并生成测试报告。当前的.gitlab-ci.yml配置存在文件关联错误、路径配置不当等问题,导致测试无法正常关联CSV文件执行。
当前配置的问题分析
- 未处理CSV数据源文件:配置仅复制了JMX文件到JMeter目录,但未将
Config_Setup_LotInfo_sample.csv同步到JMeter可访问的路径,导致JMX测试计划无法读取数据源。 - 变量未实际复用:定义了
JMX_FILE、CSV_FILE_PATH等变量,但脚本中硬编码文件路径,既浪费变量定义的意义,也降低了配置的可维护性。 - 报告输出路径权限风险:直接将报告输出到根目录
/GIS_2CSV_sample_sya,容器环境下通常没有根目录写入权限,会导致报告生成失败。 - 未定义
BUILD_PATH变量:before_script中使用了$BUILD_PATH但未在variables中声明,执行时会抛出变量未定义错误。 - 报告阶段无实际动作:
report_job仅依赖jmeter-build阶段,但未配置报告上传或处理逻辑,无法留存测试报告。
修正后的.gitlab-ci.yml配置
stages: - jmeter - report variables: # Compression and general settings FF_USE_FASTZIP: "true" ARTIFACT_COMPRESSION_LEVEL: "fastest" CACHE_COMPRESSION_LEVEL: "fastest" # Project and environment settings ENV: "prd" PROJECT: "nvis" TARGET: "jmeter" # JMeter test files & paths JMX_FILE: "GIS_2CSV_sample_sya.jmx" CSV_FILE: "Config_Setup_LotInfo_sample.csv" JMETER_HOME: "/opt/apache-jmeter-5.6.3" BUILD_PATH: "/builds/example/devops/jmeter/report" TEST_RESULT_CSV: "${JMETER_HOME}/test_result.csv" REPORT_OUTPUT_DIR: "${BUILD_PATH}/jmeter_report" jmeter-build: stage: jmeter image: registry.example.com/jmeter_base:1.0.3 before_script: # 创建报告存放目录 - mkdir -p "${BUILD_PATH}" # 复制JMX和CSV文件到JMeter可访问目录 - cp "JMeter-sample/${JMX_FILE}" "${JMETER_HOME}/" - cp "JMeter-sample/${CSV_FILE}" "${JMETER_HOME}/" script: # 执行JMeter测试,生成结果文件和HTML报告 - jmeter -Jjmeter.save.saveservice.timestamp_format="yyyy/MM/dd HH:mm:ss" -n -t "${JMETER_HOME}/${JMX_FILE}" -l "${TEST_RESULT_CSV}" -e -o "${REPORT_OUTPUT_DIR}" artifacts: paths: - "${BUILD_PATH}/" expire_in: 7d report_job: stage: report image: alpine:3.8 dependencies: - jmeter-build script: # 可选:校验报告文件是否生成 - ls -la "${BUILD_PATH}/" artifacts: paths: - "${BUILD_PATH}/" expire_in: 30d
关键配置说明
- CSV文件关联:确保JMX测试计划中配置的CSV数据源路径与
${JMETER_HOME}/${CSV_FILE}一致,比如直接写Config_Setup_LotInfo_sample.csv(已复制到JMeter主目录),或使用绝对路径${JMETER_HOME}/Config_Setup_LotInfo_sample.csv。 - 路径统一管理:通过
JMETER_HOME、BUILD_PATH等变量统一管理路径,避免硬编码,方便后续版本或路径调整。 - 制品留存:通过
artifacts配置将测试结果和HTML报告上传为GitLab制品,可在流水线页面下载查看,expire_in参数控制文件自动过期时间。 - 权限规避:将报告输出到GitLab默认构建目录
/builds/...,避免根目录权限限制,确保报告能正常生成。
内容的提问来源于stack exchange,提问作者Nurul Syahirah Azmi
相关产品推荐
相关产品推荐

