我可以在 pytest 中执行多个断言吗?

新手上路,请多包涵

我正在使用 pytest 进行 selenium 测试,想知道是否可以在单个测试中使用多个断言?

我调用了一个比较多个值的函数,我希望测试报告所有不匹配的值。我遇到的问题是,一旦发现不匹配的值,使用“assert”或“pytest.fail”就会停止测试。

有没有办法让测试继续运行并报告所有不匹配的值?

原文由 ChrisG29 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 643
2 个回答

正如 Jon Clements 评论的那样,您可以填写错误消息列表,然后断言该列表为空,并在断言为假时显示每条消息。

具体来说,它可能是这样的:

 def test_something(self):
    errors = []

    # replace assertions by conditions
    if not condition_1:
        errors.append("an error message")
    if not condition_2:
        errors.append("an other error message")

    # assert no error message has been registered, else print messages
    assert not errors, "errors occured:\n{}".format("\n".join(errors))

原始断言被 if 语句替换,这些语句将消息附加到 errors 列表以防不满足条件。然后断言 errors 列表为空(空列表为 False)并使断言消息包含 errors 列表的每条消息。


您还可以按照 nose 文档 中的描述制作测试生成器。我没有找到任何描述它的 pytest 文档,但我知道 pytest 处理这个问题的方式与 nose 完全相同。

原文由 Tryph 发布,翻译遵循 CC BY-SA 3.0 许可协议

pytest-assume“一个允许每次测试多次失败的 pytest 插件” 。这是一个如何使用它的示例(取自 README ):

 import pytest

@pytest.mark.parametrize(('x', 'y'), [(1, 1), (1, 0), (0, 1)])
def test_simple_assume(x, y):
    pytest.assume(x == y)
    pytest.assume(True)
    pytest.assume(False)

即使某些断言失败,它们都会得到评估和报告:

 ======================================== FAILURES =========================================
_________________________________ test_simple_assume[1-1] _________________________________
>    pytest.assume(False)
test_assume.py:7

y          = 1
x          = 1
----------------------------------------
Failed Assumptions:1
_________________________________ test_simple_assume[1-0] _________________________________
>    pytest.assume(x == y)
test_assume.py:5

y          = 0
x          = 1
>    pytest.assume(False)
test_assume.py:7

y          = 0
x          = 1
----------------------------------------
Failed Assumptions:2
_________________________________ test_simple_assume[0-1] _________________________________
>    pytest.assume(x == y)
test_assume.py:5

y          = 1
x          = 0
>    pytest.assume(False)
test_assume.py:7

y          = 1
x          = 0
----------------------------------------
Failed Assumptions:2
================================ 3 failed in 0.02 seconds =================================

原文由 akaihola 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题