From 0f814467393d2a7e747a4d068967f306c57a74f6 Mon Sep 17 00:00:00 2001 From: firewave Date: Wed, 14 Aug 2024 13:26:00 +0200 Subject: [PATCH] use `pytest-xdist` to utilize multiple workers for Python tests --- .github/workflows/CI-unixish.yml | 14 ++++++++++---- .github/workflows/CI-windows.yml | 7 ++++--- .github/workflows/asan.yml | 7 ++++--- .github/workflows/scriptcheck.yml | 5 +++-- .github/workflows/tsan.yml | 7 ++++--- .github/workflows/ubsan.yml | 7 ++++--- 6 files changed, 29 insertions(+), 18 deletions(-) diff --git a/.github/workflows/CI-unixish.yml b/.github/workflows/CI-unixish.yml index 93559ee6f4fa..a9ddcf2cc03e 100644 --- a/.github/workflows/CI-unixish.yml +++ b/.github/workflows/CI-unixish.yml @@ -340,6 +340,11 @@ jobs: strategy: matrix: os: [ubuntu-20.04, ubuntu-22.04, macos-13] + include: + - xdist_n: auto + # FIXME: test_color_tty fails with xdist + - os: macos-13 + xdist_n: '1' fail-fast: false # Prefer quick result runs-on: ${{ matrix.os }} @@ -376,6 +381,7 @@ jobs: python3 -m pip install pip --upgrade python3 -m pip install pytest python3 -m pip install pytest-timeout + python3 -m pip install pytest-xdist python3 -m pip install psutil - name: Build cppcheck @@ -401,17 +407,17 @@ jobs: - name: Run test/cli run: | cd test/cli - python3 -m pytest -Werror --strict-markers -vv + python3 -m pytest -Werror --strict-markers -vv -n ${{ matrix.xdist_n }} cd ../../.. ln -s cppcheck 'cpp check' cd 'cpp check/test/cli' - python3 -m pytest -Werror --strict-markers -vv + python3 -m pytest -Werror --strict-markers -vv -n ${{ matrix.xdist_n }} # do not use pushd in this step since we go below the working directory - name: Run test/cli (-j2) run: | cd test/cli - python3 -m pytest -Werror --strict-markers -vv + python3 -m pytest -Werror --strict-markers -vv -n ${{ matrix.xdist_n }} env: TEST_CPPCHECK_INJECT_J: 2 @@ -420,7 +426,7 @@ jobs: if: false run: | cd test/cli - python3 -m pytest -Werror --strict-markers -vv + python3 -m pytest -Werror --strict-markers -vv -n ${{ matrix.xdist_n }} env: TEST_CPPCHECK_INJECT_CLANG: clang diff --git a/.github/workflows/CI-windows.yml b/.github/workflows/CI-windows.yml index 5072c2d63154..b79cbae2ef9b 100644 --- a/.github/workflows/CI-windows.yml +++ b/.github/workflows/CI-windows.yml @@ -142,6 +142,7 @@ jobs: python -m pip install pytest || exit /b !errorlevel! python -m pip install pytest-custom_exit_code || exit /b !errorlevel! python -m pip install pytest-timeout || exit /b !errorlevel! + python -m pip install pytest-xdist || exit /b !errorlevel! python -m pip install psutil || exit /b !errorlevel! - name: Run CMake @@ -181,13 +182,13 @@ jobs: if: matrix.config == 'release' run: | cd test/cli || exit /b !errorlevel! - python -m pytest -Werror --strict-markers -vv || exit /b !errorlevel! + python -m pytest -Werror --strict-markers -vv -n auto || exit /b !errorlevel! - name: Run test/cli (-j2) if: matrix.config == 'release' run: | cd test/cli || exit /b !errorlevel! - python -m pytest -Werror --strict-markers -vv || exit /b !errorlevel! + python -m pytest -Werror --strict-markers -vv -n auto || exit /b !errorlevel! env: TEST_CPPCHECK_INJECT_J: 2 @@ -196,7 +197,7 @@ jobs: if: false # matrix.config == 'release' run: | cd test/cli || exit /b !errorlevel! - python -m pytest -Werror --strict-markers -vv || exit /b !errorlevel! + python -m pytest -Werror --strict-markers -vv -n auto || exit /b !errorlevel! env: TEST_CPPCHECK_INJECT_CLANG: clang diff --git a/.github/workflows/asan.yml b/.github/workflows/asan.yml index 6473e9e797c1..cb80389cf0c4 100644 --- a/.github/workflows/asan.yml +++ b/.github/workflows/asan.yml @@ -66,6 +66,7 @@ jobs: python3 -m pip install pip --upgrade python3 -m pip install pytest python3 -m pip install pytest-timeout + python3 -m pip install pytest-xdist python3 -m pip install psutil # TODO: disable all warnings @@ -101,13 +102,13 @@ jobs: run: | pwd=$(pwd) cd test/cli - TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv + TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto - name: Run test/cli (-j2) run: | pwd=$(pwd) cd test/cli - TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv + TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto env: TEST_CPPCHECK_INJECT_J: 2 @@ -116,7 +117,7 @@ jobs: run: | pwd=$(pwd) cd test/cli - TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv + TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto env: TEST_CPPCHECK_INJECT_CLANG: clang diff --git a/.github/workflows/scriptcheck.yml b/.github/workflows/scriptcheck.yml index e3ef5f234ba7..624ca8e09114 100644 --- a/.github/workflows/scriptcheck.yml +++ b/.github/workflows/scriptcheck.yml @@ -87,6 +87,7 @@ jobs: python -m pip install 'pylint<=3.3.0' python -m pip install unittest2 python -m pip install pytest + python -m pip install pytest-xdist python -m pip install pygments python -m pip install requests python -m pip install psutil @@ -134,14 +135,14 @@ jobs: - name: test addons if: matrix.python-version == '3.9' || matrix.python-version == '3.10' run: | - python -m pytest --strict-markers -vv addons/test + python -m pytest --strict-markers -vv -n auto addons/test env: PYTHONPATH: ./addons - name: test addons if: matrix.python-version != '3.9' && matrix.python-version != '3.10' run: | - python -m pytest -Werror --strict-markers -vv addons/test + python -m pytest -Werror --strict-markers -vv -n auto addons/test env: PYTHONPATH: ./addons diff --git a/.github/workflows/tsan.yml b/.github/workflows/tsan.yml index 1a5b38f801ee..f3812ce2fe0d 100644 --- a/.github/workflows/tsan.yml +++ b/.github/workflows/tsan.yml @@ -66,6 +66,7 @@ jobs: python3 -m pip install pip --upgrade python3 -m pip install pytest python3 -m pip install pytest-timeout + python3 -m pip install pytest-xdist python3 -m pip install psutil - name: CMake @@ -100,7 +101,7 @@ jobs: run: | pwd=$(pwd) cd test/cli - TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv + TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto env: TEST_CPPCHECK_INJECT_EXECUTOR: thread @@ -108,7 +109,7 @@ jobs: run: | pwd=$(pwd) cd test/cli - TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv + TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto env: TEST_CPPCHECK_INJECT_J: 2 @@ -117,7 +118,7 @@ jobs: run: | pwd=$(pwd) cd test/cli - TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv + TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto env: TEST_CPPCHECK_INJECT_CLANG: clang diff --git a/.github/workflows/ubsan.yml b/.github/workflows/ubsan.yml index fcbb32aedae6..ebf0b10ed9ed 100644 --- a/.github/workflows/ubsan.yml +++ b/.github/workflows/ubsan.yml @@ -65,6 +65,7 @@ jobs: python3 -m pip install pip --upgrade python3 -m pip install pytest python3 -m pip install pytest-timeout + python3 -m pip install pytest-xdist python3 -m pip install psutil # TODO: disable warnings @@ -100,13 +101,13 @@ jobs: run: | pwd=$(pwd) cd test/cli - TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv + TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto - name: Run test/cli (-j2) run: | pwd=$(pwd) cd test/cli - TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv + TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto env: TEST_CPPCHECK_INJECT_J: 2 @@ -115,7 +116,7 @@ jobs: run: | pwd=$(pwd) cd test/cli - TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv + TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto env: TEST_CPPCHECK_INJECT_CLANG: clang