当前位置: 首页 > 知识库问答 >
问题:

如何在pytest/unittest测试中共享在fixture中创建的会话对象,其作用域为会话

邵骏喆
2023-03-14

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

确认。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进口单位测试

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

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

test.py从wav2.fixtures.base导入pytest_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")

共有1个答案

艾国安
2023-03-14

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

请在问题中找到相同的示例,其中包含带有的附加夹具,并且在另一个夹具中使用夹具。

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夹具,因此不需要使用setupmethod和tearDown方法创建BaseTest。但是,这取决于测试用例的结构。

test\u文件。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

 类似资料:
  • 我目前正在从事一个托管在域上的laravel项目。此应用程序的一部分(某些功能)必须位于不同的域上。我在我的网上找到了一条路。在php中,我用以下命令映射了所有路由: 以及需要以相同方式位于另一个域上,但具有不同域的路由。好啊在主域中,我创建了一个具有src属性的图像: 指向此方法路线: 它起作用了。我在不同的域上共享同一个会话,但是,我想问你们,对于这个案例场景,你们是否知道更好的方法。我知道这

  • 我找了很多解决办法。谢了。

  • 下面是所有3个jsp页面的代码; test1.jsp(jsp第1页的代码) test2.jsp(jsp第2页的代码) test3.jsp(jsp第3页的代码) 在我的例子中,当我第一次调用test1.jsp并单击hyper链接时,它调用test2.jsp,并发现会话已经存在,然后直接调用test3.jsp。但在实际情况中,会话既不在test1.jsp上启动,也不在test2.jsp上启动,除非它进

  • 问题内容: 我曾经用PHP启动会话,但是当我的浏览器关闭时,该会话消失了。 如何使用PHP创建持续持续浏览器关闭的持久会话? 问题答案: 请参阅值session.cookie_lifetime。 默认值意味着在浏览器关闭时结束会话。 您可以使用ini_set在开始会话之前直接在应用程序中覆盖此值或在应用程序中设置它。将其设置为大于此值将导致会话在该持续时间内存活。 例如 上面的示例使会话cooki

  • 我正在开发一个电子商务应用程序。为此,我想为每个客户创建一个会话,以维护他们的购物车信息。 如果它是一个普通的JavaEE项目,我会使用并将所有购物车信息添加到该会话中。 我的问题是对于EJB项目,为上述目的创建会话的过程是什么?

  • 问题内容: 我将JSF 2用于视图,将Spring用于业务逻辑。我正在尝试使用注解(@Scope(“ session”))将会话范围设置为我的一个Spring bean,但是却遇到了这个异常: 我知道RequestContextListener。在我的web.xml中。我还添加了RequestContextFilter: 似乎没有任何作用。我究竟做错了什么?谢谢! 问题答案: 尝试使用aop:sc