在PythonUnitTest中,是否有任何方法可以编写在断言失败时运行的代码?
我正在使用Python unittest库编写一些使用Selenium的测试。其中一个测试涉及从一个页面转到下一个页面,检查断言,然后返回到上一个页面,如下所示:在PythonUnitTest中,是否有任何方法可以编写在断言失败时运行的代码?,python,selenium,unit-testing,Python,Selenium,Unit Testing,我正在使用Python unittest库编写一些使用Selenium的测试。其中一个测试涉及从一个页面转到下一个页面,检查断言,然后返回到上一个页面,如下所示: def test_CheckNextPage(self): self.nextPageLink.click() self.assertEqual('The Next Page', self.driver.title) self.driver.back() 如果断言失败,则永远不会到达self.drive
def test_CheckNextPage(self):
self.nextPageLink.click()
self.assertEqual('The Next Page', self.driver.title)
self.driver.back()
如果断言失败,则永远不会到达self.driver.back()
行,因此所有进一步的测试都在错误的页面上运行,导致所有测试都出错
有没有办法编写一个代码块,以便在断言失败后运行,因此如果它失败,我可以运行与断言通过时不同的代码?(此块当然包括
self.driver.back()
行)。您可能正在寻找拆卸方法。下面是一个通用示例
import unittest
class SimpleWidgetTestCase(unittest.TestCase):
def setUp(self):
self.widget = Widget('The widget')
def runTest(self):
# your test
def tearDown(self):
self.widget.dispose()
self.widget = None
如果setUp()成功,则无论runTest()是否成功,都将运行tearDown()方法
查看的设置和拆卸部分对于本例,我通过使用try/except来有效地创建两个不同的执行路径,从而解决了这个问题。断言失败时的一条路径,以及断言通过时的另一条路径
def test_CheckNextPage(self):
self.nextPageLink.click()
try: self.assertEqual('The Next Page', self.driver.title)
except:
self.driver.back()
self.fail("Page title does not match expectation")
self.driver.back()
在执行此操作时,我们从断言中获得完整的失败报告,以及手动失败消息。通过这种方式,我们可以确保无论发生什么情况都调用
self.driver.back()
,以便其他测试能够正确运行 断言方法会抛出错误,如果您想在之后运行代码,则必须捕获并重新抛出错误。如果您的其他测试依赖于此方法,则您没有正确隔离测试。