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 表示用户完整操作链路的平均耗时。

相关推荐
真上帝的左手7 小时前
8. 测试-性能测试-JMeter实战
java·压力测试
烛之武11 小时前
Skywalking服务链路追踪与Jemeter压力测试
压力测试·skywalking
brucelee1861 天前
使用 JMeter 进行 API 压力测试完整指南
jmeter·压力测试
Echoo华地1 天前
Gatling压测案例
java·jmeter·压力测试·并发·scale·压测·gatling
橘子编程1 天前
软件测试全流程实战指南
java·功能测试·测试工具·junit·tomcat·压力测试·可用性测试
汽车仪器仪表相关领域1 天前
广州文明机电 新能源汽车运行安全性能检验解决方案
人工智能·功能测试·安全·单元测试·汽车·压力测试·可用性测试
5系暗夜孤魂6 天前
当系统不再“透明”:从 Java 技术体系看大型工程的可观测性与可掌控性
java·python·压力测试
lifewange7 天前
Appium是什么
appium·压力测试
TaiChangYiQi7 天前
成都纸箱抗压机哪家好
压力测试