как поделиться объектом сеанса, созданным в приборе, имеющем область видимости как сеанс в тестах pytest / unittest - PullRequest
3 голосов
/ 20 марта 2020

мы создаем тесты, внедряя unittest и pytest в python. мы хотим использовать приборы для настройки и демонтажа на уровне сеанса и тестирования. Как использовать объект, созданный в настройке сеанса, для использования при настройке функции. Пример Я хочу создать объект драйвера, такой как driver = webdriver. Chrome () для инициализации браузера и использования объекта драйвера в методах тестирования и фиксации области действия функции.

conftest.py import pytest

@pytest.fixture(scope="session")
def setupsession():
    print("Starting Session")

    yield
    print("Ending Session")


@pytest.fixture(scope="module")
def setupmodule(request):
    print("starting module")
    yield
    print("Ending Module")


@pytest.fixture(scope="class")
def setupclass(request):
    print("starting module")
    yield
    print("Ending Module")

Basetest.py импорт unittest

class BaseTest(unittest.TestCase):
    def setUp(self):
        print("inside Base setup")

    def tearDown(self):
        print("inside base teardown")

test.py импорт pytest из wav2.fixtures.base_test import BaseTest

@pytest.mark.usefixtures("setupsession", "setupmodule")
class TestSample(BaseTest):
    def test1(self):
        print("calling inside test test1")
        self.assertTrue(False)

    def test2(self):
        print("calling inside test tes`enter code here`t2")

1 Ответ

2 голосов
/ 22 марта 2020

Устройство также может использовать другое устройство. Это означает, что вы можете использовать фиксатор сеанса внутри фиксатора модуля, вы можете использовать фиксатор модуля внутри фиксатора класса и так далее. Вы также можете использовать тот же осциллограф в другом приспособлении. Ограничение только на 2 состоит в том, что вы не можете импортировать осветитель в обратном направлении (например, используя осветитель уровня функции в осветителе уровня класса), и не может быть круговой зависимости.

Пожалуйста, найдите тот же самый пример, приведенный в вопросе, с дополнительным приспособлением с scope=function и использованием приспособления внутри другого приспособления.

conftest.py

import pytest
import unittest

@pytest.fixture(scope="session")
def setupsession(request):
    print("Starting Session")

    yield "session_obj"
    print("Ending Session")


@pytest.fixture(scope="module")
def setupmodule(request, setupsession):
    print("starting module")
    yield setupsession, "module_obj"
    print("Ending Module")


@pytest.fixture(scope="class")
def setupclass(request, setupmodule):
    print("starting class")
    yield (*setupmodule, "class_obj")
    print("Ending class")


@pytest.fixture(scope="function")
def setupmethod(request, setupclass):
    print("starting method")
    yield (*setupclass, "class_obj")
    print("Ending method")

Примечание: Поскольку мы создали приспособление setupmethod, нет необходимости создавать BaseTest с методами setUp и tearDown. Но это ваш выбор в зависимости от структуры тестовых случаев.

test_file.py

@pytest.mark.usefixtures("setupmethod")
class TestSample(BaseTest):
    def test1(self):
        print("calling inside test test1")
        self.assertTrue(False)

    def test2(self):
        print("calling inside test tes`enter code here`t2")

Ссылка: http://devork.be/talks/advanced-fixtures/advfix.html

...