JSON
您可以使用 JSON 格式输出详细的数据点。为此,请使用带有 --out
标志的 k6 run
命令,并将 JSON 文件的路径作为标志参数传递。
k6 run --out json=test_results.json script.js
docker run -it --rm \
-v <scriptdir>:/scripts \
-v <outputdir>:/jsonoutput \
grafana/k6 run --out json=/jsonoutput/my_test_result.json /scripts/script.js
# Note that the docker user must have permission to write to <outputdir>!
或者如果您想获取 gzip 压缩结果,像这样
k6 run --out json=test_results.gz script.js
docker run -it --rm \
-v <scriptdir>:/scripts \
-v <outputdir>:/jsonoutput \
grafana/k6 run --out json=/jsonoutput/my_test_result.gz /scripts/script.js
# Note that the docker user must have permission to write to <outputdir>!
要实时检查输出,您可以在保存的文件上使用 tail -f
等命令
tail -f test_results.json
JSON 格式
JSON 输出按行格式如下
{"type":"Metric","data":{"type":"gauge","contains":"default","tainted":null,"thresholds":[],"submetrics":null},"metric":"vus"}
{"type":"Point","data":{"time":"2017-05-09T14:34:45.625742514+02:00","value":5,"tags":null},"metric":"vus"}
{"type":"Metric","data":{"type":"trend","contains":"time","tainted":null,"thresholds":["avg<1000"],"submetrics":null},"metric":"http_req_duration"}
{"type":"Point","data":{"time":"2017-05-09T14:34:45.239531499+02:00","value":459.865729,"tags":{"group":"::my group::json","method":"GET","status":"200","url":"https://quickpizza.grafana.com/api/tools"}},"metric":"http_req_duration"}
每行包含一个指标的信息,或记录该指标的数据点(样本)。每行由三项组成
type
- 可以有 Metric 或 Point 值,其中Metric
表示该行声明一个指标,而Point
是一个指标的实际数据点(样本)。data
- 是一个字典,包含许多内容,具体取决于上面的"type"
。metric
- 指标名称。
Metric
该行包含指标的元数据。在这里,"data"
包含以下内容
"type"
- 指标类型(“gauge”、“rate”、“counter”或“trend”)"contains"
- 收集的数据类型信息(例如,计时指标可以为“time”)"tainted"
- 此指标是否导致阈值失败?"threshold"
- 此指标是否附加了任何阈值?"submetrics"
- 通过使用标签添加阈值而产生的任何派生指标。
Point
该行包含实际数据样本。在这里,"data"
包含以下字段
"time"
- 收集样本时的时间戳"value"
- 实际数据样本;时间值以毫秒为单位"tags"
- 带有标签名-标签值对的字典,可用于过滤结果数据
处理 JSON 输出
您可以使用 jq 来处理 k6 JSON 输出。
您可以快速创建 过滤器 来返回 JSON 文件中的特定指标
jq '. | select(.type=="Point" and .metric == "http_req_duration" and .data.tags.status >= "200")' myscript-output.json
并计算任何指标的聚合值
jq '. | select(.type=="Point" and .metric == "http_req_duration" and .data.tags.status >= "200") | .data.value' myscript-output.json | jq -s 'add/length'
jq '. | select(.type=="Point" and .metric == "http_req_duration" and .data.tags.status >= "200") | .data.value' myscript-output.json | jq -s min
jq '. | select(.type=="Point" and .metric == "http_req_duration" and .data.tags.status >= "200") | .data.value' myscript-output.json | jq -s max
对于更高级的用例,请查阅 jq 手册
摘要导出
如果您只想查看聚合数据,可以将测试结束摘要导出到 JSON 文件。有关更多详细信息,请参阅[`handleSummary()`](/docs/k6/latest/results-output/end-of-test/) 测试结束摘要文档中的主题。