遇一山,过一山,处处有风景;只要勇敢向前,一路尽是繁花盛开。 | (点击查看→)【测试干货】python/java自动化、持续集成、性能、测开、简历、笔试面试等

pytest简易教程(19):parametrize中给用例取别名

 

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

 

posted @ 2024-02-23 22:01  全栈测试笔记  阅读(101)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end