其他分享
首页 > 其他分享> > Pytest 系列(28)- 参数化 parametrize + @allure.title() 动态生成标题

Pytest 系列(28)- 参数化 parametrize + @allure.title() 动态生成标题

作者:互联网


前言

 

参数化无标题的栗子

测试代码

#!/usr/bin/env python# -*- coding: utf-8 -*-"""__title__  = 
__Time__   = 2020/10/28 15:08
__Author__ = 小菠萝测试笔记
__Blog__   = https://www.cnblogs.com/poloyy/"""import allureimport pytest


@pytest.fixture()def login(request):    """登录"""
    param = request.param    print(f"账号是:{param['username']},密码是:{param['pwd']}")    # 返回
    return {"code": 0, "msg": "success!"}

datas = [
    {"username": "name1", "pwd": "pwd1"},
    {"username": "name2", "pwd": "pwd2"},
    {"username": "name3", "pwd": "pwd3"}
]

@allure.story('登录功能')
@pytest.mark.parametrize('login', datas, indirect=True)def test_login1(login):    """
    登录测试用例1    """
    assert login['code'] == 0

 

allure 报告

 

标题就是方法名+参数化的数据,看着可读性就不咋滴

 

参数化有标题写死的栗子

测试代码

将上面的测试代码添加一个 @allure.title 就可以了

@allure.story('登录功能')
@allure.title('登录测试用例2')
@pytest.mark.parametrize('login', datas, indirect=True)def test_login2(login):    """
    登录测试用例2    """
    assert login['code'] == 0

 

allure 报告

因为参数化可以生成三条用例,所以三条用例都用了同一个 title,可读性也不咋滴

 

参数化使用 ids 的栗子

测试代码

#!/usr/bin/env python# -*- coding: utf-8 -*-"""__title__  = 
__Time__   = 2020/10/28 15:08
__Author__ = 小菠萝测试笔记
__Blog__   = https://www.cnblogs.com/poloyy/"""import allureimport pytest


@pytest.fixture()def login(request):    """登录"""
    param = request.param    print(f"账号是:{param['username']},密码是:{param['pwd']}")    # 返回
    return {"code": 0, "msg": "success!"}

datas = [
    {"username": "name1", "pwd": "pwd1"},
    {"username": "name2", "pwd": "pwd2"},
    {"username": "name3", "pwd": "pwd3"}
]

ids = [    "username is name1,pwd is pwd1",    "username is name2,pwd is pwd2",    "username is name3,pwd is pwd3"]

@allure.story('登录功能')
@pytest.mark.parametrize('login', datas, ids=ids, indirect=True)def test_login1(login):    """
    登录测试用例1    """
    assert login['code'] == 0

 

allure 报告

 

参数化动态生成标题的栗子

测试代码

#!/usr/bin/env python# -*- coding: utf-8 -*-"""__title__  = 
__Time__   = 2020/10/28 15:08
__Author__ = 小菠萝测试笔记
__Blog__   = https://www.cnblogs.com/poloyy/"""import allureimport pytest


@pytest.fixture()def login(request):    """登录"""
    param = request.param    print(f"账号是:{param['username']},密码是:{param['pwd']}")    # 返回
    return {"code": 0, "msg": "success!"}


datas = [
    {"username": "name1", "pwd": "pwd1"},
    {"username": "name2", "pwd": "pwd2"},
    {"username": "name3", "pwd": "pwd3"}
]

data2 = [
    ("name1", "123456"),
    ("name2", "123456"),
    ("name3", "123456")
]


@allure.story('分别传值')
@allure.title('登录测试用例2-账号是:{username}-密码是:{pwd}')
@pytest.mark.parametrize('username,pwd', data2)def test_login1(username, pwd):    """
    登录测试用例1    """
    print(username, pwd)


@allure.story('字典参数化')
@allure.title('登录测试用例2-{dict}')
@pytest.mark.parametrize('dict', datas)def test_login2(dict):    """
    登录测试用例1    """
    print(dict['username'], dict['pwd'])


@allure.story('传值进fixture')
@allure.title('登录测试用例2{login}')
@pytest.mark.parametrize('login', datas, indirect=True)def test_login3(login):    """
    登录测试用例2    """
    assert login['code'] == 0

 

allure 报告

传入的如果是一个字典则显示完整字典值

 

参数化动态生成标题最优方案的栗子

测试代码

#!/usr/bin/env python# -*- coding: utf-8 -*-"""__title__  = 
__Time__   = 2020/10/28 15:08
__Author__ = 小菠萝测试笔记
__Blog__   = https://www.cnblogs.com/poloyy/"""import allureimport pytest

data = [
    ("name1", "123456", "name1 登录成功"),
    ("name2", "123456", "name2 登录失败"),
    ("name3", "123456", "name3 登录成功")
]


@allure.story('分别传值')
@allure.title('登录测试用例-{title}')
@pytest.mark.parametrize('username,pwd,title', data)def test_login1(username, pwd, title):    """
    登录测试用例1    """
    print(username, pwd)

 

allure 报告

 

这种做法的优点

 

标签:__,username,parametrize,title,pytest,pwd,allure,login
来源: https://blog.51cto.com/u_12020737/2853589