Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(122)

Side by Side Diff: build/android/pylib/local/device/local_device_instrumentation_test_run.py

Issue 2721323003: Record screenshots on failures on swarming bots. (Closed)
Patch Set: Record screenshots on failures on swarming bots. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import logging 5 import logging
6 import os 6 import os
7 import posixpath 7 import posixpath
8 import re 8 import re
9 import tempfile 9 import tempfile
10 import time 10 import time
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 if r.GetType() == base_test_result.ResultType.UNKNOWN: 363 if r.GetType() == base_test_result.ResultType.UNKNOWN:
364 r.SetType(base_test_result.ResultType.CRASH) 364 r.SetType(base_test_result.ResultType.CRASH)
365 365
366 # Handle failures by: 366 # Handle failures by:
367 # - optionally taking a screenshot 367 # - optionally taking a screenshot
368 # - logging the raw output at INFO level 368 # - logging the raw output at INFO level
369 # - clearing the application state while persisting permissions 369 # - clearing the application state while persisting permissions
370 if any(r.GetType() not in (base_test_result.ResultType.PASS, 370 if any(r.GetType() not in (base_test_result.ResultType.PASS,
371 base_test_result.ResultType.SKIP) 371 base_test_result.ResultType.SKIP)
372 for r in results): 372 for r in results):
373 if self._test_instance.screenshot_dir: 373
374 file_name = '%s-%s.png' % ( 374 with contextlib_ext.Optional(
375 test_display_name, 375 tempfile_ext.NamedTemporaryDirectory(),
376 time.strftime('%Y%m%dT%H%M%S', time.localtime())) 376 self._test_instance.screenshot_dir is None
377 screenshot_file = device.TakeScreenshot( 377 and self._test_instance.should_save_images) as screenshot_dir:
378 os.path.join(self._test_instance.screenshot_dir, file_name)) 378
379 logging.info( 379 screenshot_dir = self._test_instance.screenshot_dir or screenshot_dir
380 'Saved screenshot for %s to %s.', 380 if screenshot_dir:
381 test_display_name, screenshot_file) 381 file_name = '%s-%s.png' % (
382 if self._test_instance.should_save_images: 382 test_display_name,
383 link = google_storage_helper.upload( 383 time.strftime('%Y%m%dT%H%M%S', time.localtime()))
384 google_storage_helper.unique_name('screenshot', device=device), 384 screenshot_file = device.TakeScreenshot(
385 screenshot_file, 385 os.path.join(self._test_instance.screenshot_dir, file_name))
386 bucket='chromium-render-tests') 386 logging.info(
387 for result in results: 387 'Saved screenshot for %s to %s.',
388 result.SetLink('failure_screenshot', link) 388 test_display_name, screenshot_file)
389 if self._test_instance.should_save_images:
390 link = google_storage_helper.upload(
391 google_storage_helper.unique_name('screenshot', device=device),
392 screenshot_file,
393 bucket='chromium-render-tests')
394 for result in results:
395 result.SetLink('failure_screenshot', link)
389 396
390 logging.info('detected failure in %s. raw output:', test_display_name) 397 logging.info('detected failure in %s. raw output:', test_display_name)
391 for l in output: 398 for l in output:
392 logging.info(' %s', l) 399 logging.info(' %s', l)
393 if (not self._env.skip_clear_data 400 if (not self._env.skip_clear_data
394 and self._test_instance.package_info): 401 and self._test_instance.package_info):
395 permissions = ( 402 permissions = (
396 self._test_instance.apk_under_test.GetPermissions() 403 self._test_instance.apk_under_test.GetPermissions()
397 if self._test_instance.apk_under_test 404 if self._test_instance.apk_under_test
398 else None) 405 else None)
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 timeout = v 550 timeout = v
544 break 551 break
545 else: 552 else:
546 logging.warning('Using default 1 minute timeout for %s', test_name) 553 logging.warning('Using default 1 minute timeout for %s', test_name)
547 timeout = 60 554 timeout = 60
548 555
549 timeout *= cls._GetTimeoutScaleFromAnnotations(annotations) 556 timeout *= cls._GetTimeoutScaleFromAnnotations(annotations)
550 557
551 return timeout 558 return timeout
552 559
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698