【问题标题】:K6 Load Testing - I am completely baffled by the stats that are printed at the endK6 负载测试 - 最后打印的统计数据让我完全困惑
【发布时间】:2020-09-24 16:43:59
【问题描述】:

这是我正在运行的非常简单的 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 次迭代,所以它们应该都是相同的。 (只有“最大值”显示 478.72)。

由于只运行了 1 次迭代 - 每行的每一列中的数据应该相同。

所以我的问题是,我可以相信这些数字中的任何一个吗?如果可以的话,是哪些?

另外,我想报告登录花了多长时间 - 这只是 http_req_duration 值还是我必须包含其他值,如 http_req_blocked....还是只是等待 K6 准备好发送请求?

【问题讨论】:

    标签: k6


    【解决方案1】:

    看起来您正在执行多个请求,可能是因为您有重定向,这在登录场景中很常见。

    这就是为什么 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;
    

    或者您可以围绕请求及其持续时间使用一个组。

    【讨论】:

    • 很好的答案......现在非常有意义。谢谢Михаил Стойков
    猜你喜欢
    • 1970-01-01
    • 2017-03-23
    • 2023-03-09
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 2022-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多