MLu*_*MLu 6 python pytest python-3.x
我有一个pytest测试,它使用@pytest.mark.parametrize装饰器进行参数化,使用自定义函数load_test_cases()从 yaml 文件加载测试用例。
class SelectTestCase:
def __init__(self, test_case):
self.select = test_case['select']
self.expect = test_case['expect']
def __str__(self): # also tried __repr__()
# Attempt to print the 'select' attribute in "pytest -v" output
return self.select
def load_test_cases(path):
with open(path, "rt") as f:
test_cases = yaml.safe_load_all(f)
return [ SelectTestCase(test_case) for test_case in test_cases ]
@pytest.mark.parametrize("test_case", load_test_cases("tests/select-test-cases.yaml"))
def test_select_prefixes(test_case):
# .. run the test
Run Code Online (Sandbox Code Playgroud)
它运行良好,只是运行时的测试pytest -v显示为test_case0、test_case1等参数。
tests/test_resolver.py::test_select_prefixes[test_case0] PASSED [ 40%]
tests/test_resolver.py::test_select_prefixes[test_case1] PASSED [ 60%]
tests/test_resolver.py::test_select_prefixes[test_case2] PASSED [ 80%]
tests/test_resolver.py::test_select_prefixes[test_case3] PASSED [100%]
Run Code Online (Sandbox Code Playgroud)
我希望看到显示select的属性,例如
tests/test_resolver.py::test_select_prefixes["some query"] PASSED [ 40%]
tests/test_resolver.py::test_select_prefixes["another query"] PASSED [ 60%]
Run Code Online (Sandbox Code Playgroud)
我尝试向SelectTestCase__str__()类添加和__repr__()方法,但没有任何区别。
知道怎么做吗?
您可以使用ids 参数定义参数化测试名称的外观。这可以是字符串列表,也可以是一个将当前参数作为参数并返回要在测试名称中显示的 ID 的函数。
因此,在您的情况下,使用str该函数就足够了,因为您已经实现了__str__参数(类型为SelectTestCase)。如果你只是写:
@pytest.mark.parametrize("test_case", load_test_cases("tests/select-test-cases.yaml"),
ids=str)
def test_select_prefixes(test_case):
# .. run the test
Run Code Online (Sandbox Code Playgroud)
你会得到想要的行为,例如
tests/test_resolver.py::test_select_prefixes[some query] PASSED [ 40%]
tests/test_resolver.py::test_select_prefixes[another query] PASSED [ 60%]
Run Code Online (Sandbox Code Playgroud)
除了撇号(您可以通过__str__相应调整来添加)。
| 归档时间: |
|
| 查看次数: |
3784 次 |
| 最近记录: |