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

相关推荐
Saniffer_SH17 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试
糖果店的幽灵18 天前
软件测试接口测试从入门到精通:JMeter接口测试
软件测试·jmeter·接口测试·压力测试·性能测试
wenying_4432374420 天前
软件测试—JMeter—跨线程组关联
jmeter·压力测试
HBYKKJ21 天前
格雷希尔G70-370L050N定制款密封测试接头,专门针对法兰式凸缘管口而设计,解决SF6压力表的气密性测试难题
功能测试·压力测试·快速接头·气密性测试·密封测试接头
不剪发的Tony老师21 天前
SQLQueryStress:一款SQL Server查询压力测试工具
数据库·sqlserver·压力测试
AI thought22 天前
C语言企业项目实战(四)
c语言·单元测试·压力测试·企业项目·工程体系
测试199823 天前
Jmeter性能压测:TPS与QPS
自动化测试·软件测试·python·jmeter·测试用例·压力测试·性能测试
wenying_4432374424 天前
软件测试—Jmeter后置处理器—正则表达式提取器
jmeter·压力测试
暗冰ཏོ24 天前
软件测试完整学习指南:从入门到自动化、性能与安全测试实战
软件测试·功能测试·单元测试·集成测试·压力测试·测试·安全性测试
汽车仪器仪表相关领域24 天前
南华 NHASM-1 型稳态工况法汽车排气检测系统|国标合规汽油车工况检测专用设备
功能测试·安全·单元测试·汽车·压力测试·可用性测试