mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			Merge pull request #1873 from theotherjimmy/file-reporter
Adds a simple text file report formatpull/2047/head
						commit
						458b46c803
					
				| 
						 | 
				
			
			@ -230,6 +230,7 @@ if __name__ == '__main__':
 | 
			
		|||
                                   _opts_report_html_file_name=opts.report_html_file_name,
 | 
			
		||||
                                   _opts_report_junit_file_name=opts.report_junit_file_name,
 | 
			
		||||
                                   _opts_report_build_file_name=opts.report_build_file_name,
 | 
			
		||||
                                   _opts_report_text_file_name=opts.report_text_file_name,
 | 
			
		||||
                                   _test_spec=test_spec,
 | 
			
		||||
                                   _opts_goanna_for_mbed_sdk=opts.goanna_for_mbed_sdk,
 | 
			
		||||
                                   _opts_goanna_for_tests=opts.goanna_for_tests,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -166,6 +166,7 @@ class SingleTestRunner(object):
 | 
			
		|||
                 _opts_report_html_file_name=None,
 | 
			
		||||
                 _opts_report_junit_file_name=None,
 | 
			
		||||
                 _opts_report_build_file_name=None,
 | 
			
		||||
                 _opts_report_text_file_name=None,
 | 
			
		||||
                 _opts_build_report={},
 | 
			
		||||
                 _opts_build_properties={},
 | 
			
		||||
                 _test_spec={},
 | 
			
		||||
| 
						 | 
				
			
			@ -224,6 +225,7 @@ class SingleTestRunner(object):
 | 
			
		|||
        self.opts_report_html_file_name = _opts_report_html_file_name
 | 
			
		||||
        self.opts_report_junit_file_name = _opts_report_junit_file_name
 | 
			
		||||
        self.opts_report_build_file_name = _opts_report_build_file_name
 | 
			
		||||
        self.opts_report_text_file_name = _opts_report_text_file_name
 | 
			
		||||
        self.opts_goanna_for_mbed_sdk = _opts_goanna_for_mbed_sdk
 | 
			
		||||
        self.opts_goanna_for_tests = _opts_goanna_for_tests
 | 
			
		||||
        self.opts_shuffle_test_order = _opts_shuffle_test_order
 | 
			
		||||
| 
						 | 
				
			
			@ -1513,6 +1515,10 @@ def singletest_in_cli_mode(single_test):
 | 
			
		|||
        # Export results in form of JUnit XML report to separate file
 | 
			
		||||
        report_exporter = ReportExporter(ResultExporterType.JUNIT)
 | 
			
		||||
        report_exporter.report_to_file(test_summary_ext, single_test.opts_report_junit_file_name, test_suite_properties=test_suite_properties_ext)
 | 
			
		||||
    if single_test.opts_report_text_file_name:
 | 
			
		||||
        # Export results in form of a text file
 | 
			
		||||
        report_exporter = ReportExporter(ResultExporterType.TEXT)
 | 
			
		||||
        report_exporter.report_to_file(test_summary_ext, single_test.opts_report_text_file_name, test_suite_properties=test_suite_properties_ext)
 | 
			
		||||
    if single_test.opts_report_build_file_name:
 | 
			
		||||
        # Export build results as html report to sparate file
 | 
			
		||||
        report_exporter = ReportExporter(ResultExporterType.JUNIT, package="build")
 | 
			
		||||
