getcarrier/perfmeterCarrier PerfMeter 是一个定制化的JMeter容器,专为性能测试设计,支持生成详细测试报告,并可与Loki、InfluxDB、Report Portal、Jira等工具集成,实现测试结果的存储、分析和告警。该镜像提供灵活的配置方式,适用于各类自动化性能测试场景,包括CI/CD流水线集成。
getcarrier/perfmeter:1.0:Carrier PerfMeter 1.0正式版本getcarrier/perfmeter:latest:开发最新版,包含未稳定功能,不建议生产环境使用以下步骤可快速运行JMeter测试并生成报告:
确保本地环境已安装Docker引擎。
通过docker run命令启动容器,需指定测试文件路径、报告存储路径及必要环境变量。示例命令如下:
bashdocker run --rm -u 0:0 \ -v <本地测试文件路径>:/mnt/jmeter/ \ -v <本地配置文件路径/config.yaml>:/tmp/ \ # 可选 -v <本地报告存储路径>:/tmp/reports \ # 可选 -e "env=<环境标识>" \ # 可选,默认'demo',用于过滤测试结果 -e "test_type=<测试类型>" \ # 可选,默认'demo',用于过滤测试结果 -e "loki_host=<Loki主机或IP>" \ # Loki服务地址 -e "loki_port=3100" \ # 可选,Loki端口,默认3100 -e "JVM_ARGS='-Xms1g -Xmx2g'" \ # JVM参数 getcarrier/perfmeter:latest \ -n -t /mnt/jmeter/<测试文件名> \ -q /mnt/jmeter/<属性文件> # 可选
<本地报告存储路径>:本地文件系统中用于存储测试报告的路径<本地测试文件路径>:本地存储JMeter测试脚本(.jmx)的路径<环境标识>/<测试类型>:可选标签,用于分类和过滤测试结果<Loki主机或IP>:Loki日志聚合服务的地址,用于发送错误信息<测试文件名>:JMeter测试脚本名称(如test.jmx)<属性文件>:可选,JMeter属性配置文件若挂载了报告目录(<本地报告存储路径>),测试完成后可在该路径下获取以下报告文件:
jmeter.log:测试运行日志jmeter.jtl:CSV格式的测试结果数据HtmlReport:JMeter默认HTML测试报告注意:无需额外参数生成报告,Perfmeter会自动在
/tmp/reports目录下生成上述文件。如需生成JUnit XML报告,可添加环境变量:
junit_report=True:启用JUnit报告(默认禁用)tp=10:平均吞吐量阈值(默认10 req/sec)rt=500:95%响应时间阈值(默认500 ms)er=5:错误率阈值(默认5%)
可通过属性文件或命令行参数(-J)配置测试参数。
propertiesinflux.port=8086 # InfluxDB端口 influx.db=jmeter # InfluxDB数据库名 influx.host=carrier_influx # InfluxDB主机 comparison_db=comparison # 对比数据库名 lg.id=debug # 负载生成器ID DURATION=20 # 测试持续时间(秒) VUSERS=5 # 虚拟用户数 RAMP_UP=1 # ramp-up时间(秒) test_name=test # 测试名称 project.id=demo # 项目ID test.type=demo # 测试类型 env.type=demo # 环境类型
通过-J选项在启动命令中直接传递参数,例如:
bash... -t /mnt/jmeter/test.jmx -JVUSERS=1 -JRAMP_UP=1 ...
通过config.yaml文件配置错误报告集成(Report Portal、Jira、Loki),需挂载该文件至容器/tmp/目录。示例配置:
yaml# 报告配置(所有报告类型均为可选) #reportportal: # ReportPortal.io配置 # rp_host: [***] # ReportPortal地址 # rp_token: XXXXXXXXXXXXX # 认证令牌 # rp_project_name: XXXXXX # 项目名称 # rp_launch_name: XXXXXX # 启动名称 # check_functional_errors: False # 是否分析功能错误(默认False) # check_performance_degradation: False # 是否对比基线性能(默认False) # check_missed_thresholds: False # 是否分析阈值超标(默认False) # performance_degradation_rate: 20 # 性能下降阈值(默认20%) # missed_thresholds_rate: 50 # 阈值超标率(默认50%) #jira: # url: [***] # Jira地址 # username: some.dude # 用户名 # password: password # 密码 # jira_project: XYZC # Jira项目ID # assignee: some.dude # 默认负责人 # issue_type: Bug # 问题类型(默认Bug) # labels: Performance, perfmeter # 标签(逗号分隔) # watchers: another.dude # 观察者(逗号分隔) # jira_epic_key: XYZC-123 # Epic Key #influx: # host: carrier_influx # InfluxDB主机 # port: 8086 # 端口(默认8086) # jmeter_db: jmeter # 测试结果数据库(默认jmeter) # comparison_db: comparison # 对比数据库(默认comparison) #loki: # host: [***] # Loki主机 # port: 3100 # 端口(默认3100)
可将Perfmeter集成到Jenkins CI/CD流程中,以下是运行测试的流水线示例:
groovydef get_influx_host(String env_var) { def match = env_var =~ '[***] return match[0][1] } node{ stage("配置") { deleteDir() sh "mkdir reports" # 创建报告目录 } stage("运行测试") { def dockerParamsString = "--entrypoint=''" def params = [ "-t" ] for (param in params) { dockerParamsString += " ${param}" } docker.image("getcarrier/perfmeter:latest").inside(dockerParamsString){ sh "mkdir /tmp/reports" sh """cd / && /launch.sh -n -t /mnt/jmeter/FloodIO.jmx \\ -Jinflux.host="""+get_influx_host(env.JENKINS_URL)+""" \\ -JVUSERS=10 -JDURATION=120 -Jinflux.db=jmeter -Jinflux.port=8086 \\ -JRAMP_UP=1 -Jtest_name=test -Jbuild.id=flood_io_${JOB_NAME}_${BUILD_ID} \\ -Jproject.id=demo -Jtest.type=demo -Jenv.type=demo""" sh "mv /tmp/reports/* ${WORKSPACE}/reports/" # 复制报告到工作空间 } } stage("发布结果") { perfReport 'reports/*.jtl' # 发布性能报告 } }
/launch.sh -n -t ${WORKSPACE}/<测试路径>)可将JMeter测试文件(含CSV、脚本等)打包为.zip格式,上传至Galloper artifacts(对象存储),容器可自动下载并运行测试。
对象存储中需存在存储桶(Bucket),创建步骤:
http://{{ galloper_url }})jmeter)bashdocker run --rm -t -u 0:0 \ -e galloper_url="http://{{ galloper_url }}" \ # Galloper地址 -e bucket="jmeter" \ # 存储桶名称 -e artifact="{{ 测试文件.zip }}" \ # 测试包文件名 getcarrier/perfmeter:latest \ -n -t /mnt/jmeter/{{ 测试名称.jmx }} \ # 测试脚本路径 -Jinflux.host={{ influx_dns_or_ip }} # InfluxDB主机
通过additional_files环境变量上传额外文件(如JMeter插件):
bashdocker run --rm -t -u 0:0 \ -e galloper_url="http://{{ galloper_url }}" \ -e additional_files='{"jmeter/InfluxBackendListenerClient.jar": "/jmeter/apache-jmeter-5.0/lib/ext/InfluxBackendListenerClient.jar"}' \ getcarrier/perfmeter:latest \ -n -t /mnt/jmeter/{{ 测试名称.jmx }} \ -Jinflux.host={{ influx_dns_or_ip }}
上述命令将存储桶中jmeter/InfluxBackendListenerClient.jar文件复制到容器/jmeter/apache-jmeter-5.0/lib/ext/目录。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务