在使用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')
這時,我們再次運行用例后,中文標題就顯示正常了,如下圖:

