def close(self, raise_ex=True): """ Ends the test. Args: (boolean) raise_ex: If true, an exception will be raised for failed/new tests. Returns: The test results. """ if self.is_disabled: logger.debug('close(): ignored (disabled)') return try: self._is_open = False logger.debug('close()') self._reset_last_screenshot() # If there's no running session, we simply return the default test results. if not self._running_session: logger.debug('close(): Server session was not started') logger.info('close(): --- Empty test ended.') return TestResults() results_url = self._running_session['session_url'] is_new_session = self._running_session['is_new_session'] should_save = (is_new_session and self.save_new_tests) or \ ((not is_new_session) and self.save_failed_tests) logger.debug("close(): automatically save session? %s" % should_save) logger.info('close(): Closing session...') results = self._agent_connector.stop_session(self._running_session, False, should_save) results.is_new = is_new_session results.url = results_url logger.info("close(): %s" % results) self._running_session = None if not is_new_session and (0 < results.mismatches or 0 < results.missing): # Test failed logger.info("--- Failed test ended. See details at " + results_url) if raise_ex: message = "'%s' of '%s'. See details at %s" % (self._start_info['scenarioIdOrName'], self._start_info['appIdOrName'], results_url) raise TestFailedError(message, results) return results if is_new_session: # New test instructions = "Please approve the new baseline at %s" % results_url logger.info("--- New test ended. %s" % instructions) if raise_ex and self.fail_on_new_test: message = "'%s' of '%s'. %s" % (self._start_info['scenarioIdOrName'], self._start_info['appIdOrName'], instructions) raise NewTestError(message, results) return results # Test passed logger.info('--- Test passed.') return results finally: logger.close()
def abort_if_not_closed(self): """ If a test is running, aborts it. Otherwise, does nothing. """ if self.is_disabled: logger.debug('abort_if_not_closed(): ignored (disabled)') return try: self._reset_last_screenshot() if self._running_session: logger.debug('abort_if_not_closed(): Aborting session...') try: self._agent_connector.stop_session(self._running_session, True, False) logger.info('--- Test aborted.') except EyesError as e: logger.info("Failed to abort server session: %s " % e) pass finally: self._running_session = None finally: logger.close()