首页 > 其他分享 >Pytest - Fixture(10) - 测试用例传参给Fixture

Pytest - Fixture(10) - 测试用例传参给Fixture

时间:2023-05-30 18:34:47浏览次数:42  
标签:传参 10 name Fixture fixture pytest 测试用例 test login

Pytest - 测试用例传参给Fixture

  • 大多数时候我们在fixture封装的是登陆、获取cookie等操作,但是一个系统可能不止一个用户,有多个用户;

  • 在写测试用例的时候,如何告诉fixture我们需要登录哪个用户?

  • 可以通过测试用例给 fixture 传递参数,指定登陆用户账户信息。


传单个参数

  • fixture:

    • request 是 pytest 的内置 fixture ,主要用于传递参数;(命名不可变)

    • params 参数:一个可选的参数列表,它将导致多次调用fixture函数和使用它的所有测试;获取当前参数可以使用 request.param


  • 测试用例:

    • parametrize 装饰器:

      • "login" :函数名为 login 的 fixture ;

      • test_data:自定义的测试数据变量;变量为列表形式传递;

      • indirect=True:是将 login 当成一个函数去执行,而不是一个参数;并且将data当做参数传入 login 函数

    • def test_s1(login)

      • 这里的 login 是获取 fixture 返回的值,也是调用为 fixture 的login函数

test_py.py

import pytest

# 封装的登陆fixture
@pytest.fixture()
def login(request):
    # `request`: pytest 的内置 fixture
    # `params` : 一个可选的参数列表
    ##name = request.param 这一步是接收传入的参数
    name = request.param
    print(f"\n== 用户名:{name} ==")
    
    # 返回参数给测试用例使用
    return name

# 测试用例的数据
test_data = ["admin"]

# 测试用例
@pytest.mark.parametrize("login", test_data, indirect=True)
def test_s1(login):
    print("\n用例test_s1:fixture传单个参数")
    
    # 下面login参数,是引用方法login返回的name参数
    print(f"测试用例的登录账号:{login} ")

if __name__ == '__main__':
    pytest.main(['-q', 'test_py.py'])

image-20230530180559388



传多个参数

  • 如果需要传多个参数,可以传递 字典 类型 。

    test_py.py

    import pytest
    
    # 封装的登陆fixture
    @pytest.fixture()
    def login(request):
        user = request.param
        print(f"\n== 用户名:{user['name']},密码:{user['pwd']} ==")
        # 返回参数给测试用例使用
        return user
    
    # 传递多个测试数据,使用数据字典
    test_data = [
        {"name": "admin",
         "pwd": "12345"}
    ]
    
    
    # 测试用例
    @pytest.mark.parametrize("login", test_data, indirect=True)
    def test_s1(login):
        print("\n用例test_s1:fixture传多个参数")
        # 下面login参数,是引用方法login返回的name参数
        print(f"测试用例的登录账号:{login['name']} ")
        print(f"测试用例的登录密码:{login['pwd']} ")
    
    
    if __name__ == '__main__':
        pytest.main(['-q', 'test_py.py'])
    

    image-20230530180655214



多个fixture(一个装饰器)

  • 在只使用一个装饰器情况下,要给多个fixture的传递参数,我们需要修改以下几点:

    • 使用列表 + 元祖传递的参数;

    • 在测试用例的装饰器和测试用例引用的fixture函数,填写需要引用fixture名称;

import pytest


# 登陆用户名fixture
@pytest.fixture()
def login_name(request):
    name = request.param
    print(f"\n== fixture输出的用户名:{name} ==")
    return name


# 登陆密码fixture
@pytest.fixture()
def login_pwd(request):
    pwd = request.param
    print(f"== fixture输出的密码:{pwd} ==")
    return pwd


# 传递测试数据给多个fixture,使用列表+元祖的形式
test_data = [
    ("admin", "123"),
    ("root", "456")
]


# 测试用例
@pytest.mark.parametrize("login_name, login_pwd", test_data, indirect=True)
def test_s1(login_name, login_pwd):
    print("\n用例test_s1: 多个fixture(一个装饰器)")

    # 使用fixture返回的参数
    print(f"测试用例的登录账号:{login_name} ")
    print(f"测试用例的登录密码:{login_pwd} ")

if __name__ == '__main__':
    pytest.main(['-q', 'test_py.py'])

image-20230530180821511



