Skip to content

Commit afef687

Browse files
committed
use pytest-xdist to utilize multiple workers for Python tests
1 parent 6472da9 commit afef687

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
@@ -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 all warnings
@@ -103,20 +104,20 @@ jobs:
103104
- name: Run test/cli
104105
run: |
105106
pwd=$(pwd)
106-
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv test/cli
107+
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto test/cli
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/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
@@ -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
- name: CMake
@@ -103,22 +104,22 @@ jobs:
103104
- name: Run test/cli
104105
run: |
105106
pwd=$(pwd)
106-
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv test/cli
107+
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto test/cli
107108
env:
108109
TEST_CPPCHECK_INJECT_EXECUTOR: thread
109110

110111
- name: Run test/cli (-j2)
111112
run: |
112113
pwd=$(pwd)
113-
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv test/cli
114+
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto test/cli
114115
env:
115116
TEST_CPPCHECK_INJECT_J: 2
116117

117118
- name: Run test/cli (--clang)
118119
if: false
119120
run: |
120121
pwd=$(pwd)
121-
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv test/cli
122+
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto test/cli
122123
env:
123124
TEST_CPPCHECK_INJECT_CLANG: clang
124125

.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
@@ -103,20 +104,20 @@ jobs:
103104
- name: Run test/cli
104105
run: |
105106
pwd=$(pwd)
106-
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv test/cli
107+
TEST_CPPCHECK_EXE_LOOKUP_PATH="$pwd/cmake.output" python3 -m pytest -Werror --strict-markers -vv -n auto test/cli
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

0 commit comments

Comments
 (0)