Hi Nikolaus, On 11/26/2014 01:21 PM, Nikolaus Rath wrote: > I have a parametrized fixture foo, and some test cases that use it: > > @pytest.fixture(params=(1,2,3,4,5)) > def foo(request): > # ... > return foo_f > > def test_1(foo): > # ... > > def test_2(foo): > # .... > > Now, I'd like to add an additional test, but running it only makes sense > for some of the fixture parameters. So far I've solved this by providing > the parameter value as a fixture attribute and skipping "unsupported" values: > > @pytest.fixture(params=(1,2,3,4,5)) > def foo(request): > # ... > foo_f.param = request.param > return foo_f > > def test_3(foo): > if foo.param not in (1,4,5): > raise pytest.skip("doesn't make sense") > > > This works, but I don't like it very much because it means that the test > suite can never be executed without skipping some tests. I'd rather > reserve skipping for cases where the test could in principle be > executed, but for some reason cannot work at the moment (e.g. because > there's no internet, or a required utility is not installed). > > Is there a way to solve the above scenario without skipping tests? > > Ideally, I'd be able to do something like this: > > @only_for_param((1,4,5)) > def test_3(foo): > ...
I think in order to do this you'll need to use the `pytest_generate_tests` hook: http://pytest.org/latest/parametrize.html#pytest-generate-tests I might be wrong (haven't had to use pytest_generate_tests much), but I don't think you'll be able to keep the simple parametrized fixture and layer this on top; I don't think pytest_generate_tests can tweak the fixture params per-test. You'll need to remove the fixture parametrization and do it instead via pytest_generate_tests, using indirect=True. Carl
signature.asc
Description: OpenPGP digital signature
_______________________________________________ pytest-dev mailing list pytest-dev@python.org https://mail.python.org/mailman/listinfo/pytest-dev