K6 性能测试教程:入门介绍,环境搭建和编写第一个 K6 测试脚本

K6 性能测试教程:入门介绍,环境搭建和编写第一个 K6 测试脚本

这篇文章将带您进入 K6 性能测试的世界。博文内容涵盖了 K6 性能测试的入门知识、环境搭建步骤,以及如何编写您的第一个测试脚本。无论您是初学者还是有经验的性能测试专业人员,这篇教程都将为您提供清晰的指导,帮助您快速上手 K6,并开始构建高效的性能测试脚本

什么是 K6

k6 是一款用于性能测试和负载测试的开源工具,主要用于评估和验证应用程序的性能和稳定性。以下是关于 k6 的一些主要特点和信息:

  1. 开源性: k6 是一款完全开源的性能测试工具,代码存储在 GitHub 上。这意味着用户可以自由访问、使用和修改工具的源代码。

  2. JavaScript 编写脚本: k6 使用 JavaScript 语言编写测试脚本,这使得编写测试用例相对简单,并且对于开发人员而言更加友好。脚本可以包含 HTTP 请求、WebSocket 连接、脚本执行逻辑等。

  3. 支持多种协议: k6 支持多种常见的协议,包括 HTTP、WebSocket、Socket.IO、gRPC 等,使其可以广泛应用于各种类型的应用程序。

  4. 分布式测试: k6 具有分布式测试的能力,允许在多个节点上运行测试,从而模拟更真实的生产环境负载。

  5. 实时结果和报告: k6 提供实时结果,包括请求响应时间、吞吐量等,并能够生成详细的 HTML 报告,帮助用户更好地理解应用程序的性能状况。

  6. 容器化支持: k6 适应容器化环境,可以轻松集成到 CI/CD 流水线中,并与常见的容器编排工具(如 Kubernetes)配合使用。

  7. 插件生态系统: k6 支持插件,用户可以通过插件扩展其功能,满足特定需求。

  8. 活跃的社区: 由于 k6 是一个开源项目,拥有一个积极的社区,提供支持、文档和示例,使用户更容易上手和解决问题。

总体而言,k6 是一个灵活、强大且易于使用的性能测试工具,适用于各种规模的应用程序和系统。

官方网站及文档

• 官方网站

• 官方文档

安装

Mac 系统安装

Mac 系统可以通过 Homebrew 安装 k6:

brew install k6

Windows 系统安装

Windows 系统可以通过 Chocolatey 安装 k6:

choco install k6

或者通过 winget 安装 k6:

winget install k6

Docker 安装

k6 也可以通过 Docker 安装:

docker pull grafana/k6

其他系统安装

K6 除了支持上述系统外,还支持 Linux(Debian/Ubuntu/Fedora/CentOS),也支持下载 K6 二进制文件和 K6 扩展进行安装,具体安装方式请参考官方文档。

确认 K6 安装成功

安装完成后,可以通过以下命令确认 k6 是否安装成功:

k6 version

如果安装成功,会显示 k6 的版本信息:

图片

第一个 K6 测试脚本

编写第一个测试脚本

新建一个 K6 性能测试项目目录并进入

mkdir k6-demo

cd k6-demo

创建一个名为 demo.js 的文件,用于编写测试脚本

• 可以通过 k6 new 命令创建一个测试脚本文件:

k6 new demo.js

• 也可以直接创建一个名为 demo.js 的测试脚本文件

touch demo.js

编辑测试脚本

如果是通过 k6 new 命令创建的测试脚本文件,会自动生成一个简单的测试脚本,如下所示:

import http from 'k6/http';
import { sleep } from 'k6';export const options = {// A number specifying the number of VUs to run concurrently.vus: 10,// A string specifying the total duration of the test run.duration: '30s',// The following section contains configuration options for execution of this// test script in Grafana Cloud.//// See https://grafana.com/docs/grafana-cloud/k6/get-started/run-cloud-tests-from-the-cli/// to learn about authoring and running k6 test scripts in Grafana k6 Cloud.//// ext: {//   loadimpact: {//     // The ID of the project to which the test is assigned in the k6 Cloud UI.//     // By default tests are executed in default project.//     projectID: "",//     // The name of the test in the k6 Cloud UI.//     // Test runs with the same name will be grouped.//     name: "demo.js"//   }// },// Uncomment this section to enable the use of Browser API in your tests.//// See https://grafana.com/docs/k6/latest/using-k6-browser/running-browser-tests/ to learn more// about using Browser API in your test scripts.//// scenarios: {//   // The scenario name appears in the result summary, tags, and so on.//   // You can give the scenario any name, as long as each name in the script is unique.//   ui: {//     // Executor is a mandatory parameter for browser-based tests.//     // Shared iterations in this case tells k6 to reuse VUs to execute iterations.//     ////     // See https://grafana.com/docs/k6/latest/using-k6/scenarios/executors/ for other executor types.//     executor: 'shared-iterations',//     options: {//       browser: {//         // This is a mandatory parameter that instructs k6 to launch and//         // connect to a chromium-based browser, and use it to run UI-based//         // tests.//         type: 'chromium',//       },//     },//   },// }
};// The function that defines VU logic.
//
// See https://grafana.com/docs/k6/latest/examples/get-started-with-k6/ to learn more
// about authoring k6 scripts.
//
export default function() {http.get('https://test.k6.io');sleep(1);
}

