Skip to content

Commit 4b8f87d

Browse files
committed
use pytest-xdist to utilize multiple workers for Python tests
1 parent 0a8ec90 commit 4b8f87d

6 files changed

Lines changed: 30 additions & 19 deletions

File tree

.github/workflows/CI-unixish.yml

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,11 @@ jobs:
262262
strategy:
263263
matrix:
264264
os: [ubuntu-20.04, ubuntu-22.04, macos-13]
265+
include:
266+
- xdist_n: auto
267+
# FIXME: test_color_tty fails with xdist
268+
- os: macos-13
269+
xdist_n: '1'
265270
fail-fast: false # Prefer quick result
266271

267272
runs-on: ${{ matrix.os }}
@@ -300,6 +305,7 @@ jobs:
300305
python3 -m pip install pip --upgrade
301306
python3 -m pip install pytest
302307
python3 -m pip install pytest-timeout
308+
python3 -m pip install pytest-xdist
303309
python3 -m pip install psutil
304310
305311
- name: Build cppcheck
@@ -323,7 +329,7 @@ jobs:
323329
324330
- name: Run test/cli
325331
run: |
326-
python3 -m pytest -Werror --strict-markers -vv test/cli
332+
python3 -m pytest -Werror --strict-markers -vv -n ${{ matrix.xdist_n }} test/cli
327333
328334
# TODO: use the step below instead
329335
# do not use pushd in this step since we go below the working directory
@@ -332,26 +338,26 @@ jobs:
332338
cd ..
333339
ln -s cppcheck 'cpp check'
334340
cd 'cpp check/test/cli'
335-
python3 -m pytest -Werror --strict-markers -vv
341+
python3 -m pytest -Werror --strict-markers -vv -n ${{ matrix.xdist_n }}
336342
337343
# FIXME: proj2_test.py fails because of the relative path cleanups in ImportProject::setRelativePaths()
338344
# It fails because the application path used as base path has its symlink resolved by getcwd().
339345
- name: Run test/cli (symlink)
340346
if: false
341347
run: |
342348
ln -s . 'cpp check'
343-
python3 -m pytest -Werror --strict-markers -vv 'cpp check/test/cli'
349+
python3 -m pytest -Werror --strict-markers -vv -n ${{ matrix.xdist_n }} 'cpp check/test/cli'
344350
345351
- name: Run test/cli (-j2)
346352
run: |
347-
python3 -m pytest -Werror --strict-markers -vv test/cli
353+
python3 -m pytest -Werror --strict-markers -vv -n ${{ matrix.xdist_n }} test/cli
348354
env:
349355
TEST_CPPCHECK_INJECT_J: 2
350356

351357
- name: Run test/cli (--clang)
352358
if: false
353359
run: |
354-
python3 -m pytest -Werror --strict-markers -vv test/cli
360+
python3 -m pytest -Werror --strict-markers -vv -n ${{ matrix.xdist_n }} test/cli
355361
env:
356362
TEST_CPPCHECK_INJECT_CLANG: clang
357363

.github/workflows/CI-windows.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ jobs:
137137
python -m pip install pytest || exit /b !errorlevel!
138138
python -m pip install pytest-custom_exit_code || exit /b !errorlevel!
139139
python -m pip install pytest-timeout || exit /b !errorlevel!
140+
python -m pip install pytest-xdist || exit /b !errorlevel!
140141
python -m pip install psutil || exit /b !errorlevel!
141142
142143
# TODO: build with CMake
@@ -176,20 +177,20 @@ jobs:
176177
- name: Run test/cli
177178
if: matrix.config == 'release'
178179
run: |
179-
python -m pytest -Werror --strict-markers -vv test/cli || exit /b !errorlevel!
180+
python -m pytest -Werror --strict-markers -vv -n auto test/cli || exit /b !errorlevel!
180181
181182
- name: Run test/cli (-j2)
182183
if: matrix.config == 'release'
183184
run: |
184-
python -m pytest -Werror --strict-markers -vv test/cli || exit /b !errorlevel!
185+
python -m pytest -Werror --strict-markers -vv -n auto test/cli || exit /b !errorlevel!
185186
env:
186187
TEST_CPPCHECK_INJECT_J: 2
187188

