一、K6是什么?
k6是一个现代的、开源的性能测试工具,用于测试和评估Web应用程序的性能。它是一个命令行工具,使用JavaScript或TypeScript编写测试脚本。k6专注于开发人员友好性和简单性,使其易于使用和集成到持续集成/持续交付(CI/CD)流程中。
以下是k6的一些主要特点:
JavaScript/TypeScript编写: k6测试脚本使用JavaScript或TypeScript编写,这使得它对于许多开发人员来说是非常熟悉和易于上手的。
负载生成: k6可以模拟大量用户同时访问你的Web应用程序,从而帮助你评估应用程序在高负载下的性能表现。
HTTP请求: k6支持发送各种类型的HTTP请求,包括GET、POST等,以模拟真实用户与Web服务器的交互。
WebSocket支持: 除了HTTP请求,k6还支持WebSocket,可以用于测试实时应用程序,如聊天应用或实时协作工具。
图形化输出: k6提供了直观的图形化输出,包括性能指标和结果,以便更容易地分析和理解性能测试的结果。
分布式执行: k6支持在多台机器上分布式执行测试,这对于模拟大规模用户负载非常有用。
插件系统: k6具有可扩展的插件系统,允许用户根据需要扩展和定制功能。
总体而言,k6是一个强大而灵活的工具,适用于开发人员和测试人员,用于评估Web应用程序在不同负载下的性能表现。
二、K6的安装
sudo dnf install https://dl.k6.io/rpm/repo.rpm
sudo dnf install k6
参考:https://k6.io/docs/get-started/installation/
三、K6的使用
1、编写test.js脚本
import http from "k6/http";
import {group, check} from "k6";
export let options = {
stages: [
{duration: '30s', target: 5},
{duration: '30s', target: 20},
{duration: '30s', target: 50},
{duration: '60s', target: 100},
]
};
export default function () {
group('html page', function () {
const res = http.get("http://www.xxx.com/about");
check(res, {
"status was 200": (r) => r.status === 200
});
});
};
这个脚本是用于使用 k6 对网站进行负载测试的,k6 是一个流行的开源负载测试工具。
以下是脚本的功能:
1. 它从 k6 导入必要的模块:`http` 用于发出 HTTP 请求,`check` 用于验证响应。
2. 它在 `options` 对象中定义了测试的负载配置。测试将从 30 秒的 5 个虚拟用户开始,然后在接下来的 30 秒内增加到 20 个用户,再在接下来的 30 秒内增加到 50 个用户,最后在 60 秒内增加到 100 个用户。
3. `default` 函数是测试的入口点。它定义了每个虚拟用户在测试期间将执行的操作。
4. 在 `default` 函数内部,它将操作分组在 'html page' 下。这对于组织测试结果非常有用。
5. 它向网站的 "/about" 页面发送 GET 请求(将 "www.xxx.com" 替换为你要测试的实际网站)。
6. 它检查响应状态码以确保它是 200(HTTP OK)。如果状态码不是 200,检查将失败,并在测试结果中报告失败。
2、运行Web负载测试、指明influxdb信息
k6 run --out influxdb=http://106.14.67.15:8086/load_test index.js
[root@ELK-Master k6]# k6 run --out influxdb=http://106.14.67.15:8086/load_test index.js
/ |‾‾| /‾‾/ /‾‾/
/ / | |/ / / /
/ / | ( / ‾‾
/ | | | (‾) |
/ __________ |__| __ _____/ .io
execution: local
script: index.js
output: InfluxDBv1 (http://106.14.67.15:8086)
scenarios: (100.00%) 1 scenario, 100 max VUs, 3m0s max duration (incl. graceful stop)
* default: Up to 100 looping VUs for 2m30s over 4 stages (gracefulRampDown: 30s, gracefulStop: 30s)
█ html page
✓ status was 200
checks.........................: 100.00% ✓ 6002 ✗ 0
data_received..................: 34 MB 530 kB/s
data_sent......................: 524 kB 8.2 kB/s
group_duration.................: avg=86.04ms min=21.73ms med=35.59ms max=1.99s p(90)=178.68ms p(95)=360.78ms
http_req_blocked...............: avg=378.7µs min=542ns med=1.91µs max=88.07ms p(90)=2.61µs p(95)=3.23µs
http_req_connecting............: avg=365.52µs min=0s med=0s max=51.53ms p(90)=0s p(95)=0s
http_req_duration..............: avg=85.57ms min=21.62ms med=35.34ms max=1.99s p(90)=177.92ms p(95)=360.72ms
{ expected_response:true }...: avg=85.57ms min=21.62ms med=35.34ms max=1.99s p(90)=177.92ms p(95)=360.72ms
http_req_failed................: 0.00% ✓ 0 ✗ 6002
http_req_receiving.............: avg=52.9ms min=12.44µs med=2.17ms max=1.95s p(90)=142.23ms p(95)=294.33ms
http_req_sending...............: avg=10.51µs min=2.82µs med=8.62µs max=295.55µs p(90)=12.89µs p(95)=22.87µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=32.65ms min=21.26ms med=28.11ms max=729.15ms p(90)=35.89ms p(95)=38.79ms
http_reqs......................: 6002 93.535367/s
iteration_duration.............: avg=86.05ms min=21.75ms med=35.6ms max=1.99s p(90)=178.69ms p(95)=360.79ms
iterations.....................: 6002 93.535367/s
vus............................: 23 min=1 max=23
vus_max........................: 100 min=100 max=100
running (1m04.2s), 000/100 VUs, 6002 complete and 24 interrupted iterations
default ✗ [===============>----------------------] 003/100 VUs 1m04.2s/2m30.0s
三、配置Grfana的展示
导入模板ID:2587,效果如下:
参考链接:
https://www.leeguangxing.cn/blog_post_76.html
https://blog.csdn.net/weixin_55018452/article/details/129054327
在此特别鸣谢参考链接原作者的创作。