四十、Python(pytest框架-下)
一、pytest 断言
断言:使用程序代码代替人工自动的判断预期结果和实际结果是否相符,断言结果为 True,表示用例通过,断言结果为 False,抛出 AssertionError 异常,说明用例不通过。
在pytest中断言使用关键字assert:assert 表达式 # if语句后边写的表达式,都可以写在这里
常用的断言有两种:
-
断言是否相等:assert 预期结果 == 实际结果
-
判断是否包含:assert 预期 in 实际
import pytest
class TestDemo:
def test_01_demo(self):
print('测试1')
assert 'test' == 'test' # 断言字符串相等
def test_02_demo(self):
print('测试2')
my_list = [1, 2, 3, 4, 5]
assert 3 in my_list # 断言包含关系
def test_03_demo(self):
print('测试3')
my_list = [1, 2, 3, 4, 5]
assert 6 in my_list
运行结果
二、参数化
在测试方法中,使用数据的地方,可以使用参数来代替,然后在运行的时候传递实参值。
操作步骤
-
将用例中的数据变为参数书写
-
组织测试数据 -> [(), (), ()] 或者 [[], []],内部的元组或者列表就是一组测试数据
-
使用装饰器完成参数化
@pytest.mark.parametrize('参数1, 参数2, ...', 测试数据)
@pytest.mark.parametrize(['参数1', '参数2', ...], 测试数据)
import pytest
from tools.tools import add
data = [(0, 1, 1), (1, 3, 4), (7, 2, 9)]
class TestAdd:
# 1. 将用例中的数据 变为参数书写
# 3. 使用装饰器完成参数化
# @pytest.mark.parametrize('x,y,z',data)
@pytest.mark.parametrize(['x', 'y', 'z'], data)
def test_add_1(self, x, y, z):
# 判断预期结果和实际结果是否相等
assert z == add(x, y)
json文件实现参数化
import pytest
import json
from tools.tools import add
# 封装一个读取json文件的方法,返回列表数据
def read_json():
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
print(data)
return data
class TestAdd:
@pytest.mark.parametrize(['x', 'y', 'z'], read_json())
def test_add_1(self, x, y, z):
assert z == add(x, y)
定义的json文件
[
[0, 1, 1],
[1, 3, 4],
[7, 2, 9]
]