菜单
文档面包屑箭头 Grafana k6面包屑箭头 使用 k6面包屑箭头 选项面包屑箭头 如何使用选项
开源

如何使用选项

k6 提供了多种设置选项的位置

  • 在 CLI 标志中
  • 在环境变量中
  • 在脚本的 options 对象中
  • 在配置文件中

最有可能的是,您的用例将决定您想要为特定测试设置特定选项的位置。您也可以在测试运行时访问选项值。

优先级顺序

Options passed as command-line flags override all other options: defaults < script options < environment variables < command-line flags

您可以在多个位置设置选项。如果存在冲突,k6 将使用优先级最高位置的选项。

  1. 首先,k6 使用选项的默认值。
  2. 其次,k6 使用通过 --config 标志在配置文件中设置的选项。
  3. 然后,k6 使用脚本值(如果设置)。
  4. 之后,k6 使用环境变量(如果设置)。
  5. 最后,k6 获取 CLI 标志的值(如果设置)。

也就是说,命令行标志具有最高的优先级

在哪里设置选项

有时,如何设置选项是个人偏好的问题。其他时候,测试的上下文决定了放置选项的最合理位置。

  • 脚本中的选项用于版本控制并保持测试整洁

    脚本 options 对象通常是设置选项的最佳位置。它提供自动版本控制,易于重用,并允许您模块化脚本。

  • CLI 标志用于即时设置选项

    当您想运行快速测试时,命令行标志很方便。

    您还可以使用命令行标志来覆盖脚本中的文件(由优先级顺序决定)。例如,如果您的脚本文件将测试持续时间设置为 60 秒,您可以使用 CLI 标志运行一次性较短的测试。使用 --duration 30s 这样的标志,测试时长将减半,但其他方面保持不变。

  • 环境变量用于从构建链设置选项

    例如,您可以从 Docker 容器定义、CI UI 或 Vault 中的变量派生选项——无论您在哪里声明环境变量。

    block hostnames 选项是与环境变量配合良好的选项示例。

设置选项的示例

以下 JS 代码片段展示了一些如何设置选项的示例。

在脚本中设置选项

JavaScript
import http from 'k6/http';

export const options = {
  hosts: { 'test.k6.io': '1.2.3.4' },
  stages: [
    { duration: '1m', target: 10 },
    { duration: '1m', target: 20 },
    { duration: '1m', target: 0 },
  ],
  thresholds: { http_req_duration: ['avg<100', 'p(95)<200'] },
  noConnectionReuse: true,
  userAgent: 'MyK6UserAgentString/1.0',
};

export default function () {
  http.get('http://test.k6.io/');
}

使用环境变量设置选项

您也可以通过环境变量和命令行标志设置上一个示例中的选项

bash
K6_NO_CONNECTION_REUSE=true K6_USER_AGENT="MyK6UserAgentString/1.0" k6 run script.js

k6 run --no-connection-reuse --user-agent "MyK6UserAgentString/1.0" script.js
windows
set "K6_NO_CONNECTION_REUSE=true" && set "K6_USER_AGENT=MyK6UserAgentString/1.0" && k6 run script.js

k6 run --no-connection-reuse --user-agent "MyK6UserAgentString/1.0" script.js
powershell
$env:K6_NO_CONNECTION_REUSE=true; $env:K6_USER_AGENT="MyK6UserAgentString/1.0"; k6 run script.js

k6 run --no-connection-reuse --user-agent "MyK6UserAgentString/1.0" script.js

从 k6 变量设置选项

使用 --env 标志,您可以使用 CLI 定义 k6 变量。然后,您可以使用该变量在脚本文件中动态定义选项的值。

例如,您可以像这样为您的用户代理定义一个变量

bash
k6 run script.js --env MY_USER_AGENT="hello"

然后,您的脚本可以根据变量的值设置 userAgent 选项。这允许快速配置。

JavaScript
import http from 'k6/http';

export const options = {
  userAgent: __ENV.MY_USER_AGENT,
};

export default function () {
  http.get('http://test.k6.io/');
}

注意:尽管此方法使用 --env 标志,但这与使用环境变量不同。有关解释,请参阅环境变量文档

使用 --config 标志设置选项

k6 包含一个默认配置文件,您可以编辑它,或者您可以创建一个新文件,然后使用 CLI 标志指向该文件。如果您使用它,选项将具有次低的优先级(在默认值之后)。如果您在其他任何地方设置选项,它们将覆盖 --config 标志设置的选项。

使用 --config 标志声明选项的文件路径。

bash
k6 run --config options.json script.js

此命令将根据 options.json 文件中的值设置测试选项。

json
{
  "hosts": {
    "test.k6.io": "1.2.3.4"
  },
  "stages": [
    {
      "duration": "1m",
      "target": 10
    },
    {
      "duration": "1m",
      "target": 30
    },
    {
      "duration": "1m",
      "target": 0
    }
  ],
  "thresholds": {
    "http_req_duration": ["avg<100", "p(95)<200"]
  },
  "noConnectionReuse": true,
  "userAgent": "MyK6UserAgentString/1.0"
}

对于将配置与逻辑分离的另一种方法,您可以在脚本文件中使用 JSON.parse() 方法

JavaScript
// load test config, used to populate exported options object:
const testConfig = JSON.parse(open('./config/test.json'));
// combine the above with options set directly:
export const options = testConfig;

从脚本获取选项值

k6/execution API 提供了一个 test.options 对象。使用 test.options,您可以在测试运行时访问脚本的合并和派生选项。

此功能的一个常见用途是记录标签的值,但有很多可能性。例如,此脚本访问测试当前阶段的值

JavaScript
import exec from 'k6/execution';

export const options = {
  stages: [
    { duration: '5s', target: 100 },
    { duration: '5s', target: 50 },
  ],
};

export default function () {
  console.log(exec.test.options.scenarios.default.stages[0].target); // 100
}