gpt4 book ai didi

installation - 如何共享在 pytest/unittest 测试中具有作为 session 范围的 fixture 中创建的 session 对象

转载 作者:行者123 更新时间:2023-12-03 09:25:49 26 4
gpt4 key购买 nike

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

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")

基础测试.py 导入单元测试

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

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

测试.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")

最佳答案

fixture 也可以使用其他 fixture 。这意味着您可以在模块 fixture 内使用 session fixture ,可以在类 fixture 内使用模块 fixture 等等。您也可以在其他 fixture 中使用相同的范围 fixture 。只有 2 个限制是您不能向后导入 fixture(比如在类级别 fixture 中使用函数级别 fixture)并且不能存在循环依赖。

请找到问题中给出的相同示例,其中包含一个带有 scope=function 的附加 fixture ,并在另一个 fixture 中使用一个 fixture 。

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 fixture,因此没有必要使用 setUptearDown 方法创建 BaseTest。但是,这是您的选择,具体取决于 hte 测试用例的结构。

测试文件.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

关于installation - 如何共享在 pytest/unittest 测试中具有作为 session 范围的 fixture 中创建的 session 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60769509/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com