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

Unified Diff: build/android/pylib/local/device/local_device_instrumentation_test_run.py

Issue 2933993002: Add local results details pages.
Patch Set: Add --local-output arg which enables local results detail pages. Created 3 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: build/android/pylib/local/device/local_device_instrumentation_test_run.py
diff --git a/build/android/pylib/local/device/local_device_instrumentation_test_run.py b/build/android/pylib/local/device/local_device_instrumentation_test_run.py
index 8f2b2e74327a4f78cfde413a380d7b09f873c449..c48fa45d235383a72eb36a3c9e99cc263979fe1c 100644
--- a/build/android/pylib/local/device/local_device_instrumentation_test_run.py
+++ b/build/android/pylib/local/device/local_device_instrumentation_test_run.py
@@ -13,17 +13,16 @@ import time
from devil.android import device_errors
from devil.android import device_temp_file
from devil.android import flag_changer
+from devil.android import logcat_monitor
from devil.android.sdk import shared_prefs
from devil.utils import reraiser_thread
from pylib import valgrind_tools
-from pylib.android import logdog_logcat_monitor
from pylib.base import base_test_result
from pylib.constants import host_paths
from pylib.instrumentation import instrumentation_test_instance
from pylib.local.device import local_device_environment
from pylib.local.device import local_device_test_run
-from pylib.utils import google_storage_helper
-from pylib.utils import logdog_helper
+from pylib.utils import test_output_saver_factory
from py_trace_event import trace_event
from py_utils import contextlib_ext
from py_utils import tempfile_ext
@@ -108,8 +107,9 @@ _CURRENT_FOCUS_CRASH_RE = re.compile(
class LocalDeviceInstrumentationTestRun(
local_device_test_run.LocalDeviceTestRun):
- def __init__(self, env, test_instance):
- super(LocalDeviceInstrumentationTestRun, self).__init__(env, test_instance)
+ def __init__(self, env, test_instance, test_output_saver):
+ super(LocalDeviceInstrumentationTestRun, self).__init__(
+ env, test_instance, test_output_saver)
self._flag_changers = {}
self._ui_capture_dir = dict()
@@ -409,19 +409,18 @@ class LocalDeviceInstrumentationTestRun(
test_name.replace('#', '.'),
time.strftime('%Y%m%dT%H%M%S-UTC', time.gmtime()),
device.serial)
- logmon = logdog_logcat_monitor.LogdogLogcatMonitor(
- device.adb, stream_name, filter_specs=LOGCAT_FILTERS)
-
- with contextlib_ext.Optional(
- logmon, self._test_instance.should_save_logcat):
jbudorick 2017/06/20 14:12:54 Does this option do anything after your change?
mikecase (-- gone --) 2017/07/10 17:11:10 Probably not. Would need to get rid of it I suppos
- with _LogTestEndpoints(device, test_name):
- with contextlib_ext.Optional(
- trace_event.trace(test_name),
- self._env.trace_output):
- output = device.StartInstrumentation(
- target, raw=True, extras=extras, timeout=timeout, retries=0)
-
- logcat_url = logmon.GetLogcatURL()
+ with tempfile.NamedTemporaryFile() as logcat_tmp:
+ with logcat_monitor.LogcatMonitor(
jbudorick 2017/06/20 14:12:54 I'm wondering if there are situations in which we
mikecase (-- gone --) 2017/07/10 17:11:11 Well, the default is the NoopOutputSaver, which do
+ device.adb, filter_specs=LOGCAT_FILTERS, output_file=logcat_tmp.name):
+ with _LogTestEndpoints(device, test_name):
+ with contextlib_ext.Optional(
+ trace_event.trace(test_name),
+ self._env.trace_output):
+ output = device.StartInstrumentation(
+ target, raw=True, extras=extras, timeout=timeout, retries=0)
+ logcat_url = self._test_output_saver.Save(
+ logcat_tmp.name, stream_name, 'logcat',
+ test_output_saver_factory.Datatype.TEXT)
duration_ms = time_ms() - start_ms
if flags_to_add or flags_to_remove:
self._flag_changers[str(device)].Restore()
@@ -521,8 +520,12 @@ class LocalDeviceInstrumentationTestRun(
stream_name = 'tombstones_%s_%s' % (
time.strftime('%Y%m%dT%H%M%S-UTC', time.gmtime()),
device.serial)
- tombstones_url = logdog_helper.text(
- stream_name, '\n'.join(resolved_tombstones))
+ with tempfile.NamedTemporaryFile() as tombstone_tmp:
+ tombstone_tmp.write('\n'.join(resolved_tombstones))
+ tombstones_url = self._test_output_saver.Save(
+ tombstone_tmp.name,
+ stream_name, 'tombstones',
+ test_output_saver_factory.Datatype.TEXT)
result.SetLink('tombstones', tombstones_url)
return results, None
@@ -544,23 +547,14 @@ class LocalDeviceInstrumentationTestRun(
'Saved screenshot for %s to %s.',
test_name, screenshot_host_file)
if self._test_instance.gs_results_bucket:
- link = google_storage_helper.upload(
- google_storage_helper.unique_name(
- 'screenshot', device=device),
- screenshot_host_file,
- bucket=('%s/screenshots' %
- self._test_instance.gs_results_bucket))
+ link = self._test_output_saver.Save(
jbudorick 2017/06/20 14:12:54 This only saves the screenshot if we've set a resu
mikecase (-- gone --) 2017/07/10 17:11:11 Thanks for this catch. I had fixed this for the re
+ screenshot_host_file, os.path.join('screenshots', test_name),
+ test_output_saver_factory.Datatype.IMAGE)
for result in results:
result.SetLink('post_test_screenshot', link)
def _ProcessRenderTestResults(
self, device, render_tests_device_output_dir, results):
- # If GS results bucket is specified, will archive render result images.
- # If render image dir is specified, will pull the render result image from
- # the device and leave in the directory.
- if not (bool(self._test_instance.gs_results_bucket) or
- bool(self._test_instance.render_results_dir)):
- return
failure_images_device_dir = posixpath.join(
render_tests_device_output_dir, 'failures')
@@ -596,12 +590,9 @@ class LocalDeviceInstrumentationTestRun(
logging.error('Golden images not found on device.')
# Upload results to Google Storage.
- if self._test_instance.gs_results_bucket:
- self._UploadRenderTestResults(render_host_dir, results)
+ self._SaveRenderTestResults(render_host_dir, results)
- def _UploadRenderTestResults(self, render_host_dir, results):
- render_tests_bucket = (
- self._test_instance.gs_results_bucket + '/render_tests')
+ def _SaveRenderTestResults(self, render_host_dir, results):
for failure_filename in os.listdir(
os.path.join(render_host_dir, 'failures')):
@@ -613,22 +604,26 @@ class LocalDeviceInstrumentationTestRun(
failure_filepath = os.path.join(
render_host_dir, 'failures', failure_filename)
- failure_link = google_storage_helper.upload_content_addressed(
- failure_filepath, bucket=render_tests_bucket)
+ failure_link = self._test_output_saver.Save(
+ failure_filepath, failure_filename, 'render_tests',
+ test_output_saver_factory.Datatype.IMAGE)
+
golden_filepath = os.path.join(
render_host_dir, 'goldens', failure_filename)
if os.path.exists(golden_filepath):
- golden_link = google_storage_helper.upload_content_addressed(
- golden_filepath, bucket=render_tests_bucket)
+ golden_link = self._test_output_saver.Save(
+ golden_filepath, 'golden_%s' % failure_filename, 'render_tests',
+ test_output_saver_factory.Datatype.IMAGE)
else:
golden_link = ''
diff_filepath = os.path.join(
render_host_dir, 'diffs', failure_filename)
if os.path.exists(diff_filepath):
- diff_link = google_storage_helper.upload_content_addressed(
- diff_filepath, bucket=render_tests_bucket)
+ diff_link = self._test_output_saver.Save(
+ diff_filepath, 'diff_%s' % failure_filename, 'render_tests',
+ test_output_saver_factory.Datatype.IMAGE)
else:
diff_link = ''
@@ -646,10 +641,9 @@ class LocalDeviceInstrumentationTestRun(
temp_html.write(processed_template_output)
temp_html.flush()
- html_results_link = google_storage_helper.upload_content_addressed(
- temp_html.name,
- bucket=render_tests_bucket,
- content_type='text/html')
+ html_results_link = self._test_output_saver.Save(
+ temp_html.name, 'render.html', 'render_tests',
+ test_output_saver_factory.Datatype.HTML)
for result in results:
result.SetLink(failure_filename, html_results_link)

Powered by Google App Engine
This is Rietveld 408576698