188189
# TODO: install clang
189190
- name: Run test/cli (--clang)
190191
if: false # matrix.config == 'release'
191192
run: |
192-
python -m pytest -Werror --strict-markers -vv test/cli || exit /b !errorlevel!
193+
python -m pytest -Werror --strict-markers -vv -n auto test/cli || exit /b !errorlevel!
193194
env:
194195
TEST_CPPCHECK_INJECT_CLANG: clang
195196

.github/workflows/asan.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ jobs:
6868
python3 -m pip install pip --upgrade
6969
python3 -m pip install pytest
7070
python3 -m pip install pytest-timeout
71+
python3 -m pip install pytest-xdist
7172
python3 -m pip install psutil
7273
7374
# TODO: disable all warnings
@@ -102,20 +103,20 @@ jobs:
102103
- name: Run test/cli
103104
run: |
104105
pwd=$(pwd)
105-
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv test/cli
106+
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto test/cli
106107
107108
- name: Run test/cli (-j2)
108109
run: |
109110
pwd=$(pwd)
110-
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv test/cli
111+
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto test/cli
111112
env:
112113
TEST_CPPCHECK_INJECT_J: 2
113114

114115
- name: Run test/cli (--clang)
115116
if: false
116117
run: |
117118
pwd=$(pwd)
118-
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv test/cli
119+
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto test/cli
119120
env:
120121
TEST_CPPCHECK_INJECT_CLANG: clang
121122

.github/workflows/scriptcheck.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ jobs:
9292
python -m pip install 'pylint<=3.3.0'
9393
python -m pip install unittest2
9494
python -m pip install pytest
95+
python -m pip install pytest-xdist
9596
python -m pip install pygments
9697
python -m pip install requests
9798
python -m pip install psutil
@@ -139,14 +140,14 @@ jobs:
139140
- name: test addons
140141
if: matrix.python-version == '3.9' || matrix.python-version == '3.10'
141142
run: |
142-
python -m pytest --strict-markers -vv addons/test
143+
python -m pytest --strict-markers -vv -n auto addons/test
143144
env:
144145
PYTHONPATH: ./addons
145146

146147
- name: test addons
147148
if: matrix.python-version != '3.9' && matrix.python-version != '3.10'
148149
run: |
149-
python -m pytest -Werror --strict-markers -vv addons/test
150+
python -m pytest -Werror --strict-markers -vv -n auto addons/test
150151
env:
151152
PYTHONPATH: ./addons
152153

.github/workflows/tsan.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ jobs:
6868
python3 -m pip install pip --upgrade
6969
python3 -m pip install pytest
7070
python3 -m pip install pytest-timeout
71+
python3 -m pip install pytest-xdist
7172
python3 -m pip install psutil
7273
7374
- name: CMake
@@ -101,22 +102,22 @@ jobs:
101102
- name: Run test/cli
102103
run: |
103104
pwd=$(pwd)
104-
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv test/cli
105+
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto test/cli
105106
env:
106107
TEST_CPPCHECK_INJECT_EXECUTOR: thread
107108

108109
- name: Run test/cli (-j2)
109110
run: |
110111
pwd=$(pwd)
111-
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv test/cli
112+
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto test/cli
112113
env:
113114
TEST_CPPCHECK_INJECT_J: 2
114115

115116
- name: Run test/cli (--clang)
116117
if: false
117118
run: |
118119
pwd=$(pwd)
119-
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv test/cli
120+
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto test/cli
120121
env:
121122
TEST_CPPCHECK_INJECT_CLANG: clang
122123

.github/workflows/ubsan.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ jobs:
6767
python3 -m pip install pip --upgrade
6868
python3 -m pip install pytest
6969
python3 -m pip install pytest-timeout
70+
python3 -m pip install pytest-xdist
7071
python3 -m pip install psutil
7172
7273
# TODO: disable warnings
@@ -101,20 +102,20 @@ jobs:
101102
- name: Run test/cli
102103
run: |
103104
pwd=$(pwd)
104-
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv test/cli
105+
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto test/cli
105106
106107
- name: Run test/cli (-j2)
107108
run: |
108109
pwd=$(pwd)
109-
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv test/cli
110+
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto test/cli
110111
env:
111112
TEST_CPPCHECK_INJECT_J: 2
112113

113114
- name: Run test/cli (--clang)
114115
if: false
115116
run: |
116117
pwd=$(pwd)
117-
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv test/cli
118+
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto test/cli
118119
env:
119120
TEST_CPPCHECK_INJECT_CLANG: clang
120121

0 commit comments

Comments
 (0)