如何使用选项
k6 提供了多种设置选项的位置
- 在 CLI 标志中
- 在环境变量中
- 在脚本的 options 对象中
- 在配置文件中
最有可能的是,您的用例将决定您想要为特定测试设置特定选项的位置。您也可以在测试运行时访问选项值。
优先级顺序
您可以在多个位置设置选项。如果存在冲突,k6 将使用优先级最高位置的选项。
- 首先,k6 使用选项的默认值。
- 其次,k6 使用通过 --config 标志在配置文件中设置的选项。
- 然后,k6 使用脚本值(如果设置)。
- 之后,k6 使用环境变量(如果设置)。
- 最后,k6 获取 CLI 标志的值(如果设置)。
也就是说,命令行标志具有最高的优先级。
在哪里设置选项
有时,如何设置选项是个人偏好的问题。其他时候,测试的上下文决定了放置选项的最合理位置。
脚本中的选项用于版本控制并保持测试整洁
脚本 options 对象通常是设置选项的最佳位置。它提供自动版本控制,易于重用,并允许您模块化脚本。
CLI 标志用于即时设置选项
当您想运行快速测试时,命令行标志很方便。
您还可以使用命令行标志来覆盖脚本中的文件(由优先级顺序决定)。例如,如果您的脚本文件将测试持续时间设置为 60 秒,您可以使用 CLI 标志运行一次性较短的测试。使用
--duration 30s
这样的标志,测试时长将减半,但其他方面保持不变。环境变量用于从构建链设置选项
例如,您可以从 Docker 容器定义、CI UI 或 Vault 中的变量派生选项——无论您在哪里声明环境变量。
block hostnames 选项是与环境变量配合良好的选项示例。
设置选项的示例
以下 JS 代码片段展示了一些如何设置选项的示例。
在脚本中设置选项
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/');
}
使用环境变量设置选项
您也可以通过环境变量和命令行标志设置上一个示例中的选项
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
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
$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 变量。然后,您可以使用该变量在脚本文件中动态定义选项的值。
例如,您可以像这样为您的用户代理定义一个变量
k6 run script.js --env MY_USER_AGENT="hello"
然后,您的脚本可以根据变量的值设置 userAgent
选项。这允许快速配置。
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
标志声明选项的文件路径。
k6 run --config options.json script.js
此命令将根据 options.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()
方法
// 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
,您可以在测试运行时访问脚本的合并和派生选项。
此功能的一个常见用途是记录标签的值,但有很多可能性。例如,此脚本访问测试当前阶段的值
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
}