仅在测试失败时创建屏幕截图
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()
目前我有一个创建屏幕截图的功能,我在这里调用它
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()