我正在使用 pytest 进行 selenium 测试,想知道是否可以在单个测试中使用多个断言?
我调用了一个比较多个值的函数,我希望测试报告所有不匹配的值。我遇到的问题是,一旦发现不匹配的值,使用“assert”或“pytest.fail”就会停止测试。
有没有办法让测试继续运行并报告所有不匹配的值?
原文由 ChrisG29 发布,翻译遵循 CC BY-SA 4.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 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答870 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
正如 Jon Clements 评论的那样,您可以填写错误消息列表,然后断言该列表为空,并在断言为假时显示每条消息。
具体来说,它可能是这样的:
原始断言被
if
语句替换,这些语句将消息附加到errors
列表以防不满足条件。然后断言errors
列表为空(空列表为 False)并使断言消息包含errors
列表的每条消息。您还可以按照 nose 文档 中的描述制作测试生成器。我没有找到任何描述它的 pytest 文档,但我知道 pytest 处理这个问题的方式与 nose 完全相同。