Search code examples
dockerdocker-volumek6

k6 using docker with mounted volume errors on run, with "accepts 1 arg(s), received 2"


I'm trying to run perf test in my CI environment, using the k6 docker, and a simple single script file works fine. However, I want to break down my tests into multiple JS files. In order to do this, I need to mount a volume on Docker so I can import local modules.

The volume seems to be mounting correctly, with my command

docker run --env-file ./test/performance/env/perf.list -v \
`pwd`/test/performance:/perf -i loadimpact/k6 run - /perf/index.js

k6 seems to start, but immediately errors with

time="2018-01-17T13:04:17Z" level=error msg="accepts 1 arg(s), received 2"

Locally, my file system looks something like

/toychicken
    /test
       /performance
          /env
              - perf.list
          - index.js
          - something.js

And the index.js looks like this

import { check, sleep } from 'k6'
import http from 'k6/http'
import something from '/perf/something'

export default () => {
  const r = http.get(`https://${__ENV.DOMAIN}`)
  check(r, {
    'status is 200': r => r.status === 200
  })
  sleep(2)
  something()
}

Solution

  • You need to remove the "-" after run in the Docker command. The "-" instructs k6 to read from stdin, but in this case you want to load the main JS file from the file system. That's why it complains that it receives two args, one being the "-" and the second being the path to index.js (the error message could definitely be more descriptive).

    You'll also need to add .js to the '/perf/something' import.