Distributed K6 Example
info
This Workflows functionality is not available when running the Testkube Agent in Standalone Mode - Read More
Testkube has built-in support for parallelising any testing tool - check out the Parallelization documentation for details and examples.
The below example shows how to distribute a K6 test across a configurable number of nodes
- Takes optional run configuration parameters (
config)vusto declare Virtual Users to distributedurationto declare Load Test timeworkersto declare number of K6 instances to create
 - Load the K6 script from Git repository (
content) - Run distributed K6 tests (
steps[0].parallel)- It's using built-in 
distribute/evenlyTest Workflow Template, that setspod.topologySpreadConstraintsto distribute pods evenly across nodes (steps[0].parallel.use) - It's creating as many K6 workers as has been declared in 
workersconfig (steps[0].parallel.count) - It copies the test case from Git repository into workers (
steps[0].parallel.transfer) - It reserves 1/8 CPU and 128MB for each worker (
steps[0].parallel.container.resources) - It ensures that all workers will start load tests at the same time, when all are ready (
steps[0].parallel.paused) - It runs K6 executable against that test case (
steps[0].parallel.run.shell)- It passes number of Virtual Users and test duration via K6 parameters
 - It uses K6 --execution-segment argument to select the fraction of tests to run
 
 - It retrives the generated HTML reports as artifacts
 
 - It's using built-in 
 
Distributed K6 Workflow
kind: TestWorkflow
apiVersion: testworkflows.testkube.io/v1
metadata:
  name: distributed-k6
  namespace: testkube
  labels:
    docs: example
spec:
  config:
    duration:
      type: string
      default: 5s
    vus:
      type: integer
      default: 10
    workers:
      type: integer
      default: 3
  content:
    git:
      uri: https://github.com/kubeshop/testkube
      paths:
        - test/k6/k6-smoke-test.js
  steps:
    - name: Run test
      parallel:
        count: config.workers
        transfer:
          - from: /data/repo
        use:
          - name: distribute/evenly
        container:
          workingDir: /data/repo/test/k6
          env:
            - name: K6_SYSTEM_ENV
              value: K6_SYSTEM_ENV_value
            - name: K6_WEB_DASHBOARD
              value: "true"
            - name: K6_WEB_DASHBOARD_EXPORT
              value: /data/k6-test-report.html
          resources:
            requests:
              cpu: 128m
              memory: 128Mi
        paused: true
        run:
          image: grafana/k6:0.49.0
          shell: |
            k6 run k6-smoke-test.js \
              -e K6_ENV_FROM_PARAM=K6_ENV_FROM_PARAM_value \
              --vus {{ config.vus }} \
              --duration {{ shellquote(config.duration) }} \
              --execution-segment {{ index }}/{{ count }}:{{ index + 1 }}/{{ count }}
        artifacts:
          workingDir: /data
          paths:
            - '*.html'
- Log Output
 - Artifacts
 
The k6 log output from one of the workers:

The uploaded HTML reports for each of the Workers is available in the Artifacts tab
