Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PythonUnitTest中,是否有任何方法可以编写在断言失败时运行的代码?_Python_Selenium_Unit Testing - Fatal编程技术网

在PythonUnitTest中,是否有任何方法可以编写在断言失败时运行的代码?

在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

我正在使用Python unittest库编写一些使用Selenium的测试。其中一个测试涉及从一个页面转到下一个页面,检查断言,然后返回到上一个页面,如下所示:

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()
,以便其他测试能够正确运行

断言方法会抛出错误,如果您想在之后运行代码,则必须捕获并重新抛出错误。如果您的其他测试依赖于此方法,则您没有正确隔离测试。