Pytest,断言而不会中断程序流程

时间:2018-12-19 16:25:47

标签: python pytest assert

我正在使用pytest,并且在测试函数中使用了几个条件,我想用一个断言检查,然后在测试结束时,列出失败的列表。

不幸的是,如果断言失败,则测试会立即中断并且不检查其他条件。是否可以使用不会破坏程序流程的断言?

import pytest

def test_example():
  value1 = 1
  value2 = 0
  value3 = 0

  assert value1 == 1
  assert value2 == 2
  assert value3 == 3

输出

================================== FAILURES ===================================
________________________________ test_example _________________________________

    def test_example():
      value1 = 1
      value2 = 0
      value3 = 0

      assert value1 == 1
>     assert value2 == 2
E     assert 0 == 2

test_demo.py:50: AssertionError
========================== 1 failed in 0.21 seconds ===========================

如您所见,第二个断言失败后,它停止运行,是否有办法解决?我考虑编写if语句来检查每个条件以及它们是否失败,请增加一个计数器,最后检查该计数器是否为0,但这无法跟踪哪个测试失败。

2 个答案:

答案 0 :(得分:1)

使用try/except

def test():
    value1 = 1
    value2 = 2
    value3 = 3

    try:
        assert value1==1
    except AssertionError as e:
        print(e)

    # continue this process for each value

答案 1 :(得分:0)

测试中的许多断言都是不好的做法。请阅读NASA和其他资料来源的“ 10的力量:制定安全关键代码的规则”中的规则5。 您可以参数化您的测试。