在 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 状态码(如 200404 等)。

    • r.status === 200:检查状态码是否为 200(HTTP 成功)。

执行流程:

  1. 当 k6 发送请求后(如 http.get()),会收到响应对象 res

  2. check(res, ...) 对 res 执行验证:

    • 运行函数 (r) => r.status === 200,传入 res 作为 r

    • 若状态码为 200 → 返回 true(检查通过);否则返回 false(检查失败)。

  3. 结果记录:

    • 无论检查是否通过,测试会继续执行(不会因失败而中止)。

    • 结果被统计到 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

注意事项:

  1. 与 fail() 的区别
    check() 只记录结果,如需失败时终止虚拟用户(VU),需结合 fail()

    javascript

    if (!check(res, { 'status is 200': (r) => r.status === 200 })) {
      fail('非 200 响应'); // 强制终止当前 VU 迭代
    }
  2. 性能开销
    在验证函数中避免阻塞操作(如复杂计算),以免影响性能测试准确性。

通过 check(),您可以灵活定义验收条件,并在报告中直观分析系统的可靠性。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