0
点赞
收藏
分享

微信扫一扫

软件测试学习笔记丨Pytest参数化用例(单参数,多参数,用例重命名,笛卡尔积)

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/30055

  • 参数化优势:

通过参数的方式传递数据,从而实现数据和脚本分离
并且可以实现用例的重复生成与执行

  • 测试用例登录场景:

测试登录成功,登录失败(账号错误,密码错误)
创建多种账号:中文账号,英文账号

  • 普通测试用例实现方法:

copy多份代码or读入入参数
一次性执行多个输入入参数

def test_param_login_ok():
    #登录成功
    username = "right"
    password = "right"
    login(username,password)

def test_param_login_fail():
    #登录失败
    username = "wrong"
    password = "wrong"
    login(username,password)

  • 参数化实现方法

pytest参数化实现方法
装饰器:@pytest.mark.parametrize

@pytest.mark.parametrize("username,password",[["right","right"],["wrong","wrong"]])
def test_param(username,password):
    login(username,passsword)

  • 参数化测试函数使用

pytest单参数,参数化用例:将实际结果数据放在列表或元组中,赋值给单参数后,进行判断

search_list1 = ['Select','Delete','Add']
search_list2 = ['Select','Delete','Add','Sql']
@pytest.mark.parametrize('name',search_list1)
def test_search(name):
    assert name in search_list2

软件测试学习笔记丨Pytest参数化用例(单参数,多参数,用例重命名,笛卡尔积)_参数化

  • 多参数:

1、将数据放在列表嵌套元组中
2、将数据放在列表嵌套列表中

#数据放在元组中
@pytest.mark.paracterize("test_input,expected",[("3+5",8),("2+5",7),("7+5",12)])
def test_mark_more(test_input, expected):
    assert eval(test_input) == expected
#数据放在列表中
@pytest.mark.paracterize("testz_input,expected",
[["3+5",8],["2+5",7],["7+5",12]])
def test_mark_more(test_input, expected):
    assert eval(test_input) == expected

软件测试学习笔记丨Pytest参数化用例(单参数,多参数,用例重命名,笛卡尔积)_数据_02

  • 参数化:用例重命名,通过ids参数,将别名放在列表中

@pytest.mark.parametrize("test_input,expected",[("3+5",8),("2+5",7),("7+5",12)], ids=['add_3+5=8','add_2+5=7','add_3+5=12'])
def test_mark_more(test_input,expected):
    assert eval(test_input) == expected

软件测试学习笔记丨Pytest参数化用例(单参数,多参数,用例重命名,笛卡尔积)_软件测试_03

#通过ids参数,将中文别名放在列表中
@pytest.mark.parametrize("test_input,expected",[("3+5",8),("2+5",7),("7+5",12)], ids=["3和5相加","2和5相加","7和5相加"])
def test_mark_more(test_input,expected):
    assert eval(test_input) == expected

软件测试学习笔记丨Pytest参数化用例(单参数,多参数,用例重命名,笛卡尔积)_pytest_04

  • 测试用例收集完成时,将收集到的用例名name和用例标识nodeid的中文信息显示在控制台上

#创建conftest.py文件,将下面内容添加进去,运行脚本
def pytest_collection_modify_items(items):
    """
    测试用例收集完成时,将收集到的用例名name和用例标识nodeid的中文信息显示在控制台上
    """
    for i in items:
        i.name = i.name.encode("utf-8").decode("unicode_escape")
        i._nodeid = i.nodeid.encode("utf-8").decode("unicode_escape")

软件测试学习笔记丨Pytest参数化用例(单参数,多参数,用例重命名,笛卡尔积)_数据_05

  • 笛卡尔积的形式进行参数化
    两组数据
    a = [1,2,3]
    b = [a,b,c]
    对应的组合形势
    (1,a)(1,b)(1,c)
    (2,a)(2,b)(2,c)
    (3,a)(3,b)(3,c)

a = [1,2,3]
b = ['a','b','c']
@pytest.mark.parametrize("b",b)
@pytest.mark.parametrize("a",a)
def test_paraml(a,b):
    print(f"笛卡尔积形式的参数化结果为a={a},b={b}")

软件测试学习笔记丨Pytest参数化用例(单参数,多参数,用例重命名,笛卡尔积)_数据_06

举报

相关推荐

0 条评论