2017-12-19 51 views
1

예외가 발생하면 브라우저 인스턴스를 닫기 전에 스크린 샷을 찍을 수 있도록 해체 방법에 뭔가를 추가하려고합니다. 이 스크린 샷은 촬영되지 않습니다이다해체시 예외에 반응 할 수 없음

def tearDown(self): 
    if sys.exc_info()[0]: 
     test_method_name = self._testMethodName 
     screenshot_name = common_functions.create_unique_id() + test_method_name + ".png" 
     common_functions.take_screenshot(self.driver, screenshot_name) 
    self.driver.close() 

으로 내가 if sys.exc_info():에 if 문을 변경하면 다음에 관계없이 항상 예외가 발생하는지 여부의 스크린 샷을 소요 - :

지금까지 내가 가지고있다.

sys.exc_info이 반환하는 내용을 쿼리 할 때 None, None, None이 표시됩니다. 첫 번째 요소에 예외 이름이 적어도 포함되어야합니다. docssys.exc_info()에 (내 강조)에서

+0

어디서 어떻게 'tearDown'이 호출 되었습니까? – asherbar

+0

설정 및 실제 테스트 케이스 기능과 함께 테스트 케이스 클래스 내에 있습니다. 테스트 케이스가 실행될 때 Setup과 Teardown은 모두 예상대로 작동합니다. (존재하지 않는 요소를 찾아 예외를 강요합니다), 예외가 발생했을 때 스크린 샷을 가져올 수 없습니다. if 문에 따라 항상 발생하거나 시간이 없습니다. – Northers

답변

1

는 :

이 기능은 현재를 처리되고있는 예외에 대한 정보를 제공 세 값의 튜플을 반환합니다.

이 충분하지 않습니다에 대한, 그 여부에 관계없이 예외가 동안 제기 된의 이유 당신이 호출 될 때 tearDown, 검사 중에 발생한 발생할 가능성이있는 예외가 이미 처리되어 있기 때문에 찾고있는 테스트 sys.exc_info()None, None, None의 튜플을 반환합니다.

그러나 다른 접근법을 시도해 볼 수 있습니다. setUp에서 테스트에 예외가 있었는지 여부를 나타내는 had_exception 플래그를 정의하십시오. 그러면 다음과 같이 보일 것입니다 :

class MyTest(unittest.TestCase): 
    def setUp(self): 
     self.had_exception = True 
     # ... 

    def test_sample(self): 
     self.assertTrue("your test logic here...") 
     self.had_exception = False 

    def tearDown(self): 
     if self.had_exception: 
      test_method_name = self._testMethodName 
      screenshot_name = common_functions.create_unique_id() + test_method_name + ".png" 
      common_functions.take_screenshot(self.driver, screenshot_name) 
     self.driver.close() 
+0

정말 대단합니다. 고마워요. 이것은 완벽하게 작동하고 왜 내가 None, None, None 결과를 얻었는지에 대한 훌륭한 설명입니다. :) – Northers