1、fixture之 ids 参数
1)概述:
a、配合 params 参数化时使用,给每个测试用例分配 id ( 用例id的作用:用来描述测试用例的标题 ) ;
b、fixture之 ids 参数,中文编码问题:注意 [\u8f93\u5165\u6b63 ...] 这种不叫乱码, 这叫 unicode 编码,
需要 在 conftest.py 中 写个hook函数转码 ( def pytest_collection_modifyitems(items): );
2) 详情:
a、配合 params 参数化时使用,给每个测试用例分配 id ( 用例id的作用:用来描述测试用例的标题 )
test_ee.py 示例代码如下:
import pytest # fixture 之 ids 参数 , 配合 params 参数化时使用,给每个测试用例分配 id # ( 用例id的作用:用来描述测试用例的标题 ) user_data = [ {\'name\': \'sky\', \'age\': 18, \'hobby\': \'游泳\'}, {\'name\': \'Jack\', \'age\': 250, \'hobby\': \'搞钱\'}, {\'name\': \'Tony\', \'age\': 250, \'hobby\': \'玩游戏\'} ] test_name = [ \'用例1:sky\', \'用例2:Jack\', \'用例3:Tony\' ] @pytest.fixture(params=user_data, ids=test_name) def login(request): user = request.param return user def test_login(login): user = login print(f"用户名为:{user[\'name\']},年龄为:{user[\'age\']},爱好为:{user[\'hobby\']}")
执行结果如下:
没加 ids 参数的效果如下:
b、fixture之 ids 参数,中文编码问题:注意 [\u8f93\u5165\u6b63 ...] 这种不叫乱码, 这叫 unicode 编码,
需要 在 conftest.py 中 写个hook函数转码 ;
关于,def pytest_collection_modifyitems(items): 的使用, 参考资料:https://blog.csdn.net/waitan2018/article/details/104334932
# 函数名固定 # 把 测试用例名,节点名的 unicode编码(\u7528\u4f8b1\uff1a) 变成 中文 ; def pytest_collection_modifyitems(items): """ 测试用例搜集完成时,将搜集到的 item 的 name 和 nodeid的中文显示在控制台上 :param items: :return: """ for item in items: item.name = item.name.encode(\'utf-8\').decode(\'unicode_escape\') item._nodeid = item.nodeid.encode(\'utf-8\').decode(\'unicode_escape\')
执行结果如下,Unicode码已经变成中文了,如下:
2、@pytest.mark.parametrize 参数化时也可以加ids参数
test_ee_2.py 代码如下:
import pytest user_data = [ {\'name\': \'Tom\', \'age\': 20, \'hobby\': \'游泳\'}, {\'name\': \'Jack\', \'age\': 250, \'hobby\': \'搞钱\'}, {\'name\': \'Tony\', \'age\': 250, \'hobby\': \'玩游戏\'} ] test_name = [ \'用例1:Tom\', \'用例2:Jack\', \'用例3:Tony\' ] @pytest.mark.parametrize(\'user_data\', user_data, ids=test_name) def test_login(user_data): print(f"用户名为:{user_data[\'name\']},年龄为:{user_data[\'age\']},爱好为:{user_data[\'hobby\']}")
执行结果如下: