Grafana k6 - 新一代性能测试工具
一、什么是k6
简介
k6 是一个免费、开源、高性能的负载测试工具,能有效提高性能测试的生产力。它总结了LoadImpact在负载和性能测试行业的多年经验,提供了简洁、方便的脚本API,支持本地和云端执行,可进行灵活的配置。
k6 支持的功能特性
使用基于ES6语法的编写脚本:支持模块化,以便更好地实现代码复用
所有的东西都是代码:为了版本控制更友好,测试逻辑和配置选项都在JS脚本中
友好:检查和阈值的存在,使得持续化配置构建更加容易
支持HTTP1、HTTP2、WebSocket和gRPC协议
支持TLS:配置客户端证书、SSL/TLS版本以及加密套件
内置支持了很多特性:Cookies、加密、自定义指标、编码、环境变量、JSON、HTML表单等
内置HAR转换器:将浏览器搜集的网络信息har文件直接转换为k6脚本
二、k6的安装
Install k6 | Grafana k6 documentation


(我已经安装过了,所以不再演示。安装过程一路next就可以。)

如图所示,则安装成功!
本地:在本地计算机或 CI 服务器上。
云:在由 k6 Cloud 管理的云基础架构上。
群集:在由您管理的多台计算机上。尚不支持.
三、基础案例
我用的编译器是visualStudioCode,其它类型的编译器也可以,根据读者自己的习惯
import http from 'k6/http';
import { sleep } from 'k6';
export default function () {
http.get('https://test.k6.io');
sleep(1);
}
将js保存在你熟悉的路径下,然后执行
例如,我的文件在D:\visualStudioCode\js存放
所以输入
k6 run D:\visualStudioCode\js\script.js

此时,正在测试,稍等后

其中有很多参数
| 名称 | 类型 | 作用 |
|---|---|---|
| data_received | Counter | 接收的数据量 |
| data_snet | Counter | 发送的数据量 |
| http_req_blocked | Trend | 在启动请求之前,被阻止(等待空闲的 TCP 连接槽位)所花费的时间 |
| http_req_connecting | Trend | 建立与远程主机的 TCP 连接所花费的时间 |
| http_req_duration | Trend | 请求的总时间。它等于http_req_sending + http_req_waiting + http_req_receiving(即,在没有初始 DNS 查找/连接时间的情况下,远程服务器处理请求和响应所需的时间) |
| http_req_failed | Rate | 根据setResponseCallback |
| http_req_receiving | Trend | 从远程主机接收响应数据所花费的时间 |
| http_req_sending | Trend | 将数据发送到远程主机所花费的时间 |
| http_req_tls_handshaking | Trend | 与远程主机握手 TLS 会话所花费的时间 |
| http_req_waiting | Trend | 等待来自远程主机的响应所花费的时间(也称为“第一个字节的时间”或“TTFB”) |
| http_reqs | Counter | k6 生成的 HTTP 请求总数 |
| iteration_duration | Trend | 完成一次完整迭代所花费的时间,包括花费的时间设置和拆卸.要计算特定场景的迭代函数的持续时间 |
| iterations | Counter | VU 执行 JS 脚本的聚合次数(违约函数) |
| vus | Gauge | 当前活动虚拟用户数 |
| vus_max | Gauge | 最大可能数量的虚拟用户(VU 资源是预先分配的,确保在纵向扩展负载级别时不会影响性能) |
输入指令(注意自己保存的script.js文件的路径)
k6 run --vus 20 --duration 20s D:\visualStudioCode\js\script.js

到此为止,你基本上就初步了解了什么是k6以及最简单的案例使用。
post方式如下所示:
import http from 'k6/http';
export default function () {
const url = 'http://192.168.12.146:1040/v1/chat/completions';
const payload = JSON.stringify({
'model': 'qwen',
'messages': [
{
'role': 'user',
'content': '写一篇关于春天的散文,100字左右。'
}
],
'max_tokens': 32768,
'stream': false
});
const params = {
headers: {
'Content-Type': 'application/json',
},
};
let response = http.post(url, payload, params);
const totalDuration = response.timings.duration;
console.log(`VU ${__VU}: 请求网址:${url}`);
console.log(`VU ${__VU}: 响应状态码:${response.status}`);
console.log(`VU ${__VU}: 响应正文:${response.body}`);
console.log(`VU ${__VU}: 总耗时:${totalDuration} 毫秒`);
console.log('----------------------------------------');
}
四、测试类型

烟雾测试角色是验证您的系统是否可以处理最小的负载,而不会出现任何问题。
负载测试主要关注根据每秒并发用户数或请求数评估系统的性能。
压力测试和尖峰测试关注在极端条件下评估系统的极限和稳定性。
浸泡测试告诉您有关系统在较长时间内的可靠性和性能的信息。
烟雾测试
概述
冒烟测试是一种常规负载测试,配置为最小负载。您希望在每次编写新脚本或修改现有脚本时将冒烟测试作为健全性检查。
目的
1、验证测试脚本是否没有错误。
2、验证您的系统在最小负载下不会引发任何错误。
负载测试
概述
负载测试是一种性能测试类型,用于确定系统在正常和峰值条件下的行为。
负载测试用于确保当许多用户同时访问应用程序时,应用程序执行得令人满意。
目的
评估系统在典型负载和峰值负载下的当前性能。
确保在对系统(代码和基础结构)进行更改时继续满足性能标准。
请注意,此测试有一个简单的阈值。99% 请求的响应时间必须低于 1.5 秒。阈值是确保系统满足为其设置的性能目标的一种方式。
阈值是通过/未通过标准,用于指定受测系统的性能预期。
压力测试
概述
压力测试是一种负载测试,用于确定系统的极限。该测试的目的是验证系统在极端条件下的稳定性和可靠性。
目的
您的系统在极端条件下的行为。
就用户或吞吐量而言,系统的最大容量是多少。
系统的断点及其故障模式。
如果您的系统将在压力测试结束后无需手动干预即可恢复。
尖峰测试
概述
尖峰测试是一种压力测试,它会立即通过极端的负载激增使系统不堪重负。
目的
您的系统在流量突然激增的情况下将如何运行。
如果您的系统将在流量消退后恢复。
侵泡测试
概述
浸泡测试可发现由于系统长时间处于压力下而导致的性能和可靠性问题。
可靠性问题通常与错误、内存泄漏、存储配额不足、配置不正确或基础结构故障有关。性能问题通常与不正确的数据库调整、内存泄漏、资源泄漏或大量数据有关。
通过浸泡测试,您可以在短短几个小时内模拟几天的流量。
目的
验证您的系统是否没有受到错误或内存泄漏的影响,这些错误或内存泄漏会导致崩溃或在运行数小时后重新启动。
验证预期的应用程序重新启动不会丢失请求。
查找与偶尔出现的争用条件相关的 Bug。
确保您的数据库不会耗尽分配的存储空间并停止。
确保您的日志不会耗尽分配的磁盘存储。
确保您所依赖的外部服务在执行一定数量的请求后不会停止工作。
更多推荐

所有评论(0)