python 学习记录--pytest.mark.parametrize参数中indirect=True or False 的区别

文章讨论了pytest的parametrize装饰器中indirect参数的不同设置如何影响测试函数的行为:当indirect=False时,test_01被视为普通变量;indirect=True时,test_01被视为调用的函数。每个设置下,logging输出展示了对应的结果。
摘要由CSDN通过智能技术生成

# 1) 当 indirect=False 时,argnames 参数被当成普通变量;

# 2) 当 indirect=True 时,parametrize 中的 argnames 参数被当成函数执行,且 argvalues 值作为 argnames函数中的参数传参

一、具体实例:当indirect=False 时:parametrize中的test_01 被当作一个普通的变量名看待,也就是test_01函数并未被调用执行

import pytest
import logging


class Test_mark():
    @pytest.fixture()
    def test_01(self,request):
        data=request.param
        self.a = data+1
        logging.info(f"test_01本次输出结果是{self.a}")
        return self.a

    @pytest.mark.parametrize("test_01",[1,2,3],indirect=False)
    def test_03(self,test_01):
        self.b=test_01+1
        logging.info(f"test_03本次输出结果是{self.b}")


if __name__ == '__main__':
    pytest.main(['-vs','test.py'])
test.py::Test_mark::test_03[1] PASSED
test.py::Test_mark::test_03[2] PASSED
test.py::Test_mark::test_03[3] PASSED
2024-03-01 12:26:31--[INFO]--test.py|test_03本次输出结果是2
2024-03-01 12:26:31--[INFO]--test.py|test_03本次输出结果是3
2024-03-01 12:26:31--[INFO]--test.py|test_03本次输出结果是4


二、具体实例:当indirect=True 时:parametrize中的test_01 被当作一个函数名看待,也就是test_01函数被调用执行

import pytest
import logging


class Test_mark():
    @pytest.fixture()
    def test_01(self,request):
        data=request.param
        self.a = data+1
        return self.a

    @pytest.mark.parametrize("test_01",[1,2,3],indirect=True)
    def test_03(self,test_01):
        self.b=test_01+1
        logging.info(f"test_03本次输出结果是{self.b}")


if __name__ == '__main__':
    pytest.main(['-vs','test.py'])
test.py::Test_mark::test_03[1] PASSED
test.py::Test_mark::test_03[2] PASSED
test.py::Test_mark::test_03[3] PASSED
2024-03-01 12:33:59--[INFO]--test.py|test_03本次输出结果是3
2024-03-01 12:33:59--[INFO]--test.py|test_03本次输出结果是4
2024-03-01 12:33:59--[INFO]--test.py|test_03本次输出结果是5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值