Grafana K6中标签和组的快速概述

415 阅读3分钟

大家好,在这篇文章中,我们将讨论和探索更多关于我们最喜欢的性能测试工具Grafana K6中的标签和组。然而,你可能会问情况是什么,为什么我们要使用它们。因此,让我们从标签和组的一些核心基本原理开始。

负载测试经常在一个有多个子系统和资源的服务上进行。这使得我们很难确定导致性能不佳的问题。因此,为了避免这种类型的问题,k6在性能测试中引入了标签和组。

标签对你的检查、阈值、自定义指标和请求进行分类,以便深入过滤,而组则让你对脚本的功能应用标签。

k6中的标签

标签是对k6对象进行分类的一种简单而有效的方法,以便随后对结果进行过滤。

k6提供两种类型的标签。

  1. 用户定义的 =>

你在编写脚本时添加的标签,和

2.系统 =>

由 k6 自动分配的

k6中的系统标签

自动创建的标签列表包括这些:

  • 原语 标签
proto使用的协议(例如,HTTP/1.1)
  • 子proto 标签
subproto子协议(由网络套接字使用)
  • 状态标签
状态HTTP状态代码(例如,200、404等)
  • 方法标签
方法HTTP方法的名称(如GET、POST等)或gRPC的RPC方法
  • URL标签
网址HTTP请求的URL
  • 名称标签
名称HTTP请求的名称
  • 组标签
组的完整路径
  • 检查标签
检查检查的名称
  • 错误标签
错误一个字符串,包含HTTP以外的错误信息(例如,网络或DNS错误)。
  • Error_code 标签
error_code一个数字,对于不同的错误类型是唯一的
  • Tls_version标签
tls_versionTLS的版本
  • Scenario标签
scenario发出度量衡的场景名称
  • 服务标签
服务gRPC的RPC服务的名称

用户定义的标签

自定义标签允许你根据逻辑对K6对象进行分类。你可以对以下实体进行标记。

  • 请求
  • 检查
  • 阈值
  • 自定义度量

const my_Trend_type = new Trend("trend_metrices");

export let options = {


  thresholds: {

    "http_req_duration": ["p(90)<1000"]

   },

  stages: [

      { duration: '2s', target: 20 }, // simulate ramp-up of traffic from 1

 to 20 users over 2 seconds.

      { duration: '5s', target: 20 }, // stay at 20 users for 5 seconds.

      { duration: '2s', target: 0 }, // ramp-down to 0 users.
  ]
}; 

export default function () {

  // Add tag to request metric data

  const res = http.get("http://httpbin.org/", {

    tags: {

      my_tag: "I'm a tag",

    },

  });

  // Add tag to check

  check(res, { 'status is 200': (r) => r.status === 200 }, { my_tag: "I'm a tag" });

  // Add tag to custom metric

  my_Trend_type.add(res.timings.connecting, { my_tag: "I'm a tag"});

}

k6中的组

组是用来根据共同的逻辑来组织场景的。组可以被嵌套。对于每个group()函数,k6会生成一个group_duration度量,其中包含该组函数的总执行时间。当一个标记的资源(检查、查询或自定义度量)在组中执行时,k6用当前组的名称设置一个标记组。

组在内部执行以下任务。

  • 对于每个group()函数,k6会发出一个group_duration度量,它包含执行该组函数的总时间。
  • 当一个可标记的资源--检查、请求或自定义度量--在一个组内运行时,k6用当前组的名称设置标记组。

让我们通过下面的格式来理解这个组。

import { group } from ‘k6’;



export default function () {


  group(‘visit product website home page’, function () {

    // …

  });

  group(‘visit login page’, function () {

    // …

  });

  group(‘authenticate’, function () {

    // …

  });

  group(‘add product’, function () {

    // …

  });

}

让我们举一个完整的例子,以便更好地理解:


export default function () {


// reconsider this type of code

group('first_group', function () {

  http.get(`https://reqres.in/api/login`);

});
group('second_group', function () {

  const res = http.get(`https://reqres.in/api/login`);

  check(res, {

    'is status 200': (r) => r.status === 200,

  });

});

}

谢谢你!!