背景
断言在做自动化测试时,是必不可少的。有时候为了提高用例的精准性会写多个断言,但是当第一个断言失败时,后面代码就不会执行了,从而影响整体的自动化测试。为了解决这个问题,于是引进python- assume插件。
断言的方法
assert断言:
原生python自带的assert断言
多重断言:
python-assume插件
python- assume插件安装:
pip install pytest-assume
第一种:python自带的assert断言语法:
优点:assert断言失败会显示出具体的变量值
缺点:不支持断言多个,遇到第一个断言失败,后续代码不会执行
import pytest
def test_001():
a,b,c = 1,1,2
assert a == c #报错,只支持单个assert断言
assert a == b
print('hello world') #控制台不会输出hello world
if __name__ == '__main__':
pytest.main(['-sv', __file__])
报错信息:
test4.py::test_001 FAILED #没有显示hello world
=================================== FAILURES ===================================
___________________________________ test_001 ___________________________________
def test_001():
a,b,c = 1,1,2
> assert a == c
E assert 1 == 2 #显示出具体的变量值
第二种:python-assume断言的语法:
优点:支持多重断言,遇到第一个断言失败,后续代码会执行
缺点:断言失败显示为False,而不是具体的变量值
import pytest
def test_002():
a,b,c = 1,1,2
pytest.assume(a == c) # 这样写 看不到 变量的值
pytest.assume(a == b) # 这样写 看不到 变量的值
print('hello world') # 控制台输出hello world
if __name__ == '__main__':
pytest.main(['-sv', __file__])
错误信息:
test4.py::test_002 hello world #输出hello world
FAILED
=================================== FAILURES ===================================
___________________________________ test_002 ___________________________________
E test4.py:24: AssumptionFailure
E >> pytest.assume(a == c) # 这样写 看不到 变量的值
E AssertionError: assert False #显示为False,而不是具体的变量值
第三种:通过上下文管理器with使用python-assume断言的语法:
优点:
支持多重断言,遇到第一个断言失败,后续代码会执行
断言失败会显示出具体的变量值
import pytest
def test_003():
a,b,c = 1,1,2
with pytest.assume: assert (a == c) # 用with写法可以看到变量的值
with pytest.assume: assert (a == b) # 用with写法可以看到变量的值
print('hello world')
if __name__ == '__main__':
pytest.main(['-sv', __file__])
test4.py::test_003 hello world #输出hello world
FAILED
=================================== FAILURES ===================================
___________________________________ test_003 ___________________________________
def test_003():
a,b,c = 1,1,2
> with pytest.assume: assert (a == c) # 用with写法可以看到变量的值
E pytest_assume.plugin.FailedAssumption:
E 1 Failed Assumptions:
E
E test4.py:30: AssumptionFailure
E >> with pytest.assume: assert (a == c) # 用with写法可以看到变量的值
E AssertionError: assert 1 == 2 #显示出具体的变量值
with使用python-assume断言的语法补充:
不要在一个with代码块去执行多个assert断言,如第一个assert断言失败,后续的语句不会执行
def test_004():
'''
1、不要在一个with代码块去执行多个assert断言,如第一个assert断言失败,后续的语句不会执行
:return:
'''
a,b,c = 1,1,2
with pytest.assume:
assert (a == c) # 用with写法可以看到变量的值
assert (a == b) # 用with写法可以看到变量的值
print('断言(a==c)失败后,后续的代码不会执行,控制台不会输出这段话')
if __name__ == '__main__':
pytest.main(['-sv', __file__])
test4.py::test_004 FAILED #没有打印print语句
=================================== FAILURES ===================================
___________________________________ test_004 ___________________________________
with pytest.assume:
> assert (a == c) # 用with写法可以看到变量的值
E pytest_assume.plugin.FailedAssumption:
E 1 Failed Assumptions:
E
E test4.py:43: AssumptionFailure
E >> print('断言(a==c)失败后,后续的代码不会执行,控制台不会输出这段话')
E AssertionError: assert 1 == 2 #显示出具体的变量值