module和function的调用顺序:
import pytest @pytest.fixture(scope="module", params=["mod1", "mod2"]) def modarg(request): param = request.param print (" SETUP modarg %s" % param) yield param print (" TEARDOWN modarg %s" % param) @pytest.fixture(scope="function", params=[1,2]) def otherarg(request): param = request.param print (" SETUP otherarg %s" % param) yield param print (" TEARDOWN otherarg %s" % param) def test_0(otherarg): print (" RUN test0 with otherarg %s" % otherarg) def test_1(modarg): print (" RUN test1 with modarg %s" % modarg) def test_2(otherarg, modarg): print (" RUN test2 with otherarg %s and modarg %s" % (otherarg, modarg))
结果:
D:Codep2>py.test test_module.py -v -s
============================= test session starts =============================
platform win32 -- Python 2.7.15, pytest-3.6.3, py-1.5.4, pluggy-0.6.0 -- c:python27python.exe
cachedir: .pytest_cache
rootdir: D:Codep2, inifile:
plugins: allure-adaptor-1.7.10
collected 8 items
test_module.py::test_0[1]
SETUP otherarg 1
RUN test0 with otherarg 1
PASSED TEARDOWN otherarg 1
test_module.py::test_0[2]
SETUP otherarg 2
RUN test0 with otherarg 2
PASSED TEARDOWN otherarg 2
test_module.py::test_1[mod1]
SETUP modarg mod1
RUN test1 with modarg mod1
PASSED
test_module.py::test_2[mod1-1]
SETUP otherarg 1
RUN test2 with otherarg 1 and modarg mod1
PASSED TEARDOWN otherarg 1
test_module.py::test_2[mod1-2]
SETUP otherarg 2
RUN test2 with otherarg 2 and modarg mod1
PASSED TEARDOWN otherarg 2
test_module.py::test_1[mod2]
TEARDOWN modarg mod1
SETUP modarg mod2
RUN test1 with modarg mod2
PASSED
test_module.py::test_2[mod2-1]
SETUP otherarg 1
RUN test2 with otherarg 1 and modarg mod2
PASSED TEARDOWN otherarg 1
test_module.py::test_2[mod2-2]
SETUP otherarg 2
RUN test2 with otherarg 2 and modarg mod2
PASSED TEARDOWN otherarg 2
TEARDOWN modarg mod2
========================== 8 passed in 0.12 seconds ===========================