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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值