Pytest08--数据驱动测试

数据驱动测试

@pytest.mark.parametrize("参数1 , 参数2" ,
    [
         ['数据11' , '数据12' ] ,
         ['数据21' , '数据22' ]
    ] )
    def  测试函数名(参数1,参数2):
        测试代码

测试函数+循环执行用例

  1. pytest认为,测试函数只执行一次,就是一次测试;只要循环在函数内部,执行多少次循环都是一个测试
  2. assert一旦断言失败,后续代码将不再执行,所以当断言失败时,退出本次测试函数执行,由于只有一个测试函数,所以整个测试结束
  3. 至于循环调用测试函数,pytest不支持/不认可

参数化的含义

  1. 参数化也叫数据驱动测试:代码只编写一份,使用不同的测试数据去执行这份代码,这种测试方式叫做数据驱动测试
    ①将用例数据读到程序中,传递给测试函数或测试方法的形参,以进行测试,故名参数化

编写一个测试模块ce_calc3.py

定义2个测试函数,分别测试Calc类的add和sub方法,使用循环执行多个手工测试用例

全局变量

def quanju():
    global a  # 全局变量,在整个模块中所有函数里都能使用
    a = 34

def out():
    print(a)
quanju()
out()
if __name__ == '__main__':
    print(a)

使用for循环执行测试用例

# 参数化:对比在测试函数中使用循环实现执行大量用例
from calc import Calc
import pytest


# 测试固件:每次执行测试之前都要创建一个Calc对象
@pytest.fixture(autouse=True)
def create_calc_obj():
    global c  # 参考上一段代码中的全局变量的基础只是
    c = Calc()


cases1 = [[1, 2, 3], [1, 0, 1], [-1, 2, 1], [-1, -2, -3]]  # 加法的用例


# 测试加法
def test_add():
    # 运用for循环方式编写
    for case in cases1:
        a, b, expect = case
        actual = c.add(a, b)
        assert actual == expect, f'加法用例{case}测试失败==预期:{expect}==实际:{actual}'
        print(f'加法用例{case}执行完毕')


cases2 = [[1, 0, 1], [1, 2, -1], [3, 2, 1], [2, 3, -1]] # 减法用例


# 测试减法
def test_sub():
    # 运用for循环方式编写
    for case in cases2:
        a, b, expect = case
        actual = c.sub(a, b)
        # assert actual == expect, f'减法用例{case}测试失败==预期:{expect}==实际:{actual}'# 出现错误后面不执行
        pytest.assume(actual == expect, f'减法用例{case}测试失败==预期:{expect}==实际:{actual}')
        print(f'减法用例{case}执行完毕')


if __name__ == '__main__':
    pytest.main(['-v', '--tb=short', 'demo01.py'])

上一篇:38.第六章 Shell脚本编程高级进阶(三)


下一篇:入坑uni-app受不了自有组件极差的体验便自己写了个switch组件