nose: builtin plugin: debug
This plugin provides --pdb and --pdb-failures options that cause the test runner to drop into pdb if it encounters an error or failure, respectively.
Plugin Methods Implemented
This plugin implements the following plugin interface methods:
Commandline Options
This plugin adds the following commandline options:
Options: --pdb Drop into debugger on errors --pdb-failures Drop into debugger on failures
Source
"""
This plugin provides --pdb and --pdb-failures options that cause the
test runner to drop into pdb if it encounters an error or failure,
respectively.
"""
import os
import pdb
from nose.plugins.base import Plugin
class Pdb(Plugin):
"""
Provides --pdb and --pdb-failures options that cause the test runner to
drop into pdb if it encounters an error or failure, respectively.
"""
enabled_for_errors = False
enabled_for_failures = False
score = 5 # run last, among builtins
def options(self, parser, env=os.environ):
parser.add_option(
"--pdb", action="store_true", dest="debugErrors",
default=env.get('NOSE_PDB', False),
help="Drop into debugger on errors")
parser.add_option(
"--pdb-failures", action="store_true",
dest="debugFailures",
default=env.get('NOSE_PDB_FAILURES', False),
help="Drop into debugger on failures")
def configure(self, options, conf):
self.conf = conf
self.enabled = options.debugErrors or options.debugFailures
self.enabled_for_errors = options.debugErrors
self.enabled_for_failures = options.debugFailures
def addError(self, test, err):
if not self.enabled_for_errors:
return
self.debug(err)
def addFailure(self, test, err):
if not self.enabled_for_failures:
return
self.debug(err)
def debug(self, err):
import sys
ec, ev, tb = err
stdout = sys.stdout
sys.stdout = sys.__stdout__
try:
pdb.post_mortem(tb)
finally:
sys.stdout = stdout