diff --git a/testing/example_scripts/README.rst b/testing/example_scripts/README.rst new file mode 100644 index 000000000..97d0fda5c --- /dev/null +++ b/testing/example_scripts/README.rst @@ -0,0 +1,9 @@ +Example test scripts +===================== + + +The files in this folder are not direct tests, but rather example test suites that demonstrate certain issues/behaviours. + +In the future we will move part of the content of the acceptance tests here in order to have directly testable code instead of writing out things and then running them in nested pytest sessions/subprocesses. + +This will aid debugging and comprehension. diff --git a/testing/example_scripts/issue_519.py b/testing/example_scripts/issue_519.py new file mode 100644 index 000000000..d8b28521d --- /dev/null +++ b/testing/example_scripts/issue_519.py @@ -0,0 +1,54 @@ + +import pytest +import pprint + + +def pytest_generate_tests(metafunc): + if "arg1" in metafunc.fixturenames: + metafunc.parametrize("arg1", ["arg1v1", "arg1v2"], scope="module") + + if "arg2" in metafunc.fixturenames: + metafunc.parametrize("arg2", ["arg2v1", "arg2v2"], scope="function") + + +@pytest.fixture(scope="session") +def checked_order(): + order = [] + + yield order + pprint.pprint(order) + assert ( + order + == [ + ("testing/example_scripts/issue_519.py", "fix1", "arg1v1"), + ("test_one[arg1v1-arg2v1]", "fix2", "arg2v1"), + ("test_two[arg1v1-arg2v1]", "fix2", "arg2v1"), + ("test_one[arg1v1-arg2v2]", "fix2", "arg2v2"), + ("test_two[arg1v1-arg2v2]", "fix2", "arg2v2"), + ("testing/example_scripts/issue_519.py", "fix1", "arg1v2"), + ("test_one[arg1v2-arg2v1]", "fix2", "arg2v1"), + ("test_two[arg1v2-arg2v1]", "fix2", "arg2v1"), + ("test_one[arg1v2-arg2v2]", "fix2", "arg2v2"), + ("test_two[arg1v2-arg2v2]", "fix2", "arg2v2"), + ] + ) + + +@pytest.yield_fixture(scope="module") +def fix1(request, arg1, checked_order): + checked_order.append((request.node.name, "fix1", arg1)) + yield "fix1-" + arg1 + + +@pytest.yield_fixture(scope="function") +def fix2(request, fix1, arg2, checked_order): + checked_order.append((request.node.name, "fix2", arg2)) + yield "fix2-" + arg2 + fix1 + + +def test_one(fix2): + pass + + +def test_two(fix2): + pass diff --git a/tox.ini b/tox.ini index c346b5682..e2495af4c 100644 --- a/tox.ini +++ b/tox.ini @@ -192,7 +192,7 @@ rsyncdirs = tox.ini pytest.py _pytest testing python_files = test_*.py *_test.py testing/*/*.py python_classes = Test Acceptance python_functions = test -norecursedirs = .tox ja .hg cx_freeze_source +norecursedirs = .tox ja .hg cx_freeze_source testing/example_scripts xfail_strict=true filterwarnings = error