• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Python Pytest装饰器@pytest.mark.parametrize详解

    Pytest中装饰器@pytest.mark.parametrize('参数名',list)可以实现测试用例参数化,类似DDT
    如:@pytest.mark.parametrize('请求方式,接口地址,传参,预期结果',[('get','www.baidu.com','{"page":1}','{"code":0,"msg":"成功"})',('post','www.baidu.com','{"page":2}','{"code":0,"msg":"成功"}')])

    1、第一个参数是字符串,多个参数中间用逗号隔开

    2、第二个参数是list,多组数据用元祖类型;传三个或更多参数也是这样传。list的每个元素都是一个元组,元组里的每个元素和按参数顺序一一对应

    3、传一个参数 @pytest.mark.parametrize('参数名',list) 进行参数化

    4、传两个参数@pytest.mark.parametrize('参数名1,参数名2',[(参数1_data[0], 参数2_data[0]),(参数1_data[1], 参数2_data[1])]) 进行参数化

    import pytest
    #单参数单值
    @pytest.mark.parametrize("user",["18221124104"])
    def test(user):
        print(user)
        assert user=="18221124104"
     
    "C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
    ============================= test session starts =============================
    platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
    rootdir: C:\Users\wangli\PycharmProjects\Test\test
    collected 1 item
     
    test03.py 18221124104
    .
     
    ============================== 1 passed in 0.15s ==============================
     
    Process finished with exit code 0
     
    #单参数多值
    @pytest.mark.parametrize("user",["18221124104","18200000000","18200000001"])
    def test(user):
        print(user)
        assert user=="18221124104"
     
     
    "C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
    ============================= test session starts =============================
    platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
    rootdir: C:\Users\wangli\PycharmProjects\Test\test
    collected 3 items
     
    test03.py 18221124104
    .18200000000
    F18200000001
    F
     
    ================================== FAILURES ===================================
    ______________________________ test[18200000000] ______________________________
     
    user = '18200000000'
     
        @pytest.mark.parametrize("user",["18221124104","18200000000","18200000001"])
        def test(user):
            print(user)
    >       assert user=="18221124104"
    E       AssertionError
     
    test03.py:74: AssertionError
    ______________________________ test[18200000001] ______________________________
     
    user = '18200000001'
     
        @pytest.mark.parametrize("user",["18221124104","18200000000","18200000001"])
        def test(user):
            print(user)
    >       assert user=="18221124104"
    E       AssertionError
     
    test03.py:74: AssertionError
    ========================= 2 failed, 1 passed in 0.21s =========================
     
    Process finished with exit code 0
    
    #多参数多值
    @pytest.mark.parametrize("user,pwd",[("18221124104",111111),("18200000000",111111)])
    def test(user,pwd):
        print(user,pwd)
      
    "C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
    ============================= test session starts =============================
    platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
    rootdir: C:\Users\wangli\PycharmProjects\Test\test
    collected 2 items
     
    test03.py 18221124104 111111
    .18200000000 111111
    .
     
    ============================== 2 passed in 0.03s ==============================
     
    Process finished with exit code 0
     
    # 使用内置的mark.xfail标记为失败的用例就不运行了,直接跳过显示xfailed
    @pytest.mark.parametrize("user,pwd",[("18221124104",111111),pytest.param("18200000000",111111,marks=pytest.mark.xfail)])
    def test(user,pwd):
        print(user,pwd)
        assert user == "18221124104"
        assert pwd== 111111
      
    "C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
    ============================= test session starts =============================
    platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
    rootdir: C:\Users\wangli\PycharmProjects\Test\test
    collected 2 items
     
    test03.py 18221124104 111111
    .18200000000 111111
    x
     
    ======================== 1 passed, 1 xfailed in 0.14s =========================
     
    Process finished with exit code 0
     
    #若要获得多个参数化参数的所有组合,可以堆叠参数化装饰器
    @pytest.mark.parametrize("x", [0, 1])
    @pytest.mark.parametrize("y", [2, 3])
    def test_foo(x, y):
        print("测试数据组合:x->%s, y->%s" % (x, y))
     
    if __name__=="__main__":
        pytest.main(["-s","test03.py"])
     
     
    "C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test03.py
    ============================= test session starts =============================
    platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
    rootdir: C:\Users\wangli\PycharmProjects\Test\test
    collected 4 items
     
    test03.py 测试数据组合:x->0, y->2
    .测试数据组合:x->1, y->2
    .测试数据组合:x->0, y->3
    .测试数据组合:x->1, y->3
    .
     
    ============================== 4 passed in 0.03s ==============================
     
    Process finished with exit code 0

    到此这篇关于Python Pytest装饰器@pytest.mark.parametrize详解的文章就介绍到这了,更多相关pytest.mark.parametrize内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • python中有函数重载吗
    • 在Python中实现函数重载的示例代码
    • python装饰器原理源码示例分析
    • 理解python中装饰器的作用
    • 详解Python装饰器 给你的咖啡加点料
    • 如何正确理解python装饰器
    • python 装饰器的使用与要点
    • 如何利用饰器实现 Python 函数重载
    上一篇:pytest接口测试之fixture传参数request的使用
    下一篇:python实现邮箱发送信息
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Python Pytest装饰器@pytest.mark.parametrize详解 Python,Pytest,装饰,器,@pytest.mark.parametrize,