【问题标题】:Create screenshot only on test failure仅在测试失败时创建屏幕截图
【发布时间】:2017-11-08 09:03:18
【问题描述】:

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

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

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

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

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

感谢大家的帮助

【问题讨论】:

  • 您能分享一下您是如何运行测试的吗?谢谢。
  • 你的意思是什么,比如命令行或单元测试?
  • 如何从命令行运行它们,对。另外,你用的是什么python版本?
  • v2.7.8 和 python test.py

标签: python selenium selenium-webdriver


【解决方案1】:

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

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()

【讨论】:

    【解决方案2】:

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

    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,我们现在可以判断测试是通过还是失败,并在适当的时候截屏。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-04
        • 1970-01-01
        • 1970-01-01
        • 2020-10-11
        • 2019-10-02
        • 2012-09-07
        • 1970-01-01
        相关资源
        最近更新 更多