我有一个需要测试函数中的变量的装置。如果函数级别的内省有效,则使用内省并在函数名称空间/上下文中声明变量应该有效,就像模块级别的内省一样,但每次运行代码时,我都会得到 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(使用前将#替换为@)