pytest参数化自定义测试用例标题【@pytest.mark.parametrize(ids=XXX)】

前言:

复制代码
ids

含义:用例的ID

格式:传一个字符串列表

作用:可以标识每一个测试用例,自定义测试数据结果的显示,为了增加可读性

强调:ids列表的长度需要与测试数据列表的长度一致
复制代码

  pytest使用装饰器@pytest.mark.parametrize进行参数化后,在控制台或者测试报告中的测试用例标题都是以参数组合起来命名的【在测试用例的后面跟中括号里面的内容】,这样的标题看起来不太直观;

  我们想要展示我们自己定义的标题,这时候需要用到装饰器@pytest.mark.parametrize参数化的另外一个参数ids来实现。

没有使用ids之前:

复制代码
# file_name: test_parametrize.py


import pytest


def return_user():
    return [('lwjnicole', '12345'), ('nicole', '123111')]


class Test_D:

    @pytest.mark.parametrize("username,password",return_user())
    def test_login(self, username, password):
        print("username = {}, password = {}".format(username, password))
        assert username == "lwjnicole"


if __name__ == '__main__':
    pytest.main(['-s', 'test_parametrize.py'])
复制代码

运行结果:

 从结果中可以看到当测试用例数据参数化的时候用例的标题是由所有参数组合而来的,这样看起来不怎么直观。

使用ids自定义测试用例标题

复制代码
# file_name: test_parametrize.py


import pytest


def return_user():
    return [('lwjnicole', '12345'), ('nicole', '123111')]


class Test_D:

    @pytest.mark.parametrize("username,password",
                             return_user(),
                             ids=[
                                 "login success",
                                 "login fail"
                             ])
    def test_login(self, username, password):
        print("username = {}, password = {}".format(username, password))
        assert username == "lwjnicole"


if __name__ == '__main__':
    pytest.main(['-s', 'test_parametrize.py'])
复制代码

运行结果:

从结果中可以看到用例的标题已经不再是各参数的组合了,而是我们在参数ids中定义的,这样我们就实现了测试用例标题的自定义。

一个更直观的例子:

可以将用例的测试点显示在每一条测试用例的后面,是测试效果显示更直观。

posted @   习久性成  阅读(1210)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示