【问题标题】:How to execute multiple k6 scripts via single command in loadimpact/k6?如何通过 loadimpact/k6 中的单个命令执行多个 k6 脚本?
【发布时间】:2018-08-13 06:59:14
【问题描述】:

正如官方 loadimpact/k6 文档中所指出的,我们能够执行单个 k6 脚本,如下所示:

k6 run ../tests/http_get.js

如何在一次运行中执行多个脚本文件?特别是驻留在给定本地目录中的所有脚本。比如:

k6 run ../tests/

k6 是否支持开箱即用?

【问题讨论】:

    标签: performance-testing load-testing k6


    【解决方案1】:

    目前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

    【讨论】:

    • 这就是我们正在做的。我们的问题是我们在配置中指定的阈值是为所有模块共享的。哪个不理想...
    • @StormMuller 如果要在 http_duration 指标上设置阈值,可以使用 groupgroup_duration 指标,例如 gist.github.com/ppcano/1442dc243321747ee146a6c90859fe89 。我建议您将示例发布到 community.k6.io 以更好地帮助您。
    • 简而言之,我在系统指标group_duration 上创建了一个阈值,系统标签为groupdocs.k6.io/docs/tags-and-groups#section-system-tags。标签和自定义指标非常灵活和强大;您可以使用任何自定义标签在任何自定义指标上定义阈值。
    【解决方案2】:

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

    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
    )
    

    【讨论】:

      【解决方案3】:

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

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

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

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

      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 环境以及本地计算机上同时运行多个测试。

      【讨论】:

      • 这些都是很好的建议,我特别喜欢 docker compose 方法。谢谢!
      • 如果您需要更多帮助,请随时直接与我联系。我已经在 2 家不同的公司实施了这个特定的框架,所以我学到了很多它的来龙去脉。
      • @zypherman:如果我们有超过 500 个场景要测试,那么运行多个场景的合适方法是什么?我正在使用 executor: 'per-vu-iterations' 因为我需要在每个场景中运行 1 个请求和 1 次迭代。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多