def unitrun(package, test_name, test, sysargs=None, coverage_packages=None): """ Wrapper routine from running python unitttests with JUnit-compatible XML output. This is meant for unittests that do not not need a running ROS graph (i.e. offline tests only). This enables JUnit-compatible test reporting so that test results can be reported to higher-level tools. @param package: name of ROS package that is running the test @type package: str @param coverage_packages: list of Python package to compute coverage results for. Defaults to package @type coverage_packages: [str] """ if sysargs is None: # lazy-init sys args import sys sysargs = sys.argv import unittest if coverage_packages is None: coverage_packages = [package] #parse sysargs result_file = None for arg in sysargs: if arg.startswith(XML_OUTPUT_FLAG): result_file = arg[len(XML_OUTPUT_FLAG):] text_mode = '--text' in sysargs coverage_mode = '--cov' in sysargs or '--covhtml' in sysargs if coverage_mode: _start_coverage(coverage_packages) # lazy-import after coverage tests begin from rostestutil import createXMLRunner, printSummary suite = unittest.TestLoader().loadTestsFromTestCase(test) if text_mode: result = unittest.TextTestRunner(verbosity=2).run(suite) else: result = createXMLRunner(package, test_name, result_file).run(suite) if coverage_mode: cov_html_dir = 'covhtml' if '--covhtml' in sysargs else None _stop_coverage(coverage_packages, html=cov_html_dir) printSummary(result) if not result.wasSuccessful(): import sys sys.exit(1)
def rosrun(package, test_name, test, sysargs=None): """ Run a rostest/unittest-based integration test. @param package: name of package that test is in @type package: str @param test_name: name of test that is being run @type test_name: str @param test: test class @type test: unittest.TestCase @param sysargs: command-line args. If not specified, this defaults to sys.argv. rostest will look for the --text and --gtest_output parameters @type sysargs: list """ if sysargs is None: # lazy-init sys args import sys sysargs = sys.argv #parse sysargs result_file = None for arg in sysargs: if arg.startswith(XML_OUTPUT_FLAG): result_file = arg[len(XML_OUTPUT_FLAG):] text_mode = '--text' in sysargs coverage_mode = '--cov' in sysargs if coverage_mode: _start_coverage(package) # lazy-import so that these don't affect coverage tests from rostestutil import createXMLRunner, printSummary import unittest import rospy suite = unittest.TestLoader().loadTestsFromTestCase(test) if text_mode: result = unittest.TextTestRunner(verbosity=2).run(suite) else: result = createXMLRunner(package, test_name, result_file).run(suite) if coverage_mode: _stop_coverage(package) printSummary(result) # shutdown any node resources in case test forgets to rospy.signal_shutdown('test complete') if not result.wasSuccessful(): import sys sys.exit(1)