hurl/docs/spec/runner/parallel.md

2.8 KiB

Supporting Parallel Execution of Hurl Files

Usage

Default Run

stateDiagram-v2
    state "hurl *.hurl" as [*]
    state "a.hurl" as A
    state "b.hurl" as B
    state "c.hurl" as C
    state fork <<fork>>
    state join <<join>>
    direction LR
    [*] --> fork
    fork --> A
    A --> B
    B --> C
    C --> join
    join --> [*]

Parallel Run

stateDiagram-v2
    state "hurl --parallel *.hurl" as [*]
    state "a.hurl" as A
    state "b.hurl" as B
    state "c.hurl" as C
    state fork <<fork>>
    state join <<join>>
    direction LR
    [*] --> fork
    fork --> A
    fork --> B
    fork --> C
    A --> join
    B --> join
    C --> join
    join --> [*]

1139 - how can send bulk request

88 - add the --concurrency option to launch multiple runs of *.hurl files instead of one

87 - add the --parallel option to run *.hurl files in parallel instead of sequentially

  • --repeat TBD
  • --repeat-all TBD
  • ...

Console Output

We need to defined what will be the output on stdout/stderr when running in parallel. We can take inspiration of example of parallel execution from cargo issue Console output should better reflect the build process

buck build

bazel build

https://asciinema.org/a/nMUGH5T2PiizxwK340n0DTW4M

TODO: make asciinema for different options.

Tools

wrk2

wrk2, a HTTP benchmarking tool based mostly on wrk.

GNU parallel

GNU parallel

From #87:

$ parallel -j $(ls -1 *.hurl | wc -l) -i sh -c "hurl {} --test" -- *.hurl
$ echo "retval: $?"

Backlog

  • What options do we expose?
  • Visualization? How do we report the timelines of Hurl files execution
  • How to test? Support // in Flask?
  • stderr / verbose report: do we prefix log lines by thread id / index ? We could make the debug logs identical whether files are run sequentially or run in parallel.
  • Does the user set "thread" affinity in Hurl files? (see https://github.com/Orange-OpenSource/hurl/issues/88#issuecomment-1674518247)
  • What's the Rust runner API? Actually, we only expose on public method to run an Hurl file, we need(?) to expose methods to runs multiple files