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')

这时,我们再次运行用例后,中文标题就显示正常了,如下图:

posted @ 2020-08-14 22:36  Hei蛋炒饭  阅读(2058)  评论(1编辑  收藏  举报