在Pytest中使用固定装置

时间:2018-10-03 09:11:44

标签: python selenium-webdriver automated-tests pytest

我在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')

但是,如果我需要设置其他一些班级设置怎么办?如果我得到另一个固定装置,该如何在测试文件中代替现在使用的固定装置?

2 个答案:

答案 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,但已弃用   并且不应在新代码中使用。

参考:https://docs.pytest.org/en/latest/yieldfixture.html