检查
Checks 验证测试中的布尔条件。测试人员通常使用 Checks 来验证系统是否返回了预期内容。例如,一个 Check 可以验证 POST 请求的 response.status == 201
,或者验证响应体是否具有特定大小。
Checks 类似于许多测试框架中的 assert,但失败的 Checks 不会导致测试中止或以失败状态结束。相反,k6 会在测试继续运行时跟踪失败 Checks 的比率。
每个 check 都会创建一个 比率指标。要使 check 导致测试中止或失败,可以将其与 阈值 (Threshold) 结合使用。
检查 HTTP 响应码
Checks 非常适用于编写与 HTTP 请求和响应相关的断言。例如,此代码片段确保 HTTP 响应码为 200
import { check } from 'k6';
import http from 'k6/http';
export default function () {
const res = http.get('http://test.k6.io/');
check(res, {
'is status 200': (r) => r.status === 200,
});
}
检查响应体中的文本
有时,即使是 HTTP 200 响应也可能包含错误消息。在这种情况下,考虑添加一个 check 来验证响应体,如下所示
import { check } from 'k6';
import http from 'k6/http';
export default function () {
const res = http.get('http://test.k6.io/');
check(res, {
'verify homepage text': (r) =>
r.body.includes('Collection of simple web-pages suitable for load testing'),
});
}
检查响应体大小
要验证响应体的大小,可以使用如下 check
import { check } from 'k6';
import http from 'k6/http';
export default function () {
const res = http.get('http://test.k6.io/');
check(res, {
'body size is 11,105 bytes': (r) => r.body.length == 11105,
});
}
查看通过的 Checks 百分比
当脚本包含 Checks 时,摘要报告会显示通过的测试 Checks 数量
$ k6 run script.js
...
✓ is status 200
...
checks.........................: 100.00% ✓ 1 ✗ 0
data_received..................: 11 kB 12 kB/s
在此示例中,请注意 “is status 200” check 在被调用时 100% 成功。
添加多个 Checks
您还可以在单个 check() 语句中添加多个 Checks
import { check } from 'k6';
import http from 'k6/http';
export default function () {
const res = http.get('http://test.k6.io/');
check(res, {
'is status 200': (r) => r.status === 200,
'body size is 11,105 bytes': (r) => r.body.length == 11105,
});
}
当此测试执行时,输出将如下所示
$ k6 run checks.js
...
✓ is status 200
✓ body size is 11,105 bytes
...
checks.........................: 100.00% ✓ 2 ✗ 0
data_received..................: 11 kB 20 kB/s
注意
当一个 check 失败时,脚本将继续成功执行,并且不会返回“失败”的退出状态。如果您需要根据 check 的结果使整个测试失败,则必须将 Checks 与阈值 (thresholds) 结合使用。这在特定场景中特别有用,例如将 k6 集成到 CI 流水线中,或在调度性能测试时接收告警。
阅读更多
- Check Javascript API
- 使用 Checks 使负载测试失败
- k6chaijs: 在 k6 中使用 BDD 断言