Improve run_tests.py, allowing it to run only specific tests.

This commit is contained in:
Emmanuel Gil Peyrot 2014-08-20 21:55:36 +02:00 committed by Florent Le Coz
parent 83442b9849
commit e1c944d723
2 changed files with 25 additions and 20 deletions

View file

@ -1,33 +1,32 @@
#!/usr/bin/env python3
import sys
import os
import logging
import unittest
import distutils.core
from glob import glob
from os.path import splitext, basename, join as pjoin
from argparse import ArgumentParser
from distutils.core import Command
from importlib import import_module
from pathlib import Path
def run_tests():
def run_tests(filenames=None):
"""
Find and run all tests in the tests/ directory.
Excludes live tests (tests/live_*).
"""
testfiles = ['tests.test_overall']
exclude = ['__init__.py', 'test_overall.py']
for t in glob(pjoin('tests', '*.py')):
if True not in [t.endswith(ex) for ex in exclude]:
if basename(t).startswith('test_'):
testfiles.append('tests.%s' % splitext(basename(t))[0])
if not filenames:
filenames = [i for i in Path('tests').glob('test_*')]
else:
filenames = [Path(i) for i in filenames]
modules = ['.'.join(test.parts[:-1] + (test.stem,)) for test in filenames]
suites = []
for file in testfiles:
__import__(file)
suites.append(sys.modules[file].suite)
for filename in modules:
module = import_module(filename)
suites.append(module.suite)
tests = unittest.TestSuite(suites)
runner = unittest.TextTestRunner(verbosity=2)
@ -42,12 +41,12 @@ def run_tests():
# Add a 'test' command for setup.py
class TestCommand(distutils.core.Command):
class TestCommand(Command):
user_options = []
def initialize_options(self):
self._dir = os.getcwd()
pass
def finalize_options(self):
pass
@ -57,8 +56,14 @@ class TestCommand(distutils.core.Command):
if __name__ == '__main__':
result = run_tests()
parser = ArgumentParser(description='Run unit tests.')
parser.add_argument('tests', metavar='TEST', nargs='*', help='list of tests to run, or nothing to run them all')
args = parser.parse_args()
result = run_tests(args.tests)
print("<tests %s ran='%s' errors='%s' fails='%s' success='%s'/>" % (
"xmlns='http//andyet.net/protocol/tests'",
result.testsRun, len(result.errors),
len(result.failures), result.wasSuccessful()))
sys.exit(not result.wasSuccessful())

View file

@ -13,7 +13,7 @@ try:
except ImportError:
from distutils.core import setup
from testall import TestCommand
from run_tests import TestCommand
from slixmpp.version import __version__
VERSION = __version__