简介:K6是一个强大的开源负载和性能测试工具,用于测试软件系统的性能和可靠性。K6的使用主要是编写测试脚本并运行,这些脚本主要用JavaScript编写,可以使用HTTP,WebSocket等多种协议进行测试。并且易于安装和运行,而且功能丰富,能够进行复杂的负载测试,测试脚本使用JavaScript编写,可以编写复杂的测试逻辑,模拟真实的用户行为,支持查看和修改源代码。
对比:
JMeter: K6更轻量,更易于自动化。而JMeter虽然功能强大,但是界面复杂,学习曲线较陡峭。
Locust: K6支持更多的协议,如gRPC和WebSocket。
Gatling: K6的测试脚本使用JavaScript编写,比Gatling的Scala更通用,更易学。
历史攻略:
容器化CICD+Locust性能压测
locust2.0+教程:011 - Locust Test Report
locust2.0+教程:012 - 压测websocket
locust2.0+教程:013 - 使用FastHttpUser提升压力机性能
locust2.0+教程:014 - 压测XML-RPC
locust2.0+教程:015 - 压测GRPC
sanic:启动和访问
github项目安装地址:
https://github.com/grafana/k6/releases
安装:
# Debian的Linux系统
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 379CE192D401AB61
echo "deb https://dl.bintray.com/loadimpact/deb stable main" | sudo tee -a /etc/apt/sources.list
sudo apt-get update
sudo apt-get install k6
# Mac
brew install k6
# Windows的 MSI 安装程序
https://github.com/grafana/k6/releases
案例源码:sc.js
import http from 'k6/http';
import { sleep } from 'k6';
export default function () {
http.get('http://test.k6.io');
sleep(1);
}
运行:
# case-1
k6 run sc.js
# case-2
k6 run sc.js -u 100 -d 60s
参数详解:
-u, --vus:同时运行的虚拟用户(VUs)的数量。例如,k6 run --vus 10 script.js将会在执行script.js时使用10个VUs。
-d, --duration:测试的持续时间。例如,k6 run --duration 60s script.js将会运行测试60秒。
-s, --stages:阶段性的负载配置。这允许你在一个测试中改变虚拟用户的数量。例如,k6 run --stages 30s:20,1m:15,30s:10 script.js 将会在前30秒中使用20个VUs,在接下来的1分钟中使用15个VUs,然后在最后的30秒中使用10个VUs。
-i, --iterations:测试执行的总迭代次数。例如,k6 run --iterations 100 script.js将会运行测试直到达到100次迭代。
--paused:开始一个已经暂停的测试。这个选项允许你从K6的HTTP API开始测试。
--no-teardown:禁用teardown阶段。
--no-setup:禁用setup阶段。
-e, --env:设置环境变量。例如,k6 run -e MYVAR=myvalue script.js将会设置一个名为MYVAR的环境变量。
--http-debug:打印调试信息。例如,k6 run --http-debug=full script.js将会打印出所有HTTP请求和响应。
运行结果1:
运行结果2:
被测服务运行情况:
注意事项:
1、K6脚本的执行环境并不是完整的浏览器或Node.js环境,因此不能使用一些特定于这些环境的API。
2、应该尽可能地模拟真实的用户行为。这可能需要生成不同的用户凭证,使用适当的间隔和延迟等。
3、注意观察和解析测试结果。K6生成的详细报告可以帮助理解系统在不同负载下的行为。