如何在 loadimpact/k6 中通过单个命令执行多个 k6 脚本?

How to execute multiple k6 scripts via single command in loadimpact/k6?

如官方 loadimpact/k6 文档中所述,我们可以按如下方式执行单个 k6 脚本:

k6 run ../tests/http_get.js

我将如何在单个 运行 中执行多个脚本文件?特别是驻留在给定本地目录中的所有脚本。类似于:

k6 run ../tests/

k6 开箱即用吗?

目前k6只接受一个脚本文件,运行导出的默认函数

import {sleep} from "k6";
import http from "k6/http";

export default function() {
    http.get("http://test.loadimpact.com/");
    sleep(2);
}

或许,您可以通过使用模块来实现您的目标。 将您的逻辑拆分为模块有助于组织您的代码,并允许在不同的测试中重用您的常见用例。

查看 k6 Modules documentation

import {sleep} from "k6";
import mainPageUserFlow from "../cases/main-page";
import billingUserFlow from "../cases/billing";

export default function() {
    mainPageUserFlow();
    billingUserFlow();
    sleep(2);
}

此外,您还可以更改脚本中不同虚拟用户的执行,例如 https://community.k6.io/t/how-to-distribute-vus-across-different-scenarios-with-k6/49

根据您的设置,有几种不同的方法可以解决此问题。一个非常直接的方法是在 bash 中分叉 k6 运行 命令。

#!/bin/sh 
k6 run test1_spec.js &
k6 run test2_spec.js &
k6 run test3_spec.js

您可以轻松地编写一些更复杂的 bash 脚本来读取 /tests/ 目录中的所有内容,然后 运行 就这样。我选择这样做是因为我有一些自定义输入参数可以提供给每个特定的测试。

另一种方法是编写 docker 撰写脚本来完成几乎相同的事情。这将为每个测试启动一个 docker 容器,并在其中 运行 。 k6 docker 图像只不过是一个微小的 linux 图像,其中添加了 k6 二进制文件。

version: '3'
services:
  k6_test:
    image: loadimpact/k6
    container_name: test_k6
    volumes:
       - ./:/specs
    command: run /tests/test_spec.js
    ports:
       - "6565:6565"

  k6_test2:
    image: loadimpact/k6
    container_name: test2_k6
    volumes:
       - ./:/specs
    command: run /tests/test2_spec.js
    ports:
       - "6566:6566"

这两种方法都应允许您在 CI 环境和本地计算机上同时 运行 进行多项测试。

使用 & 将 运行 并行测试,如果您想 运行 顺序并检索组合结果,我建议:

exit_c=0 
(
  k6 run script_1.js || exit_c=$?
  k6 run script_2.js || exit_c=$?
  ...
  k6 run script_n.js || exit_c=$?
  exit $exit_c
)