数据驱动测试
@pytest.mark.parametrize("参数1 , 参数2" ,
[
['数据11' , '数据12' ] ,
['数据21' , '数据22' ]
] )
def 测试函数名(参数1,参数2):
测试代码
测试函数+循环执行用例
- pytest认为,测试函数只执行一次,就是一次测试;只要循环在函数内部,执行多少次循环都是一个测试
- assert一旦断言失败,后续代码将不再执行,所以当断言失败时,退出本次测试函数执行,由于只有一个测试函数,所以整个测试结束
- 至于循环调用测试函数,pytest不支持/不认可
参数化的含义
- 参数化也叫数据驱动测试:代码只编写一份,使用不同的测试数据去执行这份代码,这种测试方式叫做数据驱动测试
①将用例数据读到程序中,传递给测试函数或测试方法的形参,以进行测试,故名参数化
编写一个测试模块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'])