详解性能测试工具k6脚本中的check() 函数用法
check()是k6性能测试中的核心验证函数,用于检查HTTP响应等对象是否符合预期条件。它不会中断测试流程但会记录结果,语法为check(target, checks),其中target是待验证对象,checks是包含验证条件(键值对)的对象。验证条件包括描述性键名和返回布尔值的验证函数。该函数支持多条件检查(如状态码、响应时间、JSON数据等),结果会统计到测试报告中。与断言不同,check(
在 k6 中,check()
函数是 性能测试脚本的核心验证工具,用于检查 HTTP 响应(或其他对象)是否符合预期条件。它不会中断测试流程(不同于断言),但会记录验证结果并生成测试报告。以下是您提供的代码的详细解析:
check(res, {
'status is 200': (r) => r.status === 200,
});
语法分解:
check(target, checks)
函数
-
target
:待验证的对象(通常是 HTTP 响应对象res
)。 -
checks
:一个 JavaScript 对象,包含一组键值对,定义多个检查条件。
检查项对象 { key: function }
- 键(Key):
'status is 200'
描述性字符串,作为报告中的检查项标识(如测试报告中会显示此项名称)。 - 值(Value):
(r) => r.status === 200
验证函数(箭头函数),接收target
(此处即res
)作为参数r
,返回布尔值。
验证函数逻辑
-
(r) => r.status === 200
-
r
:HTTP 响应对象(传递的是res
的引用)。 -
r.status
:获取响应的 HTTP 状态码(如200
、404
等)。 -
r.status === 200
:检查状态码是否为200
(HTTP 成功)。
-
执行流程:
-
当 k6 发送请求后(如
http.get()
),会收到响应对象res
。 -
check(res, ...)
对res
执行验证:-
运行函数
(r) => r.status === 200
,传入res
作为r
。 -
若状态码为
200
→ 返回true
(检查通过);否则返回false
(检查失败)。
-
-
结果记录:
-
无论检查是否通过,测试会继续执行(不会因失败而中止)。
-
结果被统计到 k6 报告中,显示通过率(如
✓ status is 200
)。
-
关键特性:
特性 | 说明 |
---|---|
非中断性 | 检查失败不会停止测试(适合性能测试场景)。 |
结果统计 | 在终端输出和 HTML 报告中显示每个检查项的通过率/失败率。 |
多条件检查 | 可同时验证多个条件(见下方扩展示例)。 |
支持自定义逻辑 | 可在验证函数内编写复杂逻辑(如 JSON 解析、响应时间检查等)。 |
扩展示例:多条件检查
import http from 'k6/http';
export default function () {
const res = http.get('https://test-api.k6.io/public/crocodiles/');
// 同时验证状态码、响应时间和 JSON 数据
check(res, {
'status is 200': (r) => r.status === 200,
'response time < 500ms': (r) => r.timings.duration < 500, // 检查响应耗时
'has crocodile data': (r) => {
const body = JSON.parse(r.body); // 解析 JSON
return body.length > 0; // 验证返回的鳄鱼列表非空
},
});
}
报告输出示例:
✓ status is 200 ✗ response time < 500ms → 65% — ✓ 33 / ✗ 17 ✓ has crocodile data
注意事项:
-
与
fail()
的区别:check()
只记录结果,如需失败时终止虚拟用户(VU),需结合fail()
:javascript
if (!check(res, { 'status is 200': (r) => r.status === 200 })) { fail('非 200 响应'); // 强制终止当前 VU 迭代 }
-
性能开销:
在验证函数中避免阻塞操作(如复杂计算),以免影响性能测试准确性。
通过 check()
,您可以灵活定义验收条件,并在报告中直观分析系统的可靠性。
更多推荐
所有评论(0)