import pytest
def test_assume1():
assert 1 == 2
print('hello')
assert 2 == 3
if __name__ == '__main__':
pytest.main(['-sv', __file__])
pip install pytest-assume
pip install git+https://github.com/astraw38/pytest-assume.git
https://github.com/astraw38/pytest-assume github上也就讲了几句
import pytest
def test_assume2():
pytest.assume( 1 == 2 )
print('hello')
pytest.assume( 2 == 3)
if __name__ == '__main__':
pytest.main(['-sv', __file__])
demo_assume.py::test_assume2 hello
FAILED
...
E demo_assume.py:16: AssumptionFailure
E >> pytest.assume( 1 == 2 )
E AssertionError: assert False
E
E demo_assume.py:18: AssumptionFailure
E >> pytest.assume( 2 == 3)
E AssertionError: assert False
在用法一种隐含了一个小的瑕疵
import pytest
def test_assume3():
a = 1
b = 2
pytest.assume( a == b )
if __name__ == '__main__':
pytest.main(['-sv', __file__])
它的输出是
E demo_assume.py:18: AssumptionFailure
E >> pytest.assume( a == b )
E AssertionError: assert False
你可以看到,变量的真正的值并没有看到,当然你有很多其他的方法来处理,但能看到显然是更利于你便捷的去定位的
这个时候可以用另外一种做法:上下文管理器
import pytest
def test_assume4():
a = 1
b = 2
with pytest.assume: assert a==b
if __name__ == '__main__':
pytest.main(['-sv', __file__])
输出
E demo_assume.py:18: AssumptionFailure
E >> with pytest.assume: assert a==b
E AssertionError: assert 1 == 2
注意,在这种写法中,你要写assert,而第一种写法中你不需要用到assert的
在with的写法中,你可以在一个块中assert多个断言内容,但这样是不推荐的
import pytest
def test_assume5():
a = 1
b = 2
with pytest.assume:
assert a==b
assert 1==2
assert 3==3
if __name__ == '__main__':
pytest.main(['-sv', __file__])
输出:最终你就看到了第二个错误的信息,a==b的断言被你忽略掉了
E demo_assume.py:21: AssumptionFailure
E >> assert 3==3
E AssertionError: assert 1 == 2
你应该这样写
import pytest
def test_assume6():
a = 1
b = 2
with pytest.assume: assert a == b
with pytest.assume: assert 1 == 2
with pytest.assume: assert 3 == 3
if __name__ == '__main__':
pytest.main(['-sv', __file__])
输出
with pytest.assume: assert a == b
> with pytest.assume: assert 1 == 2
E pytest_assume.plugin.FailedAssumption:
E 2 Failed Assumptions:
E
E demo_assume.py:18: AssumptionFailure
E >> with pytest.assume: assert a == b
E AssertionError: assert 1 == 2
E
E demo_assume.py:19: AssumptionFailure
E >> with pytest.assume: assert 1 == 2
E AssertionError: assert 1 == 2