K6性能测试及生成Html压测报告

一、引言:

k6是一款开源负载测试工具,由Grafana Labs开发维护,专注于现代云环境和微服务架构 的高并发压测。它采用Go语言编写,使用JavaScript(ES6)作为脚本语言。还提到它特别适合CI/CD集成和自动化性能测试。

二、下载安装:

https://github.com/grafana/k6/releases

下载后直接安装即可

三、运行:

cmd打开命令行,输入:k6,验证是否安装成功

四、编写压测脚本

命名js脚本名称为demo.js

javascript 复制代码
// 使用 require 引入 k6 模块
const http = require('k6/http');
const { check } = require('k6');

// 引入远程报告生成模块(使用 require)
const { htmlReport } = require('https://raw.githubusercontent.com/benc-uk/k6-reporter/main/dist/bundle.js');

// 配置选项(保持 export 不变)
export const options = {
  vus: 30,
  duration: '60s',
  thresholds: {
    http_req_duration: ['p(95)<500'],
    http_req_failed: ['rate<0.01'],
  },
};

// 主测试函数(VU 执行的代码)
export default function () {
  // 根据数据内容,这里应该是 POST 请求
  const res = http.get(
    'http://127.0.0.1:5012/products',
  
    {
      headers: { 'Content-Type': 'application/json' },
    }
  );

  check(res, {
    'status is 200': (r) => r.status === 200,
  });
}

// 摘要报告函数(必须定义在全局)
export function handleSummary(data) {
  return {
    'D:\summary.html': htmlReport(data), // 输出报告到指定路径
  };
}

五、运行脚本:

javascript 复制代码
k6 run C:\Users\Administrator\Desktop\demo.js

六、生成压测报告路径

七、查看压测报告:

八、HTTP 请求各阶段耗时指标​​

  1. http_req_duration
    含义:HTTP 请求总耗时,从请求开始到完整接收响应的时间(包含 http_req_sending、http_req_waiting、http_req_receiving)。
    计算公式:http_req_sending + http_req_waiting + http_req_receiving。
    分析重点:
    系统整体性能:若该值过高,表明请求处理链路存在瓶颈(如网络延迟、服务器处理慢)。
    百分位数(p90/p95):反映高延迟请求的分布(例如 p(90)=500ms 表示 90% 请求耗时 ≤500ms)。
  2. http_req_waiting
    含义:服务器处理时间(TTFB, Time to First Byte),即从发送请求到接收到服务器第一个字节的耗时。
    关键场景:
    若该值过高 → 服务器处理能力不足(如 CPU 过载、数据库查询慢)。
    示例:avg=150ms 表示平均等待服务器响应 150ms。
  3. http_req_connecting
    含义:TCP 连接建立时间,从发起请求到完成 TCP 握手的时间。
    问题定位:
    高值 → DNS 解析慢或网络路由问题(如跨地域请求)。
    示例:max=100ms 表示最慢一次 TCP 连接耗时 100ms。
  4. http_req_tls_handshaking
    含义:TLS/SSL 握手时间,仅在使用 HTTPS 时出现。
    优化方向:
    高值 → 服务器证书配置问题(如密钥过长、未启用会话复用)。
    示例:avg=50ms 表示平均 TLS 握手耗时 50ms。
  5. http_req_sending
    含义:请求发送时间,从开始发送请求头到完成发送请求体的耗时。
    影响因素:
    请求体大小(如上传大文件时该值较高)。
    通常较低(毫秒级),若异常高 → 客户端网络问题。
  6. http_req_receiving
    含义:响应接收时间,从接收第一个响应字节到完整接收响应体的耗时。
    关联因素:
    响应体大小(如下载大文件时该值显著升高)。
    示例:avg=200ms 表示平均接收数据耗时 200ms。
    二、请求阻塞与迭代整体耗时
  7. http_req_blocked
    含义:请求阻塞时间,包括 DNS 查询、TCP 连接等待、TLS 握手前的等待。
    常见原因:
    高值 → 客户端资源不足(如线程池耗尽)或网络防火墙拦截。
    示例:p(95)=300ms 表示 95% 的请求阻塞时间 ≤300ms。
  8. iteration_duration
    含义:单次迭代总耗时,包含脚本逻辑执行(如多个 HTTP 请求)和 sleep() 等待时间。
    与 http_req_duration 区别:
    一个迭代可能包含多个 HTTP 请求(如登录→查询→登出)。
    示例:avg=1.2s 表示用户完整操作链路的平均耗时。

相关推荐
Gensors传感器7 小时前
Kulite传感器——助力汽车变速箱油压测试 | 邦盟集成方案
汽车·压力测试·变速箱·汽车变速箱·kulite·库里特·油价上涨
while(1){yan}1 天前
个人抽奖系统测试报告
spring boot·java-ee·压力测试
汽车仪器仪表相关领域2 天前
液力传动精准标定 + 智能换挡控制,动力总成测试新高度:GZCVL T‑IV 变矩器变速箱测试系统实战全解
功能测试·单元测试·汽车·压力测试·可用性测试·安全性测试
Saniffer_SH2 天前
【高清视频】AI服务器调试利器:PCIe功耗分析设备 Quarch PAM 深度解析
网络·人工智能·驱动开发·嵌入式硬件·测试工具·计算机外设·压力测试
川石课堂软件测试3 天前
接口测试需要注意的一些BUG
网络·数据库·python·单元测试·bug·压力测试·tornado
daopuyun3 天前
出具CNAS软件测试报告的14个标准化流程
压力测试·cnas测试报告
汽车仪器仪表相关领域4 天前
全工况精准标定 + 智能安全防护,建筑机械防坠生命线:GZCVL T‑II 安全防坠器测试系统实战全解
功能测试·测试工具·安全·单元测试·汽车·压力测试·可用性测试
ryan007liu6 天前
shell 批量执行locust 脚本压测
linux·服务器·压力测试