123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- # -*- coding: utf-8 -*-
- """
- tests.support.generate-from-names-from-failed-test-reports
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- This script is meant as a stop-gap until we move to PyTest to provide a functionality similar to
- PyTest's --last-failed where PyTest only runs last failed tests.
- """
- # pylint: disable=resource-leakage
- from __future__ import absolute_import, print_function, unicode_literals
- import argparse
- import glob
- import os
- import sys
- try:
- import xunitparser
- except ImportError:
- sys.stderr.write(
- "Please install the xunitparser python package to run this script\n"
- )
- sys.stderr.flush()
- sys.exit(1)
- REPO_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
- def main():
- parser = argparse.ArgumentParser()
- parser.add_argument(
- "--reports-dir",
- default=os.path.join(REPO_ROOT, "artifacts", "xml-unittests-output"),
- help="Path to the directory where the JUnit XML reports can be found",
- )
- parser.add_argument(
- "output_file",
- help="Path to the file containing the failed tests listing to be fed to --names-files",
- )
- options = parser.parse_args()
- total_xml_reports = 0
- failures = set()
- for fname in sorted(glob.glob(os.path.join(options.reports_dir, "*.xml"))):
- total_xml_reports += 1
- with open(fname) as rfh:
- test_suite, test_result = xunitparser.parse(rfh)
- if not test_result.errors and not test_result.failures:
- continue
- for test in test_suite:
- if test.bad:
- failures.add("{classname}.{methodname}".format(**test.__dict__))
- if not total_xml_reports:
- parser.exit(status=1, message="No JUnit XML files were parsed")
- with open(options.output_file, "w") as wfh:
- wfh.write(os.linesep.join(sorted(failures)))
- parser.exit(status=0)
- if __name__ == "__main__":
- main()
|