Pytest - 在功能级别上进行内省

2023-12-28

我有一个需要测试函数中的变量的装置。如果函数级别的内省有效,则使用内省并在函数名称空间/上下文中声明变量应该有效,就像模块级别的内省一样,但每次运行代码时,我都会得到 None 而不是字符串“Fancy Table”。

在夹具中,我将范围设置为“function”,然后通过 getattr 和 request.function 进行内省:

#conftest.py
@pytest.fixture(scope='function')
def table(request):
    from data_setup import create_table
    table_name = getattr(request.function, "table_name", None)
    create_table(request, table_name)

我在测试函数中声明变量 table_name :

#test_file.py
class TestTable():

    @pytest.mark.tags("table")
    def test_create_table(self, test_db):
        table_name = "Fancy Table"
        current_page = TablePage(self.test_driver, test_db)
        current_page.go_to_kitchen("Eva", "Evas Kitchen")
        current_page.create_first_table(expected_table_name)
        Validation.assert_equal(expected_table_name, current_page.get_name(), "Table had the wrong name!")

在模块级别上执行此操作是有效的,就像类一样,但是一旦我尝试在函数级别上执行此操作,固定装置就会再次输出 None 。我在功能级别上使用夹具自省是否错误?如果不是这样的话怎么用呢?


函数变量是局部的,在函数返回后被销毁,它们不以任何方式绑定函数对象......这就是Python的工作方式,与py.test.

如果您绑定了,您的示例将会起作用table_name局部变量显式地传递给测试函数,有效地让它比通常的生命周期更长:

@pytest.mark.tags("table")
def test_create_table(self, test_db):
    test_create_table.table_name = "Fancy Table"

另一方面,仅仅通过table_name to TablePage明确地?它会更简单、直接、明确。 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pytest - 在功能级别上进行内省 的相关文章

随机推荐