diff options
author | 2015-10-23 15:51:42 -0700 | |
---|---|---|
committer | 2015-10-27 14:43:12 -0700 | |
commit | d5fffa5850c3dbe6c052312c527a32e616034bf4 (patch) | |
tree | ab085a6e065bb97d4f5b48645169e677d208b238 /tools/run_tests/run_tests.py | |
parent | 5fc4f77e119d8aeecc76909078203f7e5d5b36df (diff) |
Print detailed results for each test.
Diffstat (limited to 'tools/run_tests/run_tests.py')
-rwxr-xr-x | tools/run_tests/run_tests.py | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index 99f454397e..3d33f93fb1 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -801,6 +801,23 @@ def _start_port_server(port_server_port): raise +def _calculate_num_runs_failures(list_of_results): + """Caculate number of runs and failures for a particular test. + + Args: + list_of_results: (List) of JobResult object. + Returns: + A tuple of total number of runs and failures. + """ + num_runs = len(list_of_results) # By default, there is 1 run per JobResult. + num_failures = 0 + for jobresult in list_of_results: + if jobresult.retries > 0: + num_runs += jobresult.retries + if jobresult.num_failures > 0: + num_failures += jobresult.num_failures + return num_runs, num_failures + def _build_and_run( check_cancelled, newline_on_success, travis, cache, xml_report=None): """Do one pass of building & running tests.""" @@ -842,13 +859,24 @@ def _build_and_run( root = ET.Element('testsuites') if xml_report else None testsuite = ET.SubElement(root, 'testsuite', id='1', package='grpc', name='tests') if xml_report else None - number_failures, _ = jobset.run( - all_runs, check_cancelled, newline_on_success=newline_on_success, + number_failures, resultset = jobset.run( + all_runs, check_cancelled, newline_on_success=newline_on_success, travis=travis, infinite_runs=infinite_runs, maxjobs=args.jobs, stop_on_failure=args.stop_on_failure, cache=cache if not xml_report else None, xml_report=testsuite, add_env={'GRPC_TEST_PORT_SERVER': 'localhost:%d' % port_server_port}) + if resultset: + for k, v in resultset.iteritems(): + num_runs, num_failures = _calculate_num_runs_failures(v) + if num_failures == num_runs: # what about infinite_runs??? + jobset.message('FAILED', k, do_newline=True) + elif num_failures > 0: + jobset.message( + 'FLAKE', '%s [%d/%d runs flaked]' % (k, num_failures, num_runs), + do_newline=True) + else: + jobset.message('PASSED', k, do_newline=True) if number_failures: return 2 finally: @@ -880,9 +908,9 @@ if forever: have_files_changed = lambda: dw.most_recent_change() != initial_time previous_success = success success = _build_and_run(check_cancelled=have_files_changed, - newline_on_success=False, - travis=args.travis, - cache=test_cache) == 0 + newline_on_success=False, + travis=args.travis, + cache=test_cache) == 0 if not previous_success and success: jobset.message('SUCCESS', 'All tests are now passing properly', |