Python中pytest之参数化数据驱动二

276 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情

上一节讲了使用fixture函数中的params参数进行参数化,接下来我们讲解,使用参数化标记。

1、使用参数化标记 在测试用例中,数据的丰富性是非常重要的,对于在测试步骤中需要使用不同的测试数据进行不同场景的验证,我们可以使用@pytest.mark.paramitrize标记来进行参数化


import pytest

# 被测函数
def add(a,b):
    return a+b

# 测试数据 第一个数和第二个数分贝代表被测数据a,b,第三个数代表期望结果
data = [(1,2,3),(0,0,0),(1.23,2.23,3.46),(-1,-2,-3)]

@pytest.mark.parametrize("test_data",data) # test_data 是每组数据的变量名,相当于for test_data in data。。。
def test_add(test_data): # 使用同名参数test_data来接收每一组数据
    print(test_data)
    a = test_data[0] #利用自动解包,将data中每一组的三个数自动分配给a,b,except_value
    b = test_data[1]
    except_value= test_data[2]
    # 调用被测函数add,得到实际结果
    result = add(a,b)
    # 断言实际结果和预期结果相等
    assert result == except_value

利用python的自动解包特性,在遍历嵌套列表时,可以使用三个变量来接收每一组数据中的各个值。犹如for循环获取列表中的值类似。

在参数化指定变量名时,也可以直接使用多个变量接收

import pytest
# 被测函数
def add(a,b):
    return a+b
data = [(1,2,3),(0,0,0),(1.23,2.23,3.46),(-1,-2,-3)]
@pytest.mark.parametrize('a,b,excepted', data) # 'a,b,excepted'要放同一个引号中
def test_add(a,b,excepted): # 使用同名参数来接收每一组数据
    actual = add(a, b) # 调用被测函数得到实际结果
    assert excepted == actual # 断言期望结果与实际结果相等

在数据驱动测试中一组测试数据相当于一条用例,我们可以使用ids参数,对每组数据来指定识别id,可以用相应的验证点作为ids的参数,提高用例的识别度

IDS = ['整数相加', '0 相加','小数相加' '负数相加'] 
data = [(1,2,3),(0,0,0),(1.23,2.23,3.46),(-1,-2,-3)]
@pytest.mark.parametrize('a,b,excepted', data, ids=IDS) 
def test_add(a,b,excepted): # 使用同名参数来接收每一组数据 
    # 调用被测函数得到实际结果
    actual = add(a, b)
    # 断言期望结果与实际结果相等
    assert excepted == actual 

使用ids对用例进行标识,同时提高用例的阅读性