aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2017-06-06 23:08:07 +0200
committerNeels Hofmeyr <nhofmeyr@sysmocom.de>2017-06-12 11:34:44 +0000
commitf8e61864065aba72e0e8df7438e28e4127a77f5a (patch)
treee66c958cd8bfb6cba993dea8dacda57f36e7e00c
parentdaf96e449e48ab43fa452d49d3d2d9e7a14e2840 (diff)
junit result: also write for aborted runs
Even if aborted due to signal, write a JUnit report XML, and make sure to indicate the runs as erratic. Change-Id: I7a334ef3463896c543c0fe592d3903c15e67d4c4
-rw-r--r--src/osmo_gsm_tester/report.py8
-rw-r--r--src/osmo_gsm_tester/suite.py2
-rw-r--r--src/osmo_gsm_tester/trial.py32
3 files changed, 25 insertions, 17 deletions
diff --git a/src/osmo_gsm_tester/report.py b/src/osmo_gsm_tester/report.py
index ae63408..82b2f13 100644
--- a/src/osmo_gsm_tester/report.py
+++ b/src/osmo_gsm_tester/report.py
@@ -38,8 +38,9 @@ def suite_to_junit(suite):
testsuite = et.Element('testsuite')
testsuite.set('name', suite.name())
testsuite.set('hostname', 'localhost')
- testsuite.set('timestamp', datetime.fromtimestamp(round(suite.start_timestamp)).isoformat())
- testsuite.set('time', str(math.ceil(suite.duration)))
+ if suite.start_timestamp:
+ testsuite.set('timestamp', datetime.fromtimestamp(round(suite.start_timestamp)).isoformat())
+ testsuite.set('time', str(math.ceil(suite.duration)))
testsuite.set('tests', str(len(suite.tests)))
testsuite.set('failures', str(suite.count_test_results()[2]))
for test in suite.tests:
@@ -60,6 +61,9 @@ def test_to_junit(test):
if test.fail_tb:
system_err = et.SubElement(testcase, 'system-err')
system_err.text = test.fail_tb
+ elif test.status != suite.Test.PASS:
+ error = et.SubElement(testcase, 'error')
+ error.text = 'could not run'
return testcase
def trial_to_text(trial):
diff --git a/src/osmo_gsm_tester/suite.py b/src/osmo_gsm_tester/suite.py
index 0dd8790..55f81b1 100644
--- a/src/osmo_gsm_tester/suite.py
+++ b/src/osmo_gsm_tester/suite.py
@@ -161,6 +161,8 @@ class SuiteRun(log.Origin):
trial = None
status = None
+ start_timestamp = None
+ duration = None
resources_pool = None
reserved_resources = None
objects_to_clean_up = None
diff --git a/src/osmo_gsm_tester/trial.py b/src/osmo_gsm_tester/trial.py
index 11f8a15..741f3a7 100644
--- a/src/osmo_gsm_tester/trial.py
+++ b/src/osmo_gsm_tester/trial.py
@@ -188,21 +188,23 @@ class Trial(log.Origin):
def run_suites(self, names=None):
self.status = Trial.UNKNOWN
- for suite_run in self.suites:
- try:
- suite_run.run_tests(names)
- except BaseException as e:
- # when the program is aborted by a signal (like Ctrl-C), escalate to abort all.
- self.err('TRIAL RUN ABORTED: %s' % type(e).__name__)
- raise
- finally:
- if suite_run.status != suite.SuiteRun.PASS:
- self.status = Trial.FAIL
- if self.status == Trial.UNKNOWN:
- self.status = Trial.PASS
- junit_path = self.get_run_dir().new_file(self.name()+'.xml')
- self.log('Storing JUnit report in', junit_path)
- report.trial_to_junit_write(self, junit_path)
+ try:
+ for suite_run in self.suites:
+ try:
+ suite_run.run_tests(names)
+ except BaseException as e:
+ # when the program is aborted by a signal (like Ctrl-C), escalate to abort all.
+ self.err('TRIAL RUN ABORTED: %s' % type(e).__name__)
+ raise
+ finally:
+ if suite_run.status != suite.SuiteRun.PASS:
+ self.status = Trial.FAIL
+ if self.status == Trial.UNKNOWN:
+ self.status = Trial.PASS
+ finally:
+ junit_path = self.get_run_dir().new_file(self.name()+'.xml')
+ self.log('Storing JUnit report in', junit_path)
+ report.trial_to_junit_write(self, junit_path)
def log_report(self):
log.large_separator(self.name(), self.status)