Skip to content
Snippets Groups Projects
Commit 5f32c517 authored by Yong Ni's avatar Yong Ni
Browse files

Added timestamp to the xml report and minor changes to the API per review feedback.

parent f303426f
No related branches found
No related tags found
No related merge requests found
...@@ -143,7 +143,7 @@ def find_test_cases(lang, release): ...@@ -143,7 +143,7 @@ def find_test_cases(lang, release):
_loaded_testcases[lang][release]=job_spec_list _loaded_testcases[lang][release]=job_spec_list
return job_spec_list return job_spec_list
_xml_report_tree = None _xml_report_tree = report_utils.new_junit_xml_tree()
def run_tests_for_lang(lang, runtime, images): def run_tests_for_lang(lang, runtime, images):
"""Find and run all test cases for a language. """Find and run all test cases for a language.
...@@ -163,15 +163,12 @@ def run_tests_for_lang(lang, runtime, images): ...@@ -163,15 +163,12 @@ def run_tests_for_lang(lang, runtime, images):
else: else:
jobset.message('SUCCESS', 'All tests passed', do_newline=True) jobset.message('SUCCESS', 'All tests passed', do_newline=True)
# Required, otherwise _xml_report_tree will be shadowed by local (undefined) report_utils.append_junit_xml_results(
# reference in the next line. _xml_report_tree,
global _xml_report_tree
_xml_report_tree = report_utils.add_junit_xml_results(
resultset, resultset,
'grpc_interop_matrix', 'grpc_interop_matrix',
'%s__%s:%s'%(lang,runtime,release), '%s__%s:%s'%(lang,runtime,release),
str(uuid.uuid4()), str(uuid.uuid4()))
_xml_report_tree)
_docker_images_cleanup = [] _docker_images_cleanup = []
def cleanup(): def cleanup():
...@@ -187,4 +184,4 @@ for lang in languages: ...@@ -187,4 +184,4 @@ for lang in languages:
for runtime in sorted(docker_images.keys()): for runtime in sorted(docker_images.keys()):
run_tests_for_lang(lang, runtime, docker_images[runtime]) run_tests_for_lang(lang, runtime, docker_images[runtime])
report_utils.create_xml_report_file(args.report_file, _xml_report_tree) report_utils.create_xml_report_file(_xml_report_tree, args.report_file)
...@@ -22,6 +22,7 @@ try: ...@@ -22,6 +22,7 @@ try:
from mako import exceptions from mako import exceptions
except (ImportError): except (ImportError):
pass # Mako not installed but it is ok. pass # Mako not installed but it is ok.
import datetime
import os import os
import string import string
import xml.etree.cElementTree as ET import xml.etree.cElementTree as ET
...@@ -43,26 +44,29 @@ def _filter_msg(msg, output_format): ...@@ -43,26 +44,29 @@ def _filter_msg(msg, output_format):
return msg return msg
def render_junit_xml_report(resultset, xml_report, suite_package='grpc', def new_junit_xml_tree():
return ET.ElementTree(ET.Element('testsuites'))
def render_junit_xml_report(resultset, report_file, suite_package='grpc',
suite_name='tests'): suite_name='tests'):
"""Generate JUnit-like XML report.""" """Generate JUnit-like XML report."""
tree = add_junit_xml_results(resultset, suite_package, suite_name, '1') tree = new_junit_xml_tree()
create_xml_report_file(xml_report, tree) append_junit_xml_results(tree, resultset, suite_package, suite_name, '1')
create_xml_report_file(tree, report_file)
def create_xml_report_file(xml_report, tree): def create_xml_report_file(tree, report_file):
"""Generate JUnit-like report file from xml tree .""" """Generate JUnit-like report file from xml tree ."""
# ensure the report directory exists # ensure the report directory exists
report_dir = os.path.dirname(os.path.abspath(xml_report)) report_dir = os.path.dirname(os.path.abspath(report_file))
if not os.path.exists(report_dir): if not os.path.exists(report_dir):
os.makedirs(report_dir) os.makedirs(report_dir)
tree.write(xml_report, encoding='UTF-8') tree.write(report_file, encoding='UTF-8')
def add_junit_xml_results(resultset, suite_package, suite_name, id, def append_junit_xml_results(tree, resultset, suite_package, suite_name, id):
old_tree=None): """Append a JUnit-like XML report tree with test results as a new suite."""
"""Returns a JUnit-like XML report tree with added test results.""" testsuite = ET.SubElement(tree.getroot(), 'testsuite',
root = ET.Element('testsuites') if not old_tree else old_tree.getroot() id=id, package=suite_package, name=suite_name,
testsuite = ET.SubElement(root, 'testsuite', id=id, package=suite_package, timestamp=datetime.datetime.now().isoformat())
name=suite_name)
failure_count = 0 failure_count = 0
error_count = 0 error_count = 0
for shortname, results in six.iteritems(resultset): for shortname, results in six.iteritems(resultset):
...@@ -81,7 +85,6 @@ def add_junit_xml_results(resultset, suite_package, suite_name, id, ...@@ -81,7 +85,6 @@ def add_junit_xml_results(resultset, suite_package, suite_name, id,
ET.SubElement(xml_test, 'skipped', message='Skipped') ET.SubElement(xml_test, 'skipped', message='Skipped')
testsuite.set('failures', str(failure_count)) testsuite.set('failures', str(failure_count))
testsuite.set('errors', str(error_count)) testsuite.set('errors', str(error_count))
return ET.ElementTree(root)
def render_interop_html_report( def render_interop_html_report(
client_langs, server_langs, test_cases, auth_test_cases, http2_cases, client_langs, server_langs, test_cases, auth_test_cases, http2_cases,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment