def testCreatingFileHandle(self): fh1 = file_handle.FromTempFile(self.temp_file_txt) self.assertEquals(fh1.extension, '.txt') fh2 = file_handle.FromFilePath(self.abs_path_html) self.assertEquals(fh2.extension, '.html') self.assertNotEquals(fh1.id, fh2.id)
def _GetTempFileHandle(self, trace_data): temp_dir = tempfile.mkdtemp() trace_files = [] counter = 0 try: for trace, part in self._GetTraceParts(trace_data): file_path = os.path.join(temp_dir, '%s.trace' % counter) self._DumpTraceToFile(trace, file_path) logging.info('Trace (%s) of size %d bytes saved.', part, os.path.getsize(file_path)) trace_files.append(file_path) counter += 1 tf = tempfile.NamedTemporaryFile(delete=False, suffix='.html') tf.close() if trace_files: title = '' if self.page: title = self.page.display_name cmd = (['python', _TRACE2HTML_PATH] + trace_files + ['--output', tf.name] + ['--title', title]) subprocess.check_output(cmd) else: logging.warning('No traces to convert to html.') return file_handle.FromTempFile(tf) finally: shutil.rmtree(temp_dir)
def _GetTempFileHandle(self, trace_data): temp_dir = tempfile.mkdtemp() trace_files = [] counter = 0 try: trace_size_data = {} for traces_list, part in self._GetTraceParts(trace_data): for trace in traces_list: if isinstance(trace, trace_data_module.TraceFileHandle): file_path = trace.file_path else: file_path = os.path.join(temp_dir, '%s.trace' % counter) self._DumpTraceToFile(trace, file_path) trace_size_data.setdefault(part, 0) trace_size_data[part] += os.path.getsize(file_path) trace_files.append(file_path) counter += 1 logging.info('Trace sizes in bytes: %s', trace_size_data) tf = tempfile.NamedTemporaryFile(delete=False, suffix='.html') tf.close() if trace_files: title = '' if self.page: title = self.page.display_name cmd = (['python', _TRACE2HTML_PATH] + trace_files + ['--output', tf.name] + ['--title', title]) subprocess.check_output(cmd) else: logging.warning('No traces to convert to html.') return file_handle.FromTempFile(tf) finally: shutil.rmtree(temp_dir)
def _GetTempFileHandle(self, trace_data): if self.page: title = self.page.display_name else: title = '' content = StringIO.StringIO() trace2html.WriteHTMLForTraceDataToFile( [trace_data.GetEventsFor(trace_data_module.CHROME_TRACE_PART)], title, content) tf = tempfile.NamedTemporaryFile(delete=False, suffix='.html') tf.write(content.getvalue().encode('utf-8')) tf.close() return file_handle.FromTempFile(tf)
def TryCaptureScreenShot(platform, tab=None, timeout=None): """ If the platform or tab supports screenshot, attempt to take a screenshot of the current browser. Args: platform: current platform tab: browser tab if available timeout: An float denoting the number of seconds to wait for a successful screenshot. If set to None, only attempts once. Returns: file handle of the tempoerary file path for the screenshot if present, None otherwise. """ try: if platform.CanTakeScreenshot(): tf = tempfile.NamedTemporaryFile(delete=False, suffix='.png') tf.close() try: py_utils.WaitFor(lambda: platform.TakeScreenshot(tf.name), timeout or 0) except py_utils.TimeoutException: logging.warning('Did not succeed in screenshot capture') return file_handle.FromTempFile(tf) elif tab and tab.IsAlive() and tab.screenshot_supported: tf = tempfile.NamedTemporaryFile(delete=False, suffix='.png') tf.close() image = tab.Screenshot() image_util.WritePngFile(image, tf.name) return file_handle.FromTempFile(tf) else: logging.warning( 'Either tab has crashed or browser does not support taking tab ' 'screenshot. Skip taking screenshot on failure.') return None except Exception as e: # pylint: disable=broad-except logging.warning('Exception when trying to capture screenshot: %s', repr(e)) return None
def _TryCaptureScreenShot(self, page, tab, results): try: # TODO(nednguyen): once all platforms support taking screenshot, # remove the tab checking logic and consider moving this to story_runner. # (crbug.com/369490) if tab.browser.platform.CanTakeScreenshot(): tf = tempfile.NamedTemporaryFile(delete=False, suffix='.png') tf.close() tab.browser.platform.TakeScreenshot(tf.name) results.AddProfilingFile(page, file_handle.FromTempFile(tf)) elif tab.IsAlive() and tab.screenshot_supported: tf = tempfile.NamedTemporaryFile(delete=False, suffix='.png') tf.close() image = tab.Screenshot() image_util.WritePngFile(image, tf.name) results.AddProfilingFile(page, file_handle.FromTempFile(tf)) else: logging.warning( 'Either tab has crashed or browser does not support taking tab ' 'screenshot. Skip taking screenshot on failure.') except Exception as e: logging.warning('Exception when trying to capture screenshot: %s', repr(e))
def testUploadScreenshotToCloudStorage(self): tf = tempfile.NamedTemporaryFile(suffix='.png', delete=False) fh1 = file_handle.FromTempFile(tf) local_path = '123456abcdefg.png' with mock.patch('catapult_base.cloud_storage.Insert') as mock_insert: with mock.patch('telemetry.util.screenshot._GenerateRemotePath', return_value=local_path): url = screenshot._UploadScreenShotToCloudStorage(fh1) mock_insert.assert_called_with(cloud_storage.TELEMETRY_OUTPUT, local_path, fh1.GetAbsPath()) self.assertTrue(url is not None)
def TryCaptureScreenShot(platform, tab=None): """ If the platform or tab supports screenshot, attempt to take a screenshot of the current browser. Args: platform: current platform tab: browser tab if available Returns: file handle of the tempoerary file path for the screenshot if present, None otherwise. """ try: # TODO(nednguyen): once all platforms support taking screenshot, # remove the tab checking logic and consider moving this to story_runner. # (crbug.com/369490) if platform.CanTakeScreenshot(): tf = tempfile.NamedTemporaryFile(delete=False, suffix='.png') tf.close() platform.TakeScreenshot(tf.name) return file_handle.FromTempFile(tf) elif tab and tab.IsAlive() and tab.screenshot_supported: tf = tempfile.NamedTemporaryFile(delete=False, suffix='.png') tf.close() image = tab.Screenshot() image_util.WritePngFile(image, tf.name) return file_handle.FromTempFile(tf) else: logging.warning( 'Either tab has crashed or browser does not support taking tab ' 'screenshot. Skip taking screenshot on failure.') return None except Exception as e: logging.warning('Exception when trying to capture screenshot: %s', repr(e)) return None