Использование светильников в Pytest - PullRequest
0 голосов
/ 03 октября 2018

У меня есть следующий код в файле 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 голосов
/ 09 мая 2019

Из документов pytest:

функции yield_fixture:

Начиная с pytest-3.0, приборы, использующие обычный декоратор приборов, могут использовать оператор yield дляпредоставить значения фикстуры и выполнить код разрыва, точно так же, как yield_fixture в предыдущих версиях.

Маркировка функций как yield_fixture все еще поддерживается, но не рекомендуется и не должна использоваться в новом коде.

Ссылка: https://docs.pytest.org/en/latest/yieldfixture.html

0 голосов
/ 03 октября 2018

Все о светильниках в py.test вы можете найти в this doc.Ниже вы можете найти пример использования светильников.Прежде всего, не используйте global.Тогда будьте осторожны с autouse параметром светильников.Для настройки и демонтажа yield_fixture будет вашим выбором.Используйте usefixtures в качестве декоратора для класса.Класс будет хорошо организовать ваш тестовый код.Вы можете найти больше информации об использовании в этой статье (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
...