仅在测试失败时创建屏幕截图

Create screenshot only on test failure

目前我有一个创建屏幕截图的功能,我在这里调用它

def tearDown(self):
    self.save_screenshot()
    self.driver.quit()

还有一个正在创建的文件夹,用于存储屏幕截图。

我不希望在测试通过时发生这种情况。

我必须添加什么才能避免这种情况发生?

感谢大家的帮助

在您的初始化方法中设置一个 self.NoFailuresSnapped = 0 并在调用之前或在您的函数中检查您的测试环境的当前失败次数 > self.NoFailuresSnapped 并且当然在返回之前再次设置它。

以下是一种仅在失败时捕获屏幕截图的方法:

def setUp(self):
    # Assume test will fail
    self.test_failed = True

def tearDown(self):
    if self.test_failed:
        self.save_screenshot()

def test_something(self):
    # do some tests
    # Last line of the test:
    self.test_failed = False

这种方法背后的基本原理是当测试到达最后一行时,我们知道测试通过了(例如所有 self.assert* 通过)。此时,我们重新设置test_failed成员,它在setUp中被设置为True。在 tearDown 中,我们现在可以判断测试是通过还是失败,并在适当的时候截取屏幕截图。

如果您的测试失败,sys.exc_info 将出现异常。因此,您可以将其用作 pass/fail 测试结果:

if sys.exc_info()[0]:
    # 'Test Failed'
else:
    # 'Test Passed'

如果您想在失败时截屏:

import unittest
import sys
from selenium import webdriver

class UrlTest(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome()

    def test_correct_url(self):
        self.driver.get('https://google.com')
        self.assertTrue('something.com' in self.driver.current_url)

    def tearDown(self):
        if sys.exc_info()[0]:
            self.driver.get_screenshot_as_file('screenshot.png')
        self.driver.quit

if __name__ == '__main__':
    unittest.main()