我在conftest.py文件中有以下代码
@pytest.fixture(scope="session", autouse=True)
def app(request):
global fixture
browser = request.config.getoption("--browser")
base_url=target['baseUrl'])
fixture = Application(browser=browser,base_url=web_config['baseUrl'])
print("\n BEFORE SESSION")
fixture.session.login()
return fixture
@pytest.fixture(scope="session", autouse=True)
def stop(request):
def fin():
print("\n AFTER SESSION")
fixture.session.ensure_logout()
fixture.destroy()
request.addfinalizer(fin)
return fixture
测试文件如下所示。即夹具,我显然不打电话。
import pytest
@pytest.yield_fixture()
def setup_method():
print("\n BEFORE METHOD")
yield
print("\n AFTER METHOD")
@pytest.mark.usefixtures("setup_method")
def test_add_text_element(app):
print("\n RUN TEST")
app.element.add_blank_page()
app.element.add_element(element_name='Header')
但是,如果我需要设置其他一些班级设置怎么办?如果我得到另一个固定装置,该如何在测试文件中代替现在使用的固定装置?
答案 0 :(得分:2)
您可以在this文档中找到有关py.test中的固定装置的所有信息。您可以在下面找到如何使用灯具的示例。首先,不要使用global
。然后注意灯具的autouse
参数。对于设置和拆卸,yield_fixture
是您的选择。使用usefixtures
作为类的装饰器。上课会很好地组织您的测试代码。您可以在此article(RUS)
conftest.py
@pytest.yield_fixture()
def destroy_method():
yield
print("\n DESTROY")
@pytest.yield_fixture(scope="session", autouse=True)
def app(request):
browser = request.config.getoption("--browser")
fixture = Application(browser=browser, base_url=web_config['baseUrl'])
print("\n BEFORE SESSION")
fixture.session.login()
yield fixture
print("\n AFTER SESSION")
fixture.session.ensure_logout()
fixture.destroy()
测试文件如下所示:
@pytest.yield_fixture()
def setup_method():
print("\n BEFORE METHOD")
yield
print("\n AFTER METHOD")
@pytest.fixture()
def fix1():
return 1
@pytest.fixture()
def fix2():
return 2
@pytest.mark.usefixtures("setup_method", "destroy_method")
class TestSuiteA:
def test_add_text_element(self, fix1, fix2):
print("\n RUN TEST")
assert fix1 + 1 == fix2
答案 1 :(得分:0)
来自pytest文档:
“收益率固定”功能:
自pytest-3.0起,灯具开始使用 普通灯具装饰器可以使用yield语句提供 夹具值并执行拆卸代码,就像yield_fixture一样 在以前的版本中。
仍支持将函数标记为yield_fixture,但已弃用 并且不应在新代码中使用。