- Add multiprocessing on the backend. Each test run triggered by a click in the UI now spawns a new process to run the test. Not only does this allow multiple tests to be run in parallel and means that tests do not block the HTTP/websocket server, this change also ensures that tests modules are loaded fresh every time and prevents strange bugs that can occur due to stale pytest state in the main process.
- Automatically start and stop environments defined inside a `docker-compose.yml` file in the base directory used for test discovery. The docker environment is started when the pytest_web_ui backend process starts and stopped before it exits due to Ctrl-C interrupt.
- Reorganise the web UI navigation to include an entry representing the root node. This allows all tests to be run via a single click in the UI.
- Update JS dependencies.