Pytest学习笔记5:参数化parametrize

参考:微信公众号:从零开始学自动化测试

pytest.mark.parametrize装饰器可以实现测试用例参数化。

装饰器@pytest.mark.parametrize,里面写两个参数

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

第二个参数是list,多组数据用元祖类型

注意:@pytest.mark.parametrize("user, psw", test_login_data)里面的"user,psw"一定要和def test_login(user, psw)当中的参数名称一致,否则,将会出错。

import pytest
# 测试登录数据
test_login_data = [("admin", "111111"), ("admin", "")]
def login(user, psw):
 #    '''普通登录函数'''
    print("登录账户:%s"%user)
    print("登录密码:%s"%psw)
    if psw:
        return True
    else:
     return False
@pytest.mark.parametrize("user, psw", test_login_data)
def test_login(user, psw):
 #    '''登录用例'''
    result = login(user, psw)
    assert result == True, "失败原因:密码为空"
if __name__ == "__main__":
    pytest.main(["-s", "test_01.py"])

运行结果:

test_parameter.py .登录账户:admin
登录密码:111111
F登录账户:admin
登录密码:

AssertionError: 失败原因:密码为空
False != True

 如果想把登录操作放到前置操作里,也就是用到@pytest.fixture装饰器,传参就用默认的request参数

 user = request.param 这一步是接收传入的参数

import pytest

test_user_data = [{"user": "admin1", "psw": "111111"},{"user": "admin1", "psw": ""}]
@pytest.fixture(scope="module")
def login(request):
    user = request.param["user"]
    psw = request.param["psw"]
    print("登录账户:%s" % user)
    print("登录密码:%s" % psw)
    if psw:
        return True
    else:
        return False

# indirect=True 声明login是个函数
@pytest.mark.parametrize("login", test_user_data, indirect=True)
def test_login(login):
 #    '''登录用例'''
    a = login
    print("测试用例中login的返回值:%s" % a)
    assert a, "失败原因:密码为空"
if __name__ == "__main__":
    pytest.main(["-s", "test_03.py"])

运行结果:

test_fixture_param.py 登录账户:admin1
登录密码:111111
.测试用例中login的返回值:True
登录账户:admin1
登录密码:
F测试用例中login的返回值:False

test_fixture_param.py:15 (test_login[login1])
login = False

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值