Use the xunit nose plugin to generate JUnit XML test results from Spack's unit

tests.
This commit is contained in:
Peter Scheibel 2015-11-24 19:08:37 -08:00
parent 0adf93853d
commit 18dea24df8
2 changed files with 21 additions and 4 deletions

View File

@ -22,8 +22,10 @@
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
import os
from pprint import pprint
from llnl.util.filesystem import join_path, mkdirp
from llnl.util.tty.colify import colify
from llnl.util.lang import list_modules
@ -37,6 +39,9 @@ def setup_parser(subparser):
'names', nargs='*', help="Names of tests to run.")
subparser.add_argument(
'-l', '--list', action='store_true', dest='list', help="Show available tests")
# TODO: make XML output optional
subparser.add_argument(
'-d', '--outputDir', dest='outputDir', help="Nose creates XML files in this directory")
subparser.add_argument(
'-v', '--verbose', action='store_true', dest='verbose',
help="verbose output")
@ -48,4 +53,10 @@ def test(parser, args):
colify(spack.test.list_tests(), indent=2)
else:
spack.test.run(args.names, args.verbose)
if not args.outputDir:
outputDir = join_path(os.getcwd(), "test-output")
else:
outputDir = args.outputDir
if not os.path.exists(outputDir):
mkdirp(outputDir)
spack.test.run(args.names, outputDir, args.verbose)

View File

@ -27,6 +27,7 @@
import nose
from spack.test.tally_plugin import Tally
from llnl.util.filesystem import join_path
import llnl.util.tty as tty
from llnl.util.tty.colify import colify
@ -69,7 +70,7 @@ def list_tests():
return test_names
def run(names, verbose=False):
def run(names, outputDir, verbose=False):
"""Run tests with the supplied names. Names should be a list. If
it's empty, run ALL of Spack's tests."""
verbosity = 1 if not verbose else 2
@ -91,8 +92,13 @@ def run(names, verbose=False):
tty.msg("Running test: %s" % test)
activateTally = "--with-%s" % spack.test.tally_plugin.Tally.name
result = nose.run(argv=["", activateTally, module], addplugins=[tally])
xmlOutputFname = "unittests-{0}.xml".format(test)
xmlOutputPath = join_path(outputDir, xmlOutputFname)
runOpts = ["--with-%s" % spack.test.tally_plugin.Tally.name,
"--with-xunit",
"--xunit-file={0}".format(xmlOutputPath)]
argv = [""] + runOpts + [module]
result = nose.run(argv=argv, addplugins=[tally])
succeeded = not tally.failCount and not tally.errorCount
tty.msg("Tests Complete.",