菜单
文档面包屑箭头 组件面包屑箭头 生成器
开源

生成器

生成器接收测试录制输出,并提供选项让您通过可视化界面自定义测试并从中生成测试脚本,无需手动编写 JavaScript 代码。

您可以使用它来定义允许或从脚本中移除的主机列表,调整测试的负载配置文件,在脚本中包含变量,以及配置用于提取值、参数化请求等的规则。

k6 Studio Generator window, showing a test generator with three test rules, the requests panel open on the right side with several requests, and the correlation rule panel open and configured to search for a CSRF token

生成器窗口包含以下部分:

  1. 生成器名称: 测试生成器的名称。这是自动生成的,您可以重命名它以帮助管理文件。
  2. 生成器操作: 在右上角您可以看到生成器的操作按钮。您可以在此处选择录制,点击保存生成器以将更改保存到测试生成器文件,或点击菜单图标以执行以下操作:
    • 验证脚本: 打开验证器并开始测试脚本的单次迭代运行。
    • 导出脚本: 打开导出脚本对话框。您可以输入脚本名称,并选择是否覆盖同名脚本。
    • 删除生成器: 删除选定的测试生成器。
  3. 请求和脚本检查器: 选定录制中的请求列表(如果存在分组)。请求按时间排序,您可以看到每个请求的方法、状态码、主机和路径。您还可以折叠和展开分组以便更轻松地检查。点击任何请求会打开请求检查器,您可以在其中查看请求和响应详情。
  4. 生成器选项: 在测试生成器名称下方,您可以看到以下选项:
    • 添加规则: 打开您可以添加到生成器的规则类型列表。
    • 测试选项: 配置负载配置文件、阈值、思考时间和负载区域。
    • 测试数据: 定义变量,并配置可在测试规则中使用的数据文件。
    • 允许的主机: 显示录制中包含的主机列表,让您选择要包含或从脚本中移除的主机。
  5. 测试规则列表: 应用于此特定生成器的测试规则列表。规则可以重新排序,您可以看到它们的配置详情。

测试选项

测试选项标签页允许您配置测试脚本的三个独立部分:

  • 负载配置文件
  • 阈值
  • 思考时间
  • 负载区域

负载配置文件

负载配置文件控制 k6 如何调度 VU 和迭代来运行您的性能测试。

负载配置文件下有两个执行器可用:

  • 递增虚拟用户: 在指定时间内,可变数量的 VU 执行尽可能多的迭代。
  • 共享迭代: 固定数量的迭代在多个 VU 之间共享,测试在所有迭代执行完毕后结束。

每个执行器都有不同的变量可供配置。更多详情,请参阅执行器

阈值

阈值是您为测试指标定义的通过/失败标准。如果被测系统 (SUT) 的性能未达到您设定的阈值条件,测试将以失败状态结束。

阈值通常用于编码 SLO,例如,如果某个端点响应时间超过 500 毫秒则测试失败。它们也可以用作基于测试失败设置警报的方式。

在 k6 Studio 中,您可以点击添加阈值向测试脚本添加一个或多个阈值。对于每个阈值,您可以配置指标以及失败条件,并设置失败是否停止测试执行。

更多详情请参阅阈值

思考时间

思考时间选项允许您在分组或迭代之间配置固定或随机延迟,以模拟更真实的测试。这不是必需的,但它是创建和运行性能测试时的最佳实践。

负载区域

注意

负载区域仅影响在Grafana Cloud k6 中执行的测试。

负载区域代表可以运行测试的不同地区。您可以使用它们来更准确地了解用户从世界各地访问您的应用程序时看到的情况。

负载区域标签页中,您可以使用添加新负载区域按钮向测试脚本添加一个或多个负载区域。您还可以使用分布开关手动选择每个区域的负载百分比,或将其平均分配。

当您向测试脚本添加负载区域时,您可以在 options 对象中看到它反映出来。例如:

