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
parent 54dd561ad2
commit 3f1a51fad7
3 changed files with 26 additions and 14 deletions

View File

@ -262,6 +262,10 @@ class BaseMarionetteArguments(ArgumentParser):
nargs='*',
default=[],
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',
choices=['x86', 'arm'],
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,
adb_host=None, adb_port=None, prefs=None, test_tags=None,
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.emulator = emulator
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 .
# and default location for profile is TMP
self.workspace_path = workspace or os.getcwd()
self.verbose = verbose
def gather_debug(test, status):
rv = {}
@ -701,6 +707,7 @@ class BaseMarionetteTestRunner(object):
'adb_port': self._adb_port,
'prefs': self.prefs,
'startup_timeout': self.startup_timeout,
'verbose': self.verbose,
}
if self.bin:
kwargs.update({

View File

@ -2,46 +2,48 @@
# 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/
from copy import deepcopy
import os
import sys
import tempfile
import time
from copy import deepcopy
from mozprofile import Profile
from mozrunner import Runner
class GeckoInstance(object):
required_prefs = {
"marionette.defaultPrefs.enabled": True,
"marionette.logging": True,
"browser.displayedE10SPrompt": 5,
"browser.displayedE10SPrompt.1": 5,
"browser.displayedE10SPrompt.2": 5,
"browser.displayedE10SPrompt.3": 5,
"browser.displayedE10SPrompt.4": 5,
"browser.displayedE10SPrompt": 5,
"browser.sessionstore.resume_from_crash": False,
"browser.shell.checkDefaultBrowser": False,
"browser.startup.page": 0,
"browser.tabs.remote.autostart": False,
"browser.tabs.remote.autostart.1": False,
"browser.tabs.remote.autostart.2": False,
"browser.tabs.remote.autostart": False,
"browser.urlbar.userMadeSearchSuggestionsChoice": True,
"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.policy.dataSubmissionEnabled": False,
"datareporting.policy.dataSubmissionPolicyAccepted": False,
"dom.ipc.reportProcessHangs": False,
"focusmanager.testmode": True,
"marionette.defaultPrefs.enabled": True,
"startup.homepage_welcome_url": "about:blank",
"toolkit.telemetry.enabled": False,
}
def __init__(self, host, port, bin, profile=None, addons=None,
app_args=None, symbols_path=None, gecko_log=None, prefs=None,
workspace=None):
workspace=None, verbose=0):
self.marionette_host = host
self.marionette_port = port
self.bin = bin
@ -74,12 +76,16 @@ class GeckoInstance(object):
os.remove(gecko_log)
self.gecko_log = gecko_log
self.verbose = verbose
def start(self):
profile_args = {"preferences": deepcopy(self.required_prefs)}
profile_args["preferences"]["marionette.defaultPrefs.port"] = self.marionette_port
if 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:
profile_args["preferences"].update({
"devtools.browsertoolbox.panel": "jsdebugger",
@ -205,9 +211,6 @@ class DesktopInstance(GeckoInstance):
'extensions.update.notifyUser': False,
'geo.provider.testing': 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,
'signon.rememberSignons': False,
'toolkit.startup.max_resumed_crashes': -1,
@ -217,6 +220,7 @@ class DesktopInstance(GeckoInstance):
super(DesktopInstance, self).__init__(*args, **kwargs)
self.required_prefs.update(DesktopInstance.desktop_prefs)
class NullOutput(object):
def __call__(self, line):
pass

View File

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