大家好,在这篇文章中,我们将讨论和探索更多关于我们最喜欢的性能测试工具Grafana K6中的标签和组。然而,你可能会问情况是什么,为什么我们要使用它们。因此,让我们从标签和组的一些核心基本原理开始。
负载测试经常在一个有多个子系统和资源的服务上进行。这使得我们很难确定导致性能不佳的问题。因此,为了避免这种类型的问题,k6在性能测试中引入了标签和组。
标签对你的检查、阈值、自定义指标和请求进行分类,以便深入过滤,而组则让你对脚本的功能应用标签。
k6中的标签
标签是对k6对象进行分类的一种简单而有效的方法,以便随后对结果进行过滤。
k6提供两种类型的标签。
- 用户定义的 =>
你在编写脚本时添加的标签,和
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_version | TLS的版本 |
- 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,
});
});
}


谢谢你!!