-
Notifications
You must be signed in to change notification settings - Fork 218
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CI: Add pytest plugins pytest-xdist and pytest-rerunfailures #3193
Conversation
d4cd959
to
d451df7
Compare
Ping @GenericMappingTools/pygmt-maintainers for comments on adding two more pytest plugins. If agreed, then maybe we should also add them to other workflows, like:
|
Edit: Works after the patch PR #3241. |
CodSpeed Performance ReportMerging #3193 will improve performances by ×3.4Comparing Summary
Benchmarks breakdown
|
The two pytest plugins are only installed to the "Benchmarks", "Tests" and "Dev Tests" workflows, because we only care about the speed of these three workflows. |
Our "Tests" workflow sometimes fails due to a few crashed tests, especially on Windows and macOS. The crashes are likely caused by unfixed upstream bugs, and they cause the CI to fail immediately, so other tests are not executed at all, which is very annoying.
Inspired by this post (https://stackoverflow.com/a/32140354), we can use the pytest-xdist to let other tests continue even if one or more tests crash (https://pytest-xdist.readthedocs.io/en/stable/crash.html). The crashed tests are marked as failures.
In addition to
pytest-xdist
, we can also use thepytest-rerunfailures
plugin, which can rerun failing tests multiple times. So, if a test crashes but passes when rerun, then the test should be good.Initially, I thought we have to use
-n 1
to run the tests using one process because PyGMT uses a single global session and can't be run parallel withoutimport pygmt
in each process (xref #217). However, it turns out-n auto
works, which is unexpected. Here,-n auto
means using as many processes as the number of cores (2 for Linux/Windows and 3 for macOS with the GitHub-hosted agents), which speed up the CI runs significantly.Here is the comparison of the "Run tests" step of the latest runs of the main branch (https://github.com/GenericMappingTools/pygmt/actions/runs/8825374546) and this PR (https://github.com/GenericMappingTools/pygmt/actions/runs/8825127559):
Looking at the detailed log in https://github.com/GenericMappingTools/pygmt/actions/runs/8825127559/job/24228863150, we can see that the
test_tilemap_no_clip
test crashed but passed in rerun, so the CI run still passes.