python-3.x - 如果我在一个类中有多个测试并且前面的测试失败了,我如何让它跳过或退出该类而不是测试其余的测试?

标签 python-3.x selenium pytest python-unittest

我将 Python 与 Selenium 和 unittest 一起使用。我在一个类(class)中有四个测试,因为它们都是相关的单元测试。如果前一个测试失败,我如何让它跳过下一个测试?我已经阅读了 unittest 的跳过方法的所有文档,但没有一个是我所需要的。有没有办法告诉它退出类(class)?

这是我的代码目前的样子:

def test_dealer_search_id_contains(self):
    try:
        LoginPage.login(self, ULV.AA_USERNAME, ULV.AA_PASSWORD)
    except TimeoutException:
        add_test_result(3, 5, "This test failed attempting to login with the user's credentials.")
        add_test_result(4, 2, 'This test is blocked due to failure of a preceding test.')
        self.fail(msg='Dealer: Search - Test failure.')

def test_dealer_search_id_exact(self):
    code for this test here

我如何让它跳过剩余的测试或一起退出类(class)?

我很感激可以提供的任何帮助。

编辑:我使用 PyTest 作为我的运行者,并且在这些之后我确实有额外的测试需要继续运行,只是不在这个类或 .py 文件中。

编辑:所以在这种情况下的测试都取决于先前的测试通过,否则它会因与上述测试相同的缺陷而失败。然而,我的主要困境是我不知道如何告诉它跳过这些测试并继续 PyTest 已经选择的其余测试。我查看了 PyTest 的跳过处理,它与 unittest 几乎相同。如果没有必要,我试图避免在测试失败的逻辑检查中进行编码,但似乎这可能是唯一的解决方案。

最佳答案

我想我找到了可以解决这个问题的方法。它叫incremental testing在 py.test 框架中:https://pytest.org/latest/example/simple.html#incremental-testing-test-steps

我在本地进行了测试 - 工作得很好!

使用相同 conftest.py就像在 py.test 文档中一样。
稍微不同的测试文件:

# content of test_incremental.py

import pytest

@pytest.mark.incremental
class TestUserHandling:
    def test_login(self):
        assert 1
    def test_modification(self):
        assert 0
    def test_deletion(self):
        assert 1
    def test_foo(self):
        assert 1


class TestAnotherStuff:
    def test_normal(self):
        assert 1
mac:[incremental_testing]: py.test -v test_incremental.py 
============================================================================== test session starts ===============================================================================
platform darwin -- Python 2.7.11, pytest-2.9.1, py-1.4.31, pluggy-0.3.1 -- /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
cachedir: .cache
rootdir: /Users/dmitry.tokarev/Repos/playground/incremental_testing, inifile: 
plugins: hidecaptured-0.1.2, instafail-0.3.0
collected 5 items 

test_incremental.py::TestUserHandling::test_login PASSED
test_incremental.py::TestUserHandling::test_modification FAILED
test_incremental.py::TestUserHandling::test_deletion xfail
test_incremental.py::TestUserHandling::test_foo xfail
test_incremental.py::TestAnotherStuff::test_normal PASSED

==================================================================================== FAILURES ====================================================================================
_______________________________________________________________________ TestUserHandling.test_modification _______________________________________________________________________

self = <test_incremental.TestUserHandling instance at 0x103b7a5a8>

    def test_modification(self):
>       assert 0
E       assert 0

test_incremental.py:10: AssertionError
================================================================= 1 failed, 2 passed, 2 xfailed in 0.02 seconds ==================================================================

关于python-3.x - 如果我在一个类中有多个测试并且前面的测试失败了,我如何让它跳过或退出该类而不是测试其余的测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37422806/

相关文章:

python - 在python中将数据写入.json文件

python - Windows:如何配置多个版本的Python以协同工作?

python-3.x - py2app 构建正常,但应用程序失败并显示 "_tkinter.TclError"(并且没有错误消息!)

java - 如何使用 Selenium Webdriver 和 Java 单击同一行中的旁边/上一个表格单元格 (TD)?

python - 无法在使用 Fixtures 的 Pytest 函数中实例化 Python 数据类(卡住)

python - pytest.raises(Error) 如何工作?

python - 如何将 turtle 的 y 坐标提取为 float - Python 3.x

python - Selenium Python 跳过 NoSuchElementException 错误

python selenium 获取新水龙头的当前 url (window_handles[0])

python - pytest 无法从 File1 导入类,但不能从同一文件导入类 A