pytest简易教程汇总,详见:https://www.cnblogs.com/uncleyong/p/17982846
之前我们分享了fixture中使用ids给用例取别名(详见:https://www.cnblogs.com/uncleyong/p/18020735)
类似的,parametrize中也可以使用ids给用例取别名,从而增加可读性
示例:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : 韧
# @wx :ren168632201
# @Blog :https://www.cnblogs.com/uncleyong/
import pytest
data = ["ren", "qzcsbj"]
ids = [f"注册用户:{name}" for name in data]
@pytest.mark.parametrize("name", data, ids=ids)
class TestQzcsbj:
def test_case(self, name):
print(f"name={name}")
结果:中文未正常显示,原因是pytest将ids视为ASCII字符,但ASCII字符不包含中文,所以pytest会将其转换为unicode编码展示
方案一:
在conftest.py中利用pytest提供的hook函数pytest_collection_modifyitems解决unicode编码问题
创建conftest.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : 韧
# @wx :ren168632201
# @Blog :https://www.cnblogs.com/uncleyong/
def pytest_collection_modifyitems(items):
"""测试用例收集完成时,将收集到的item的name和nodeid的中文显示在控制台上"""
for item in items:
item.name = item.name.encode("utf-8").decode("unicode_escape")
print(item.nodeid)
item._nodeid = item.nodeid.encode("utf-8").decode("unicode_escape")
结果:
方案二:
创建pytest.ini
[pytest]
disable_test_id_escaping_and_forfeit_all_rights_to_community_support = True