如果是直接创建的测试脚本文件,可以将上述内容复制到 demo.js 文件中。

运行测试脚本

在 demo.js 文件所在目录下,运行以下命令:

k6 run demo.js

查看测试结果

如果一切正常,会看到类似如下的输出:

图片

包含以下信息:

• execution: 执行信息,包括开始时间、结束时间、持续时间、VU 数量、迭代次数等。

• scenarios: 场景信息,包括场景名称、VU 数量、迭代次数、持续时间、平均响应时间、吞吐量等。

• http_reqs: HTTP 请求信息,包括请求名称、请求数量、失败数量、平均响应时间、吞吐量等。

解析 demo 测试脚本

• import http from ‘k6/http’;:导入 k6 的 HTTP 模块,用于发送 HTTP 请求。

• import { sleep } from ‘k6’;:导入 k6 的 sleep 方法,用于执行脚本等待。

• export const options = { … }:定义测试脚本的配置项,包括 VU 数量、持续时间等。

• vus: 10,:定义 VU 数量为 10(指定并发运行的 VU 数量)。

• duration: ‘30s’,:定义持续时间为 30 秒(指定测试运行总持续时间)。

• export default function() { … }:定义测试脚本的逻辑,包括发送 HTTP 请求、执行等待等。

• http.get(‘https://test.k6.io’);:发送一个 GET 请求到 https://test.k6.io。

• sleep(1);:执行等待 1 秒。

其他注释内容可以忽略,这些内容是关于 k6 的一些高级功能,后续会介绍。

参考文档

• K6 文档:https://k6.io/docs/

• k6 官方网站:https://k6.io/

• K6 性能测试快速启动项目:https://github.com/Automation-Test-Starter/K6-Performance-Test-starter/

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/864921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解C语言分支与循环语句

分支语句 if elseswitch 循环语句 whilefordo while goto语句 文章目录 1.什么是语句2.分支语句(选择结构)2.1 if语句2.1.1 悬空else2.1.3 练习 2.2 switch语句2.2.1 在switch语句中的break2.2.2 default子句 3.循环语句3.1 while循环3.1.1 while语句中…

【Linux进程通信】使用匿名管道制作一个简单的进程池

进程池是什么呢?我们可以类比内存池的概念来理解进程池。 内存池 内存池是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继…

web权限到系统权限 内网学习第一天 权限提升 使用手工还是cs???msf可以不??

现在开始学习内网的相关的知识了,我们在拿下web权限过后,我们要看自己拿下的是什么权限,可能是普通的用户权限,这个连添加用户都不可以,这个时候我们就要进行权限提升操作了。 权限提升这点与我们后门进行内网渗透是乘…

MySQL:设计数据库与操作

设计数据库 1. 数据建模1.1 概念模型1.2 逻辑模型1.3 实体模型主键外键外键约束 2. 标准化2.1 第一范式2.2 链接表2.3 第二范式2.4 第三范式 3. 数据库模型修改3.1 模型的正向工程3.2 同步数据库模型3.3 模型的逆向工程3.4 实际应用建议 4. 数据库实体模型4.1 创建和删除数据库…

Linux 磁盘空间清理

1.检查磁盘使用情况 #显示每个挂载点的磁盘使用量,以及可用空间和使用率 df -h #显示当前目录的全部文件和目录(包括隐藏的),以MB显示 ll -h 2. du查看最大的目录或文件 #逐级检查某个目录下各个子目录的大小。从根目录开始,逐级…

基于x86+FPGA+AI轴承缺陷视觉检测系统,摇枕弹簧智能检测系统

一、承缺陷视觉检测系统 应用场景 轴类零件自动检测设备,集光、机、软件、硬件,智能图像处理等先进技术于一体,利用轮廓特征匹配,目标与定位,区域选取,边缘提取,模糊运算等算法实现人工智能高…

提高候选人的招聘感受:成功的策略

大约78%的候选人表示,他们的整体应聘体验表明企业对员工的关注。然而,超过一半的候选人透露,他们在招聘过程中有过负面的候选人经历,80%的候选人在经历了令人失望的招聘过程后会公开与他人分享他们的不良经历。 但也有一线希望&am…

某某市信息科技学业水平测试软件打开加载失败逆向分析(笔记)

引言:笔者在工作过程中,用户上报某某市信息科技学业水平测试软件在云电脑上打开初始化的情况下出现了加载和绑定机器失败的问题。一般情况下,在实体机上用户进行登录后,用户的账号信息跟主机的机器码进行绑定然后保存到配置文件&a…

第十四届蓝桥杯省赛C++B组E题【接龙数列】题解(AC)

需求分析 题目要求最少删掉多少个数后,使得数列变为接龙数列。 相当于题目要求求出数组中的最长接龙子序列。 题目分析 对于一个数能不能放到接龙数列中,只关系到这个数的第一位和最后一位,所以我们可以先对数组进行预处理,将…

C++初学者指南-3.自定义类型(第一部分)-析构函数

C初学者指南-3.自定义类型(第一部分)-析构函数 文章目录 C初学者指南-3.自定义类型(第一部分)-析构函数特殊的成员函数用户定义的构造函数和析构函数RAII示例:资源处理示例:RAII记录零规则 特殊的成员函数 T::T()默认构造函数当创建新的 T 对象时运行。…

电脑录音方法:电脑怎么录音?5招轻松搞定录音!

想要从麦克风或系统音频录制电脑声音吗?这是一项简单的任务。本文将为您介绍5种最佳且最简单的方法,包括使用Windows系统自带的录音工具来录制电脑音频,在线音频录音软件和专业的第三方电脑录音软件。这些工具都能够很好地帮助您完成电脑怎么…

一款十六进制编辑器,你的瑞士军刀!!【送源码】

软件介绍 ImHex是一款功能强大的十六进制编辑器,专为逆向工程师、程序员以及夜间工作的用户设计。它不仅提供了基础的二进制数据编辑功能,还集成了一系列高级特性,使其成为分析和修改二进制文件的理想工具。 功能特点 专为逆向工程、编程和夜…

verilog实现PID控制

1 原理讲解 距离上一次说PID算法的事情过去蛮久了,今天又重新看了看PID的代码,其实还是存在一些不合理的地方。 整理归纳了一下原理,位置式和增量式的变化。 2 工程实现 timescale 1ns / 1psmodule pid_controller(input clk,input r…

【ARM系列】GIC600AE功能安全

GIC600AE在原GIC600版本基础上增加了FuSa功能,所增加的FuSa特性都集成在GIC600外围,不会改变原GIC600的功能。 GIC600AE主要安全机制分布图: GIC-600AE包含以下FuSa安全机制: lockstep logic protection 通过添加duplication l…

C++ 类与对象(中)

C 类与对象(中) 1. 类的6个默认成员函数2. 构造函数2.1 概念2.2 特性 3.析构函数3.1 概念3.2 特性 4. 拷贝构造函数4.1 概念4.2 特征 5.赋值运算符重载5.1 运算符重载5.2 赋值运算符重载 1. 类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c…

数据库操作-DML和DQL

DML DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。 添加数据(INSERT) 1.指定字段添加数据: insert into 表名 ( 字段名 1, 字段名 2) values ( 值 1, 值 2); 2…

【面试题】TLS和SSL协议的区别

TLS(Transport Layer Security)和SSL(Secure Sockets Layer)协议都是用于在网络上建立安全通信连接的协议,但它们在多个方面存在区别。以下是TLS和SSL协议之间区别的详细分析: 1. 发展历程与标准化 SSL&a…

企业本地大模型用Ollama+Open WebUI+Stable Diffusion可视化问答及画图

最近在尝试搭建公司内部用户的大模型,可视化回答,并让它能画图出来, 主要包括四块: Ollama 管理和下载各个模型的工具Open WebUI 友好的对话界面Stable Diffusion 绘图工具Docker 部署在容器里,提高效率 以上运行环境…

20240627构造专题

写在前面:出场即巅峰(明日模拟赛RP) 一.何为构造 就是通过对一道题题面的分析可以发现某种规律(类似于不完全归纳法),然后发掘本质,就可以很快的解题,但是显然我还没有掌握 二.一…

基于星火大模型的群聊对话分角色要素提取挑战赛Task1笔记

基于星火大模型的群聊对话分角色要素提取挑战赛Task1笔记 跑通baseline 1、安装依赖 下载相应的数据库 !pip install --upgrade -q spark_ai_python2、配置导入 导入必要的包。 from sparkai.llm.llm import ChatSparkLLM, ChunkPrintHandler from sparkai.core.messages…