The big assumption underlying the two splitting algorithms is that the order of collected items is constant.
However, I've come across a case where this assumption was violated.
In my case I had a test parametrised with pytest.mark.parametrize, but the items to parametrize with would sometimes change order.
Take this example:
import pytest
@pytest.mark.parametrize('name', set(['henk', 'ingrid']))
def test_hello(name):
pass
If you run this often enough you'll see that the order changes:
[2021-06-17 22:47:10] test_temp.py::test_hello[henk] PASSED [ 50%]
[2021-06-17 22:47:10] test_temp.py::test_hello[ingrid] PASSED [100%]
and
[2021-06-17 22:47:10] test_temp.py::test_hello[ingrid] PASSED [ 50%]
[2021-06-17 22:47:10] test_temp.py::test_hello[henk] PASSED [100%]
I'm not sure how to address this, but I think there are a few options:
- not splitting over different values of
parametrize for the same test. In other words, make sure that a single group will run all tests for test_hello.
- try to create some deterministic order out of test cases by sorting. I'm not sure this will work in all cases tho (for example it might not work for objects)
- do splitting on one machine, save the splits and just call
pytest with those pre-calculated groups (so not really using this plugin as a plugin :p)
The big assumption underlying the two splitting algorithms is that the order of collected items is constant.
However, I've come across a case where this assumption was violated.
In my case I had a test parametrised with
pytest.mark.parametrize, but the items to parametrize with would sometimes change order.Take this example:
If you run this often enough you'll see that the order changes:
and
I'm not sure how to address this, but I think there are a few options:
parametrizefor the same test. In other words, make sure that a single group will run all tests fortest_hello.pytestwith those pre-calculated groups (so not really using this plugin as a plugin :p)