编写你的第一个测试
k6 是一款可靠性测试工具。它帮助开发者模拟真实用户行为,并测试他们的系统由此产生的行为。使用 k6 编写测试可以帮助你在生产环境出现问题之前识别潜在问题,例如响应时间过慢或系统故障。
你的测试目标可能不同。你可能想检查性能、可靠性或可伸缩性。根据你的目标,你的脚本可能需要不同的配置,例如模拟大量用户或长时间运行测试。
k6 测试使用 JavaScript 或 TypeScript 编程语言编写,这使得开发者易于上手,并且易于集成到现有代码库和项目中。通过编写 k6 测试脚本,你可以控制 k6 做什么、执行哪些操作以及如何表现。
请跟着我们一起学习如何编写你的第一个测试脚本,并开始测试你的应用的可靠性。
开始之前
编写 k6 脚本需要以下条件:
- 具备 JavaScript 或 TypeScript 的基础知识。
- 在你的机器上安装 k6。
- 一个用于编写脚本的代码编辑器,例如 Visual Studio Code 或 JetBrains 编辑器。
- 参考配置你的代码编辑器 了解如何启用自动补全和其他功能。
k6 测试的基本结构
为了让 k6 能够解释和执行你的测试,每个 k6 脚本都遵循一个通用结构,围绕几个核心组件构建:
- 默认函数:这是测试逻辑所在之处。它定义了你的测试在执行期间将做什么以及如何行为。它应作为脚本中的默认函数导出。
- 导入:你可以导入额外的 k6 模块 或 JavaScript 库 (jslibs) 来扩展脚本的功能,例如发起 HTTP 请求或模拟浏览器交互。请注意,k6 不是基于 Node.js 构建的,而是使用自己的 JavaScript 运行时。与某些 npm 模块的兼容性可能会有所不同。
- 选项(可选):允许你配置测试的执行,例如定义虚拟用户数、测试持续时间或设置性能阈值。请参考 选项 获取更多详情。
- 生命周期操作(可选):因为你的测试可能需要在测试逻辑执行之前和/或之后运行代码,例如从文件解析数据,或从 Amazon S3 下载对象,生命周期操作 允许你编写代码(可以是预定义函数或特定代码作用域内的代码),这些代码将在测试执行的不同阶段运行。
编写你的第一个测试脚本
让我们一步步创建一个简单的测试,该测试将对一个 URL 发送 10 次 GET
HTTP 请求,并在请求之间等待 1 秒钟。这个脚本将帮助你理解 k6 测试脚本的基本结构。
创建测试文件:测试文件可以随意命名,并放在项目中的任何位置,但它应具有
.js
或.ts
扩展名。在本例中,创建一个名为my-first-test.js
的 JavaScript 文件。打开你的终端并运行以下命令:touch my-first-test.js
导入 k6 模块:由于这里的最终目标是执行 HTTP 请求,请在文件顶部导入 k6 的
http
模块。为了帮助模拟真实场景,同时从k6
模块导入sleep
函数。
// Import the http module to make HTTP requests. From this point, you can use `http` methods to make HTTP requests.
import http from 'k6/http';
// Import the sleep function to introduce delays. From this point, you can use the `sleep` function to introduce delays in your test script.
import { sleep } from 'k6';
- 定义选项:为了执行 10 次 HTTP 请求,需要定义一个
options
块来配置测试执行。在本例中,将iterations
设置为 10,指示 k6 执行默认函数 10 次。在导入语句下方,添加以下代码:
import http from 'k6/http';
import { sleep } from 'k6';
export const options = {
// Define the number of iterations for the test
iterations: 10,
};
定义默认函数:默认导出的函数是测试脚本的入口点。它将根据你使用
iterations
选项定义的次数重复执行。在此函数中,向一个 URL 发送GET
请求,并在请求之间引入 1 秒的延迟。将以下代码添加到你的脚本中:import http from 'k6/http'; import { sleep } from 'k6'; export const options = { iterations: 10, }; // The default exported function is gonna be picked up by k6 as the entry point for the test script. It will be executed repeatedly in "iterations" for the whole duration of the test. export default function () { // Make a GET request to the target URL http.get('https://quickpizza.grafana.com'); // Sleep for 1 second to simulate real-world usage sleep(1); }
扩展你的脚本
在熟悉了这个基本脚本之后,你可以通过多种方式扩展其功能。以下是一些入门建议:
- 多个请求:你可以添加更多的
http.get()
或http.post()
请求来模拟复杂的用户流程。 - 使用 TypeScript:如果你偏好 TypeScript,k6 也支持它。你可以在我们的TypeScript 指南 中了解更多信息。
- 阈值、检查和指标:你可以添加条件来监控性能。例如,可以设置阈值以确保响应时间不超过某个限制。请参考阈值 和检查 获取更多详情。
- 浏览器测试:使用 browser 模块模拟用户交互,例如点击按钮或填写表单。这对于测试 Web 应用非常有用。请参考使用 k6 browser 获取更多详情。
你也可以使用 k6 new
命令来加快编写新服务或应用测试脚本的过程。试试看吧!
下一步
现在你已经编写了第一个 k6 测试脚本,是时候运行它了。请参考运行 k6 了解如何执行脚本和分析结果。