多个fixture(叠加装饰器)

  • 多个fixfure的装饰器的使用;

    • 测试用例执行数 = 装饰器数量 * 一组测试数据量最多的数据
    import pytest
    
    
    # 封装的登陆fixture
    @pytest.fixture()
    def login_name(request):
        name = request.param
        print(f"\n== fixture输出的用户名:{name} ==")
        return name
    
    @pytest.fixture()
    def login_pwd(request):
        pwd = request.param
        print(f"== fixture输出的密码:{pwd} ==")
        return pwd
    
    
    # 测试数据
    name = ["admin", "root"]
    pwd = ["12345", "98765"]
    
    
    # 测试用例,调用多个fixture
    @pytest.mark.parametrize("login_pwd", pwd, indirect=True)
    @pytest.mark.parametrize("login_name", name, indirect=True)
    def test_s1(login_name, login_pwd):
        print("\n用例test_s1:测试用例,调用多个fixture")
    
        # 使用fixture返回的参数
        print(f"测试用例的登录账号:{login_name} ")
        print(f"测试用例的登录密码:{login_pwd} ")
    
    if __name__ == '__main__':
        pytest.main(['-q', 'test_py.py'])
        
    

    image-20230530180943071


标签:传参,10,name,Fixture,fixture,pytest,测试用例,test,login
From: https://www.cnblogs.com/mzline/p/17444054.html

相关文章

  • git 删除分支:010
    讲解内容:(删除已经合并的分支)和(删除未合并的分支) 假如我现在创建了三个分支,如下: 删除已合并分支:要怎么区分哪些是已合并或未合并呢?首先得切换到主分支下,使用命令:gitbranch--merged  (查看所有已经合并的分支) 查看所有未合并的分支:gitbranch--no-merged   ......
  • Pytest - Fixture(9) - Fixture传参给测试用例
    Pytest-Fixture传参给测试用例如果想要依赖fixture传递参数给测试用例,可以通过yield或者return来返回参数;yield:实现setup和teardown,并将参数传递给测试用例;return:仅实现setup,并将参数传递给测试用例而已;传单个参数return传递单个参数:test_py.pyimpo......
  • Pytest - Fixture(8) - 作用域依赖关系
    Pytest-作用域依赖关系添加了@pytest.fixture,如果fixture还想依赖其他fixture,需要用函数传参的方式:当一个函数请求另一个函数时,首先执行另一个函数。如果函数b请求函数a,函数a将首先执行,因为b依赖于a,没有a就无法运行。即使b不需要a的结果,它仍然可以......
  • leetcode 107. Binary Tree Level Order Traversal II
    Givenabinarytree,returnthebottom-uplevelordertraversalofitsnodes'values.(ie,fromlefttoright,levelbylevelfromleaftoroot).Forexample:Givenbinarytree[3,9,20,null,null,15,7],3/\920/\157returnits......
  • 猿辅导推出小猿学练机:10.3寸护眼墨水屏+封闭式系统
    5月30日,沉默近两年的猿辅导在智能硬件领域释放重磅动作,推出旗舰型产品小猿学练机。该产品面向全国中小学生,主打学练一体、以练促学,重新定义学练一体化的数字化产品体系。这一动作代表着,猿辅导正式入局1000亿智能硬件市场。2021年以来,我国新增452家学习硬件相关企业。来自弗若斯特沙......
  • leetcode 101. Symmetric Tree
    Givenabinarytree,checkwhetheritisamirrorofitself(ie,symmetricarounditscenter).Forexample,thisbinarytree[1,2,2,3,4,4,3]issymmetric:1/\22/\/\3443Butthefollowing[1,2,2,null,3,null,3]isnot:1/\2......
  • Pytest - Fixture(7) - 作用域执行顺序
    Pytest-作用域执行顺序如果有多个、不同作用域的需要执行,要弄清楚它们将执行的顺序;pytest首先执行范围更高的fixtrue;在请求fixture函数中,先执行较高作用域范围的fixture(session,package,module);再执行在较低作用域的fixture(class,function);test_py.pyimportpyte......
  • react 滚动到指定位置上方100像素的位置
    /*使用方法:import{useRef}from'react';constanchor=useRef<HTMLDivElement>(null);<divref={anchor}>test</div><buttononClick={()=>{scrollWithAnimation(anchor.current?.offsetTop||0);}}>jump</b......
  • 不吉利数字 (10分)
    杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。不吉利的数字为所有含有4或62的号码。例如:623157341888914都属于不......
  • 逆序的三位数 (10 分) python版
    逆序的三位数(10分)python版程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。输入格式:每个测试是一个3位的正整数。输出格式:输出按位逆序的数。输入样例:123输出样例:321'''Createdon2019年11......