附录J:接口与性能测试

CukeTest 支持结合 k6 负载引擎开展接口功能测试与性能压测。安装 k6 Dashboard & Runner 扩展后,可以直接在编辑器内编写测试脚本、启动压测,并查看实时监控仪表盘与 HTML 测试报告。

k6 Dashboard

一、概述与工作机制

k6 是轻量且高性能的接口与负载测试引擎,测试脚本基于 JavaScript 或 TypeScript 编写。在实际测试中,同一套脚本既能单次执行校验接口功能,也能配置并发参数直接开展性能压测:

  • 接口测试:发送请求并通过 check 验证状态码、响应正文及业务字段,配合 thresholds 设置测试门禁。
  • 性能测试:通过设置虚拟用户(VU)、加压阶段(Stages)或场景(Scenarios),模拟高并发与持续运行,统计吞吐量(RPS)、响应耗时和百分位时延。

二、安装与环境准备

在开展测试前,需要准备好 k6 引擎与 CukeTest 扩展:

  1. 安装 k6 引擎:本地安装 k6(可从 k6 官网 下载),并确保其在系统 PATH 中,或在扩展设置中手动指定 k6 可执行文件路径。
  2. 安装扩展插件:在 CukeTest 扩展面板中搜索并安装 k6 Dashboard & Runner
  3. 运行配置:支持按需自定义 k6 可执行文件路径、仪表盘端口以及采样周期。

三、编写测试脚本

1. 常用协议支持

k6 原生支持常见的网络协议:

协议类型 支持方式 说明
HTTP / HTTPS 原生内置 支持 GET、POST、PUT、DELETE 等常用方法,以及 Header、Cookie 和 TLS 配置
WebSocket 原生内置 支持双向通信、消息收发与连接保活
gRPC 原生内置 支持基于 Protocol Buffers 的 RPC 调用

2. 检查点(Check)与测试门禁(Thresholds)

测试脚本中主要通过两项机制来判定系统表现是否达标:

  • Check(检查点):针对单次请求进行断言,比如检查 HTTP 状态码或响应内容。检查失败不会中断压测执行,只会统计到失败率中。
  • Thresholds(阈值):设定整个测试运行的合格指标(例如“95% 的请求响应时间低于 500ms”或“错误率低于 0.5%”)。任何一项阈值不满足,测试结束时都会返回非零状态码,直接阻断流水线。

3. 多阶段加压模型(Stages)

压测通常不是一上来就打满并发。通过 stages 配置,可以模拟真实的流量变化过程:

  • 预热:并发数平缓上升,让数据库连接池和应用缓存建立起来。
  • 持续负载:保持目标并发稳定运行一段时间,观察系统吞吐与稳定性。
  • 流量峰值(浪涌):短时间内把并发拉到高位,测试服务的瞬时抗压能力。
  • 降压收尾:逐步释放连接,确认服务在压力回落后资源能否正常回收。

4. 指标体系与自定义指标

压测时 k6 会自动收集网络与请求指标:

指标名称 含义 说明
http_reqs 请求数与请求速率(RPS) 统计每秒发送和完成的请求量
http_req_duration 响应耗时 涵盖网络连接、服务端处理及数据传输的总耗时
http_req_failed 失败率 发生超时或返回错误状态码的请求比例
vus / vus_max 并发用户数 当前活跃及配置的最大虚拟用户数
data_received / data_sent 网络传输量 上行与下行流量统计
iterations 迭代次数 脚本完整跑完的次数,可反映业务事务速率(TPS)

百分位时延

平均响应时间容易被极端慢请求拉偏,实际分析中通常更看重百分位指标:

  • P50:中位数,代表一半用户的体验。
  • P90 / P95:常作为接口响应达标的基准线。
  • P99:长尾延迟,帮助发现偶发的性能抖动或锁竞争。

自定义业务指标

除了底层网络请求指标,很多时候还需要关注上层业务行为(比如“下单成功率”或“支付耗时”)。k6 提供了几类自定义指标:

自定义业务指标定义与测试配置

  • Counter(计数器):累计计数,如业务失败总笔数。
  • Rate(比例):统计百分比,如特定业务流程的成功率。
  • Trend(耗时趋势):统计平均值及各百分位耗时,如订单处理时间。
  • Gauge(仪表值):记录瞬时值,如当前连接数或剩余库存。

5. 结合智能体编写与调优脚本

编写复杂的加压逻辑或处理长接口链时,可以让 CukeTest 智能体 协助:

  • 从接口定义生成脚本:将 Swagger/OpenAPI 文档、cURL 命令或接口说明直接发给智能体,让其生成带有请求、参数和 check 断言的测试脚本。
  • 配置加压策略与阈值:用自然语言说明测试目标(例如“压测 5 分钟,先从 0 爬升到 100 VU,P95 响应时间不能超过 200ms”),由智能体转换成对应的 stagesthresholds 配置。
  • 关联传参与错误排查:协助处理登录 Token 提取、数据驱动参数化,并在脚本报错时快速定位问题。

四、测试执行与结果分析

脚本编写完成后,可以在扩展仪表盘中选择本地脚本启动压测,并支持随时停止任务。

1. 实时监控看板

测试运行时,扩展面板会实时呈现各项关键指标走势:

  • 实时概况:当前的并发数(VU)、请求吞吐(RPS)及整体错误率。
  • 时延曲线:实时响应耗时以及 P90、P95 曲线,方便定位耗时突增的时间点。
  • 状态码分布:直观查看 2xx 成功请求与 4xx/5xx 异常比例。
  • 自定义指标:按业务模块分别查看成功率和处理耗时。

Web Dashboard 实时监控概览

2. 离线 HTML 报告

压测结束后,扩展会在脚本目录下生成一份单文件 HTML 报告,可以在面板中单击直接打开查看。报告包含完整的时序图表与各项指标统计,可直接分享或归档:

k6 HTML 测试报告总览

k6 测试报告指标汇总统计

五、分布式执行分片

如果单台机器的 CPU 或网络带宽跑不满目标压力,可以利用 k6 的执行分片(Execution Segment)机制,将测试负载横向拆分到多台机器执行:

  • 按比例分片:把总体并发按比例切分,各节点分别运行自己的分片任务。
  • 多机协同发压:各执行节点配置相同的测试脚本,接收统一指令后同时进入加压阶段,合力达到预期并发规模。

六、与 GUI 自动化的分工协同

在完整的测试工程中,不同层级的测试侧重点各有不同:

测试类型 侧重点 优势与局限 典型场景
接口测试 数据校验、状态流转、异常边界 执行极快,定位精准,但无法验证界面渲染和前端交互 日常构建验证、代码合并门禁
性能测试 系统承载力、并发时延、服务稳定性 能模拟大量并发流量,但需要专门规划加压模型与资源环境 容量评估、架构调优、大促与上线前压测
GUI 自动化测试 真实用户体验、跨页面流程闭环 最贴近用户操作,但执行时间较长、维护成本较高 核心业务冒烟、主流程回归

实际落地时,通常建议分层实施:先用接口测试覆盖大部分业务逻辑和异常分支,确保核心服务可用;在此基础上复用脚本执行基准压测;最后通过 CukeTest 的 桌面与 Web 自动化能力 跑通关键的 UI 端到端主流程。

results matching ""

    No results matching ""