Bug 1221187: testing/marionette/client: Add -v flag for trace logging output; r=automatedtester

Adds -v and --verbose flags to the `./mach marionette-test` command to
increase the verbosity of the Marionette logging output.

A single -v corresponds to Log.Level.Debug and above.  A double -vv
or more corresponds to Log.Level.Trace and above.

--HG--
extra : rebase_source : 68fd4ff830447247a2d89fc7b2c398248cbfa186
This commit is contained in:
Andreas Tolfsen 2016-01-01 13:56:20 +00:00
Родитель 54dd561ad2
Коммит 3f1a51fad7
3 изменённых файлов: 26 добавлений и 14 удалений

Просмотреть файл

@ -262,6 +262,10 @@ class BaseMarionetteArguments(ArgumentParser):
nargs='*', nargs='*',
default=[], default=[],
help='Tests to run.') help='Tests to run.')
self.add_argument('-v', '--verbose',
action='count',
help='Increase verbosity to include debug messages with -v, '
'and trace messages with -vv.')
self.add_argument('--emulator', self.add_argument('--emulator',
choices=['x86', 'arm'], choices=['x86', 'arm'],
help='if no --address is given, then the harness will launch a B2G emulator on which to run ' help='if no --address is given, then the harness will launch a B2G emulator on which to run '
@ -521,7 +525,8 @@ class BaseMarionetteTestRunner(object):
server_root=None, gecko_log=None, result_callbacks=None, server_root=None, gecko_log=None, result_callbacks=None,
adb_host=None, adb_port=None, prefs=None, test_tags=None, adb_host=None, adb_port=None, prefs=None, test_tags=None,
socket_timeout=BaseMarionetteArguments.socket_timeout_default, socket_timeout=BaseMarionetteArguments.socket_timeout_default,
startup_timeout=None, addons=None, workspace=None, **kwargs): startup_timeout=None, addons=None, workspace=None,
verbose=0, **kwargs):
self.address = address self.address = address
self.emulator = emulator self.emulator = emulator
self.emulator_binary = emulator_binary self.emulator_binary = emulator_binary
@ -571,6 +576,7 @@ class BaseMarionetteTestRunner(object):
# If no workspace is set, default location for logcat and gecko.log is . # If no workspace is set, default location for logcat and gecko.log is .
# and default location for profile is TMP # and default location for profile is TMP
self.workspace_path = workspace or os.getcwd() self.workspace_path = workspace or os.getcwd()
self.verbose = verbose
def gather_debug(test, status): def gather_debug(test, status):
rv = {} rv = {}
@ -701,6 +707,7 @@ class BaseMarionetteTestRunner(object):
'adb_port': self._adb_port, 'adb_port': self._adb_port,
'prefs': self.prefs, 'prefs': self.prefs,
'startup_timeout': self.startup_timeout, 'startup_timeout': self.startup_timeout,
'verbose': self.verbose,
} }
if self.bin: if self.bin:
kwargs.update({ kwargs.update({

Просмотреть файл

@ -2,46 +2,48 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this # License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/ # file, You can obtain one at http://mozilla.org/MPL/2.0/
from copy import deepcopy
import os import os
import sys import sys
import tempfile import tempfile
import time import time
from copy import deepcopy
from mozprofile import Profile from mozprofile import Profile
from mozrunner import Runner from mozrunner import Runner
class GeckoInstance(object): class GeckoInstance(object):
required_prefs = { required_prefs = {
"marionette.defaultPrefs.enabled": True,
"marionette.logging": True,
"browser.displayedE10SPrompt": 5,
"browser.displayedE10SPrompt.1": 5, "browser.displayedE10SPrompt.1": 5,
"browser.displayedE10SPrompt.2": 5, "browser.displayedE10SPrompt.2": 5,
"browser.displayedE10SPrompt.3": 5, "browser.displayedE10SPrompt.3": 5,
"browser.displayedE10SPrompt.4": 5, "browser.displayedE10SPrompt.4": 5,
"browser.displayedE10SPrompt": 5,
"browser.sessionstore.resume_from_crash": False, "browser.sessionstore.resume_from_crash": False,
"browser.shell.checkDefaultBrowser": False, "browser.shell.checkDefaultBrowser": False,
"browser.startup.page": 0, "browser.startup.page": 0,
"browser.tabs.remote.autostart": False,
"browser.tabs.remote.autostart.1": False, "browser.tabs.remote.autostart.1": False,
"browser.tabs.remote.autostart.2": False, "browser.tabs.remote.autostart.2": False,
"browser.tabs.remote.autostart": False,
"browser.urlbar.userMadeSearchSuggestionsChoice": True, "browser.urlbar.userMadeSearchSuggestionsChoice": True,
"browser.warnOnQuit": False, "browser.warnOnQuit": False,
"dom.ipc.reportProcessHangs": False, "datareporting.healthreport.logging.consoleEnabled": False,
"datareporting.healthreport.service.enabled": False,
"datareporting.healthreport.service.firstRun": False,
"datareporting.healthreport.uploadEnabled": False, "datareporting.healthreport.uploadEnabled": False,
"datareporting.policy.dataSubmissionEnabled": False, "datareporting.policy.dataSubmissionEnabled": False,
"datareporting.policy.dataSubmissionPolicyAccepted": False, "datareporting.policy.dataSubmissionPolicyAccepted": False,
"dom.ipc.reportProcessHangs": False,
"focusmanager.testmode": True, "focusmanager.testmode": True,
"marionette.defaultPrefs.enabled": True,
"startup.homepage_welcome_url": "about:blank", "startup.homepage_welcome_url": "about:blank",
"toolkit.telemetry.enabled": False, "toolkit.telemetry.enabled": False,
} }
def __init__(self, host, port, bin, profile=None, addons=None, def __init__(self, host, port, bin, profile=None, addons=None,
app_args=None, symbols_path=None, gecko_log=None, prefs=None, app_args=None, symbols_path=None, gecko_log=None, prefs=None,
workspace=None): workspace=None, verbose=0):
self.marionette_host = host self.marionette_host = host
self.marionette_port = port self.marionette_port = port
self.bin = bin self.bin = bin
@ -74,12 +76,16 @@ class GeckoInstance(object):
os.remove(gecko_log) os.remove(gecko_log)
self.gecko_log = gecko_log self.gecko_log = gecko_log
self.verbose = verbose
def start(self): def start(self):
profile_args = {"preferences": deepcopy(self.required_prefs)} profile_args = {"preferences": deepcopy(self.required_prefs)}
profile_args["preferences"]["marionette.defaultPrefs.port"] = self.marionette_port profile_args["preferences"]["marionette.defaultPrefs.port"] = self.marionette_port
if self.prefs: if self.prefs:
profile_args["preferences"].update(self.prefs) profile_args["preferences"].update(self.prefs)
if self.verbose:
level = "TRACE" if self.verbose >= 2 else "DEBUG"
profile_args["preferences"]["marionette.logging"] = level
if '-jsdebugger' in self.app_args: if '-jsdebugger' in self.app_args:
profile_args["preferences"].update({ profile_args["preferences"].update({
"devtools.browsertoolbox.panel": "jsdebugger", "devtools.browsertoolbox.panel": "jsdebugger",
@ -205,9 +211,6 @@ class DesktopInstance(GeckoInstance):
'extensions.update.notifyUser': False, 'extensions.update.notifyUser': False,
'geo.provider.testing': True, 'geo.provider.testing': True,
'javascript.options.showInConsole': True, 'javascript.options.showInConsole': True,
# See Bug 1221187 - marionette logging is too verbose, especially for
# long-running tests.
'marionette.logging': False,
'security.notification_enable_delay': 0, 'security.notification_enable_delay': 0,
'signon.rememberSignons': False, 'signon.rememberSignons': False,
'toolkit.startup.max_resumed_crashes': -1, 'toolkit.startup.max_resumed_crashes': -1,
@ -217,6 +220,7 @@ class DesktopInstance(GeckoInstance):
super(DesktopInstance, self).__init__(*args, **kwargs) super(DesktopInstance, self).__init__(*args, **kwargs)
self.required_prefs.update(DesktopInstance.desktop_prefs) self.required_prefs.update(DesktopInstance.desktop_prefs)
class NullOutput(object): class NullOutput(object):
def __call__(self, line): def __call__(self, line):
pass pass

Просмотреть файл

@ -542,7 +542,7 @@ class Marionette(object):
busybox=None, symbols_path=None, timeout=None, socket_timeout=360, busybox=None, symbols_path=None, timeout=None, socket_timeout=360,
device_serial=None, adb_path=None, process_args=None, device_serial=None, adb_path=None, process_args=None,
adb_host=None, adb_port=None, prefs=None, startup_timeout=None, adb_host=None, adb_port=None, prefs=None, startup_timeout=None,
workspace=None): workspace=None, verbose=0):
self.host = host self.host = host
self.port = self.local_port = port self.port = self.local_port = port
self.bin = bin self.bin = bin
@ -596,7 +596,8 @@ class Marionette(object):
symbols_path=symbols_path, symbols_path=symbols_path,
gecko_log=gecko_log, prefs=prefs, gecko_log=gecko_log, prefs=prefs,
addons=self.addons, addons=self.addons,
workspace=workspace) workspace=workspace,
verbose=verbose)
self.instance.start() self.instance.start()
self.raise_for_port(self.wait_for_port(timeout=startup_timeout)) self.raise_for_port(self.wait_for_port(timeout=startup_timeout))