JavaScript
export const options = {
  cloud: {
    distribution: {
      'amazon:us:ashburn': { loadZone: 'amazon:us:ashburn', percent: 50 },
      'amazon:ie:dublin': { loadZone: 'amazon:ie:dublin', percent: 50 },
    },
  },
};

更多详情请参阅使用负载区域

测试数据

测试数据选项允许您定义两种用于测试脚本的数据类型:变量数据文件

变量

变量标签页中,您可以定义变量的名称和值(字符串类型)。然后您可以在自定义代码参数化规则中使用这些变量。

定义变量后,您可以通过使用 VARS["VARIABLE_NAME"] 在自定义代码规则中引用它们。

数据文件

在运行性能测试时,通常会使用随机生成的数据或与您的应用程序相关的特定数据集。在 k6 Studio 中,您可以通过主菜单的数据文件部分或通过生成器 -> 测试数据 -> 数据文件 -> 添加数据文件 + 导入数据文件,然后在参数化规则中使用它们。

k6 Studio 支持的数据文件要求如下:

  • 文件格式必须为 CSV 或 JSON。
  • 最大文件大小为 10 MB。
  • 对于 CSV 文件:
    • 必须包含标题行。
    • 必须使用 , 作为分隔符。
  • 对于 JSON 文件:
    • 应为扁平数组,不含嵌套。不支持嵌套值,并且不会显示在参数化规则中。

导入数据文件后,您可以通过以下方式将其添加到生成器:

  1. 点击测试数据
  2. 点击数据文件标签页。
  3. 点击添加数据文件 +
  4. 从下拉列表中选择数据文件。

之后,您可以在参数化规则替换为部分中使用数据文件。生成的 k6 测试脚本将在每次迭代中使用文件中的唯一项来模拟用户行为。更多详情请参阅数据文件

允许的主机

允许的主机选项允许您配置要在测试脚本中包含哪些主机。它显示从 HAR 录制文件中识别出的所有主机,您可以选择要在测试脚本中包含或移除的主机。

对于性能测试,通常不包含静态资产,或从测试中移除第三方服务的主机,但您可以根据用例包含它们。

规则

测试规则是您可以添加到测试生成器并进行配置的规则,允许您自定义生成的测试脚本。这些规则可以使用测试录制中的信息,然后生成代码更改,以帮助使您的测试脚本更可靠和可重用。

可用规则如下:

  • 验证规则
  • 关联规则
  • 参数化规则
  • 自定义代码规则

您可以向测试生成器添加多个关联规则和自定义代码规则。

验证规则

验证规则是为每个测试生成器创建的默认规则。它在每个请求后添加一个检查语句,用于验证响应状态码是否与测试录制中的相同。

验证规则有助于确保您的系统按预期运行。失败的检查不会导致测试中止或中断测试运行。检查会生成一个指标,您可以在测试运行完成后检查该指标,以了解系统的表现。

更多关于检查的详情,请参阅检查

关联规则

关联规则允许您从测试录制中提取数据,并在整个测试脚本中重用。例如,当处理包含为请求生成的唯一 ID,然后传递给后续每个请求的应用程序时,这是一个常见的用例。

关联规则包括提取器和替换器。它们都具有相同的配置选项,但提取器可用于查找和提取您希望在脚本中使用的值,而替换器可用于查找要替换和使用提取值的位点。

配置字段如下:

  • 过滤器: 定义此过滤器适用的请求路径。支持纯文本和正则表达式。
  • 目标: 选择请求头、请求体或 URL 路径作为提取器或替换器的目标。
  • 类型: 选择 Begin-End、Regex 或 JSON 作为搜索要提取或替换值的方式。
    • 开始-结束: 定义 Begin 和 End 值作为要提取或替换值紧前和紧后的字符串。
    • Regex: 定义用于匹配要提取或替换值的正则表达式。
    • JSON: 定义用于匹配要提取或替换值的 JSON 路径。

创建或编辑关联规则时,您可以使用规则预览面板检查您的配置选项是否按预期工作,以及是否应用于测试脚本中的正确请求和值。

参数化规则

