Pytest精通指南(15)Parametrize之设置别名和解决中文乱码



请添加图片描述

前言

前有文章讲解了fixture函数中使用ids参数给测试用例函数设置别名;
查漏补缺连接:待定
当使用@pytest.mark.parametrize来参数化我们的测试函数时,也可以使用ids参数为每个参数组合指定一个唯一的标识符,这个标识符被称为id别名

这个id用于在测试报告中标识每个单独的测试实例,使得测试报告更具可读性。

使用ids参数设置别名

示例代码

import pytest

params = ["username", "password"]
values = [["admin", "admin"], ["guest", "guest"]]
agname = ["管理员用户:admin", "游客用户:guest"]


@pytest.mark.parametrize(argnames=params, argvalues=values, ids=agname)
def test_case_01(username, password):
    print(f"username={username}, username={password}")

执行结果

Python中,字符串的编码默认是UTF-8

但是,在某些环境或编辑器中,如果不正确地处理或显示UTF-8编码的字符串,可能会出现乱码。

当在pytest@pytest.mark.parametrize中使用中文别名时,乱码问题可能会出现,特别是当环境或测试报告生成工具不支持或错误处理UTF-8编码时。

请添加图片描述

解决别名乱码方式一

conftest.py文件添加如下代码

def pytest_collection_modifyitems(items):
    """pytest_collection_modifyitems 是pytest中的一个hook函数(内置的)
    是为了在测试用例收集完成后对测试项的 name 和 nodeid 进行处理,
    以确保它们在控制台上的显示是正确的。
    这段代码通过编码和解码操作来处理中文字符,从而解决了可能出现的乱码问题。"""
    print('\n')
    for item in items:
        print("处理前的测试用例名称", item.name)
        print("处理前的测试用例节点", item._nodeid)
        item.name = item.name.encode("utf-8").decode("unicode_escape")
        item._nodeid = item.nodeid.encode("utf-8").decode("unicode_escape")

执行结果

请添加图片描述

解决别名乱码方式二

pytest.ini配置文件中添加如下代码

这个配置项的目的是禁止pytest对测试ID(通常是通过@pytest.mark.parametrizeids参数设置的)中的特殊字符(如非ASCII字符)进行转义。

默认情况下,pytest会对测试ID中的特殊字符进行转义,以确保它们可以在命令行和测试报告中正确显示。然而,在某些情况下,特别是当控制台或终端的字符编码设置不正确时,这种转义可能会导致乱码。

[pytest]
disable_test_id_escaping_and_forfeit_all_rights_to_community_support = True

执行结果

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要休息的KK.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值