K6 负载测试 - 我对最后打印的统计数据感到非常困惑
K6 Load Testing - I am completely baffled by the stats that are printed at the end
这是我的非常简单的 K6 脚本 运行:
import {group } from "k6";
import { Trend} from "k6/metrics";
let response = null;
let loginTime = new Trend('login_time');
import http from "k6/http";
export let options = {
stages: [
{iterations: 1}
]
};
export default function(){
group("Log In", function(){
let url = "myurl";
let headers = {
headers: {
"accept": "*/*",
"accept-encoding": "gzip, deflate, br",
"connection": "keep-alive"
}
};
response = http.get(url,headers);
loginTime.add(response.timings.duration);
console.log("The duration for this request was:" + response.timings.duration);
})
};
脚本只发送一个请求并运行一次交互,我将此请求的持续时间保存到名为 'login_time' 的趋势中。
最后K6打印的数据如下:
data_received..............: 29 kB 9.0 kB/s
data_sent..................: 3.4 kB 1.1 kB/s
group_duration.............: avg=3.15s min=3.15s med=3.15s max=3.15s p(90)=3.15s p(95)=3.15s
http_req_blocked...........: avg=414.88ms min=2µs med=291.79ms max=1.31s p(90)=976.28ms p(95)=1.14s
http_req_connecting........: avg=17.55ms min=0s med=25.97ms max=31.96ms p(90)=31.1ms p(95)=31.53ms
http_req_duration..........: avg=216.66ms min=29.72ms med=231.06ms max=478.72ms p(90)=407.62ms p(95)=443.17ms
http_req_receiving.........: avg=407.68µs min=119.9µs med=205.8µs max=1.33ms p(90)=892.84µs p(95)=1.11ms
http_req_sending...........: avg=74.86µs min=12.4µs med=76.8µs max=170.2µs p(90)=142.79µs p(95)=156.49µs
http_req_tls_handshaking...: avg=102.44ms min=0s med=73.61ms max=315.35ms p(90)=238.5ms p(95)=276.93ms
http_req_waiting...........: avg=216.18ms min=29.59ms med=230.68ms max=477.3ms p(90)=406.68ms p(95)=441.99ms
http_reqs..................: 5 1.563597/s
iteration_duration.........: avg=3.15s min=3.15s med=3.15s max=3.15s p(90)=3.15s p(95)=3.15s
iterations.................: 1 0.312719/s
login_time.................: avg=478.721924 min=478.721924 med=478.721924 max=478.721924 p(90)=478.721924 p(95)=478.721924
vus........................: 1 min=1 max=1
vus_max....................: 1 min=1 max=1
如您所见,我的自定义趋势 'login_time' 的所有统计数据都显示相同的数字 478.721924。
'login_time' 正在记录 'response.timings.duration' - 这里的持续时间应该是 'http_req_duration'.
所以我希望 'http_req_duration' 行的统计数据与 'login_time' 行的统计数据完全相同,即全部显示 478.721924.
相反,'http_req_duration' 行上的统计数据完全不同,并且都显示不同的数字,即使只有 1 次迭代是 运行,所以它们应该都是相同的。 (只有 'max' 值显示 478.72)。
因为只有 1 次迭代 运行 - 每行每列中的数据应该相同。
所以我的问题是,我可以信任这些数字中的任何一个吗?如果可以的话,我可以相信哪些数字?
此外,我想报告登录花了多长时间 - 这只是 http_req_duration 值还是我必须包括其他值,如 http_req_blocked...或者只是等待K6 准备好发送请求了吗?
看起来你在做多个请求,可能是因为你有重定向,这在登录场景中很常见。
这就是 http_req_* 指标有多个值的原因,因为 http_reqs
(完成的请求数)是 5。所以你有 5 组 http_req_*
.
http_req_duration
是所有其他人的总和,所以这很可能是您想要的,您可以阅读 others in the documentation,但一般来说,如果您需要它们,您就会知道 ;) .
但是 res.timings 只有 last 响应时间,因此您可能需要使用 Date 来计时,如
var start = Date.now();
// do something
var took = Date.now() - start;
或者您可以围绕请求及其持续时间使用一个组。
这是我的非常简单的 K6 脚本 运行:
import {group } from "k6";
import { Trend} from "k6/metrics";
let response = null;
let loginTime = new Trend('login_time');
import http from "k6/http";
export let options = {
stages: [
{iterations: 1}
]
};
export default function(){
group("Log In", function(){
let url = "myurl";
let headers = {
headers: {
"accept": "*/*",
"accept-encoding": "gzip, deflate, br",
"connection": "keep-alive"
}
};
response = http.get(url,headers);
loginTime.add(response.timings.duration);
console.log("The duration for this request was:" + response.timings.duration);
})
};
脚本只发送一个请求并运行一次交互,我将此请求的持续时间保存到名为 'login_time' 的趋势中。
最后K6打印的数据如下:
data_received..............: 29 kB 9.0 kB/s
data_sent..................: 3.4 kB 1.1 kB/s
group_duration.............: avg=3.15s min=3.15s med=3.15s max=3.15s p(90)=3.15s p(95)=3.15s
http_req_blocked...........: avg=414.88ms min=2µs med=291.79ms max=1.31s p(90)=976.28ms p(95)=1.14s
http_req_connecting........: avg=17.55ms min=0s med=25.97ms max=31.96ms p(90)=31.1ms p(95)=31.53ms
http_req_duration..........: avg=216.66ms min=29.72ms med=231.06ms max=478.72ms p(90)=407.62ms p(95)=443.17ms
http_req_receiving.........: avg=407.68µs min=119.9µs med=205.8µs max=1.33ms p(90)=892.84µs p(95)=1.11ms
http_req_sending...........: avg=74.86µs min=12.4µs med=76.8µs max=170.2µs p(90)=142.79µs p(95)=156.49µs
http_req_tls_handshaking...: avg=102.44ms min=0s med=73.61ms max=315.35ms p(90)=238.5ms p(95)=276.93ms
http_req_waiting...........: avg=216.18ms min=29.59ms med=230.68ms max=477.3ms p(90)=406.68ms p(95)=441.99ms
http_reqs..................: 5 1.563597/s
iteration_duration.........: avg=3.15s min=3.15s med=3.15s max=3.15s p(90)=3.15s p(95)=3.15s
iterations.................: 1 0.312719/s
login_time.................: avg=478.721924 min=478.721924 med=478.721924 max=478.721924 p(90)=478.721924 p(95)=478.721924
vus........................: 1 min=1 max=1
vus_max....................: 1 min=1 max=1
如您所见,我的自定义趋势 'login_time' 的所有统计数据都显示相同的数字 478.721924。
'login_time' 正在记录 'response.timings.duration' - 这里的持续时间应该是 'http_req_duration'.
所以我希望 'http_req_duration' 行的统计数据与 'login_time' 行的统计数据完全相同,即全部显示 478.721924.
相反,'http_req_duration' 行上的统计数据完全不同,并且都显示不同的数字,即使只有 1 次迭代是 运行,所以它们应该都是相同的。 (只有 'max' 值显示 478.72)。
因为只有 1 次迭代 运行 - 每行每列中的数据应该相同。
所以我的问题是,我可以信任这些数字中的任何一个吗?如果可以的话,我可以相信哪些数字?
此外,我想报告登录花了多长时间 - 这只是 http_req_duration 值还是我必须包括其他值,如 http_req_blocked...或者只是等待K6 准备好发送请求了吗?
看起来你在做多个请求,可能是因为你有重定向,这在登录场景中很常见。
这就是 http_req_* 指标有多个值的原因,因为 http_reqs
(完成的请求数)是 5。所以你有 5 组 http_req_*
.
http_req_duration
是所有其他人的总和,所以这很可能是您想要的,您可以阅读 others in the documentation,但一般来说,如果您需要它们,您就会知道 ;) .
但是 res.timings 只有 last 响应时间,因此您可能需要使用 Date 来计时,如
var start = Date.now();
// do something
var took = Date.now() - start;
或者您可以围绕请求及其持续时间使用一个组。