参数化规则允许您参数化请求以使用文本值或变量中的值。例如,您可以在规则标签页中将所有请求中的 userId 值替换为定义为文本值的测试用户 ID,或使用来自测试数据选项的变量名或数据文件。

配置字段如下:

  • 过滤器: 定义此过滤器适用的请求路径。支持纯文本和正则表达式。
  • 目标: 选择请求头、请求体或 URL 路径作为提取器或替换器的目标。
  • 类型: 选择 Begin-End、Regex 或 JSON 作为搜索要替换值的方式。
    • 开始-结束: 定义 Begin 和 End 值作为要替换值紧前和紧后的字符串。
    • Regex: 定义用于匹配要替换值的正则表达式。
    • JSON: 定义用于匹配要替换值的 JSON 路径。
  • 替换为: 配置找到匹配项时如何替换值。您可以使用:
    • 文本值: 定义一个文本值。
    • 变量: 从下拉列表中使用变量。请确保您在测试数据 -> 变量下配置了要使用的变量值。
    • 数据文件: 从下拉列表中选择数据文件。选择数据文件后,您可以从属性名称列表中选择任何属性。测试脚本将在每次测试运行迭代中使用不同的值。更多详情请参阅数据文件
    • 自定义代码: 使用自定义 JavaScript 代码片段定义值。您必须包含一个带有您想使用的值的 return 语句。

创建或编辑参数化规则时,您可以使用规则预览面板检查您的配置选项是否按预期工作,以及是否应用于测试脚本中的正确请求和值。

自定义代码规则

自定义代码规则允许您在测试脚本中插入自定义 JavaScript 代码片段。

自定义代码规则有两个选项:

  • 过滤器: 定义此过滤器适用的请求路径。支持纯文本和正则表达式。
  • 位置: 在匹配请求前匹配请求后之间选择。

规则选择器

对于关联规则和参数化规则,您可以使用以下选择器:

  • 开始-结束: 匹配两个字符串之间的值。
  • JSON: 使用点表示法匹配 JSON 有效负载或响应体中的值。
  • Regex: 使用正则表达式匹配值。

开始-结束选择器

当您的目标值位于两个已知字符串之间时,此选择器很有用。例如,匹配 URL 中的值:

https://example.com/products/1234/details

要将 1234 替换为另一个值,请使用以下配置:

Target: URL
Type: Begin-end
Begin: /products/
End: /details

JSON 选择器

当您的目标值位于 JSON 有效负载或响应体中时,此选择器是理想选择。它使用点表示法访问嵌套属性。例如,在此 JSON 中:

json
{
  "name": "Product name",
  "details": {
    "id": 1234
  },
  "tags": ["electronics", "sale"],
  "variants": [
    {
      "color": "blue",
      "stock": 5
    },
    {
      "color": "red",
      "stock": 3
    }
  ]
}

您可以使用以下配置替换值:

# Replace nested object value
Target: Body
Type: JSON
Path: details.id

# Replace array element
Target: Body
Type: JSON
Path: tags.0

# Replace nested array object value
Target: Body
Type: JSON
Path: variants.0.stock

Regex 选择器

当前面的选择器不满足您的需求时,您可以使用正则表达式进行更精细的匹配。例如,匹配请求头中的授权令牌:

Headers
Authorization: Bearer eyJhbGciOiJIUzI1NiI

要将 eyJhbGciOiJIUzI1NiI 替换为另一个值,请使用以下配置:

Target: Headers
Type: Regex
Regex: Bearer (.+)

注意

正则表达式必须包含捕获组 () 来指定要替换的值。

验证和导出脚本

配置完测试生成器的测试选项和规则后,您可以点击右上角的菜单图标来验证和导出脚本。

点击验证脚本时,验证器将打开并运行测试脚本的一次迭代。您可以点击每个请求检查请求和响应,并查看日志、检查和脚本标签页来审查测试生成器的输出。

验证脚本后,您可以将其导出,以便使用 k6 CLI 或 Grafana Cloud k6 运行它。