| 
						 | 
				
			
			@ -1926,6 +1932,10 @@ def get_default_test_options_parser():
 | 
			
		|||
                      dest="report_build_file_name",
 | 
			
		||||
                      help="Output the build results to a junit xml file")
 | 
			
		||||
 | 
			
		||||
    parser.add_option("", "--report-text",
 | 
			
		||||
                      dest="report_text_file_name",
 | 
			
		||||
                      help="Output the build results to a text file")
 | 
			
		||||
 | 
			
		||||
    parser.add_option('', '--verbose-skipped',
 | 
			
		||||
                      dest='verbose_skipped_tests',
 | 
			
		||||
                      default=False,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,12 +18,14 @@ Author: Przemyslaw Wirkus <Przemyslaw.wirkus@arm.com>
 | 
			
		|||
"""
 | 
			
		||||
 | 
			
		||||
from tools.utils import construct_enum, mkdir
 | 
			
		||||
from prettytable import PrettyTable
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
ResultExporterType = construct_enum(HTML='Html_Exporter',
 | 
			
		||||
                                    JUNIT='JUnit_Exporter',
 | 
			
		||||
                                    JUNIT_OPER='JUnit_Exporter_Interoperability',
 | 
			
		||||
                                    BUILD='Build_Exporter',
 | 
			
		||||
                                    TEXT='Text_Exporter',
 | 
			
		||||
                                    PRINT='Print_Exporter')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -88,6 +90,8 @@ class ReportExporter():
 | 
			
		|||
        elif self.result_exporter_type == ResultExporterType.PRINT:
 | 
			
		||||
            # JUNIT exporter for interoperability test
 | 
			
		||||
            return self.exporter_print(test_summary_ext, print_log_for_failures=print_log_for_failures)
 | 
			
		||||
        elif self.result_exporter_type == ResultExporterType.TEXT:
 | 
			
		||||
            return self.exporter_text(test_summary_ext)
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    def report_to_file(self, test_summary_ext, file_name, test_suite_properties=None):
 | 
			
		||||
| 
						 | 
				
			
			@ -352,3 +356,59 @@ class ReportExporter():
 | 
			
		|||
            return False
 | 
			
		||||
        else:
 | 
			
		||||
            return True
 | 
			
		||||
 | 
			
		||||
    def exporter_text(self, test_result_ext):
 | 
			
		||||
        """ Prints well-formed summary with results (SQL table like)
 | 
			
		||||
            table shows target x test results matrix across
 | 
			
		||||
        """
 | 
			
		||||
        success_code = 0    # Success code that can be leter returned to
 | 
			
		||||
        # Pretty table package is used to print results
 | 
			
		||||
        pt = PrettyTable(["Result", "Target", "Toolchain", "Test ID", "Test Description",
 | 
			
		||||
                          "Elapsed Time", "Timeout"])
 | 
			
		||||
        pt.align["Result"] = "l" # Left align
 | 
			
		||||
        pt.align["Target"] = "l" # Left align
 | 
			
		||||
        pt.align["Toolchain"] = "l" # Left align
 | 
			
		||||
        pt.align["Test ID"] = "l" # Left align
 | 
			
		||||
        pt.align["Test Description"] = "l" # Left align
 | 
			
		||||
        pt.padding_width = 1 # One space between column edges and contents (default)
 | 
			
		||||
 | 
			
		||||
        result_dict = {"OK" : 0,
 | 
			
		||||
                       "FAIL" : 0,
 | 
			
		||||
                       "ERROR" : 0,
 | 
			
		||||
                       "UNDEF" : 0,
 | 
			
		||||
                       "IOERR_COPY" : 0,
 | 
			
		||||
                       "IOERR_DISK" : 0,
 | 
			
		||||
                       "IOERR_SERIAL" : 0,
 | 
			
		||||
                       "TIMEOUT" : 0,
 | 
			
		||||
                       "NO_IMAGE" : 0,
 | 
			
		||||
                       "MBED_ASSERT" : 0,
 | 
			
		||||
                       "BUILD_FAILED" : 0,
 | 
			
		||||
                       "NOT_SUPPORTED" : 0
 | 
			
		||||
        }
 | 
			
		||||
        unique_test_ids = self.get_all_unique_test_ids(test_result_ext)
 | 
			
		||||
        targets = sorted(test_result_ext.keys())
 | 
			
		||||
        for target in targets:
 | 
			
		||||
            toolchains = sorted(test_result_ext[target].keys())
 | 
			
		||||
            for toolchain in toolchains:
 | 
			
		||||
                test_cases = []
 | 
			
		||||
                tests = sorted(test_result_ext[target][toolchain].keys())
 | 
			
		||||
                for test in tests:
 | 
			
		||||
                    test_results = test_result_ext[target][toolchain][test]
 | 
			
		||||
                    for test_res in test_results:
 | 
			
		||||
                        test_ids = sorted(test_res.keys())
 | 
			
		||||
                        for test_no in test_ids:
 | 
			
		||||
                            test_result = test_res[test_no]
 | 
			
		||||
                            result_dict[test_result['result']] += 1
 | 
			
		||||
                            pt.add_row([test_result['result'],
 | 
			
		||||
                                        test_result['target_name'],
 | 
			
		||||
                                        test_result['toolchain_name'],
 | 
			
		||||
                                        test_result['id'],
 | 
			
		||||
                                        test_result['description'],
 | 
			
		||||
                                        test_result['elapsed_time'],
 | 
			
		||||
                                        test_result['duration']])
 | 
			
		||||
        result = pt.get_string()
 | 
			
		||||
        result += "\n"
 | 
			
		||||
 | 
			
		||||
        # Print result count
 | 
			
		||||
        result += "Result: " + ' / '.join(['%s %s' % (value, key) for (key, value) in {k: v for k, v in result_dict.items() if v != 0}.iteritems()])
 | 
			
		||||
        return result
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue