Pytest的装饰器——parametrize中ids里包含中文,用例标题显示异常如何解决?
**在使用pytest做测试的过程中,经常会用到pytest.mark.parametrize来对批量生成测试用例,比如**
@pytest.mark.parametrize(
['a', 'b', 'expect'],
[
(1, 2, 3),
(2, 2, 4),
(3, 2, 5)
])
def test_float_div(self, a, b, expect):
result = self.cal.add(a, b)
assert expect == result
这段代码会将[(1, 2, 3), (2, 2, 4), (3, 2, 5)]中的3组数据依次作为参数,a, b, expect传入到方法中,依次对cal.add()方法的计算结果result和预期结果expect进行比较断言
pytest执行后,会使用这3组输入数据来作为用例的标题,但是这样不便于我们查看,如下图红框中所示。
**parametrize中还可以增加一个参数ids,来对用例标题进行自定义,比如下面图片中表示的**
**当然,我们还可以使用中文来作为自定义标题,如下图:**
但是,在运行后,中文标题被使用unicode编码表示,怎么解决这个问题呢?
我们可以在test_case同级目录新建conftest.py文件,在文件中添加以下代码
from typing import List
def pytest_collection_modifyitems(
session: "Session", config: "Config", items: List["Item"]
) -> None:
for item in items:
item.name = item.name.encode('utf-8').decode('unicode-escape')
item._nodeid = item.nodeid.encode('utf-8').decode('unicode-escape')
这时,我们再次运行用例后,中文标题就显示正常了,如下图: