如何共享在夹具中创建的会话对象,并将其范围作为pytest / unittest测试中的会话

问题描述 投票:2回答:1

我们正在通过在python中实现unittest和pytest来创建测试。我们想使用固定装置进行设置,并在会话和测试级别进行拆除。如何使用在设置会话固定装置中创建的对象以用于功能固定装置的设置。示例我想创建一个驱动程序对象,例如driver = webdriver.Chrome(),以初始化浏览器并在测试方法和功能范围固定装置中使用该驱动程序对象。

conftest.py导入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导入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")
installation pytest fixtures
1个回答
1
投票

一个灯具也可以使用其他灯具。这意味着您可以在模块装置中使用会话装置,可以在类装置中使用模块装置,依此类推。您也可以在其他夹具中使用相同的示波器夹具。只有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固定装置,因此不必使用setUptearDown方法创建BaseTest。但是,这取决于测试案例的结构。

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

© www.soinside.com 2019 - 2024. All rights reserved.