Improve junit xml generated fields
* trial ('testsuites' node): Add fields 'tests', 'errors', 'failures',
'time'.
* testsuite: Add fields 'errors', 'failures', 'skipped',
'disabled'
* test: Add field 'classname' (empty).
Fix and improve suite.py and test.py to count errors, skipped, failures
properly.
Change-Id: Ie2d10cee88a9c0d829e4620553164cf3150e8e5c
diff --git a/src/osmo_gsm_tester/report.py b/src/osmo_gsm_tester/report.py
index 5d23c38..f781695 100644
--- a/src/osmo_gsm_tester/report.py
+++ b/src/osmo_gsm_tester/report.py
@@ -17,6 +17,8 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# junit xml format: https://llg.cubic.org/docs/junit/
+
import math
import sys
import re
@@ -50,9 +52,24 @@
def trial_to_junit(trial):
testsuites = et.Element('testsuites')
+ num_tests = 0
+ num_failures = 0
+ num_errors = 0
+ time = 0
+ id = 0
for suite in trial.suites:
testsuite = suite_to_junit(suite)
+ testsuite.set('id', str(id))
+ id += 1
testsuites.append(testsuite)
+ num_tests += int(testsuite.get('tests'))
+ num_failures += int(testsuite.get('failures'))
+ num_errors += int(testsuite.get('errors'))
+ time += suite.duration
+ testsuites.set('tests', str(num_tests))
+ testsuites.set('errors', str(num_errors))
+ testsuites.set('failures', str(num_failures))
+ testsuites.set('time', str(math.ceil(time)))
return testsuites
def suite_to_junit(suite):
@@ -63,9 +80,14 @@
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]))
+ passed, skipped, failed, errors = suite.count_test_results()
+ testsuite.set('errors', str(errors))
+ testsuite.set('failures', str(failed))
+ testsuite.set('skipped', str(skipped))
+ testsuite.set('disabled', str(skipped))
for suite_test in suite.tests:
testcase = test_to_junit(suite_test)
+ testcase.set('classname', suite.name())
testsuite.append(testcase)
return testsuite
@@ -113,10 +135,12 @@
if not suite.tests:
return 'no tests were run.'
- passed, skipped, failed = suite.count_test_results()
+ passed, skipped, failed, errors = suite.count_test_results()
details = []
if failed:
details.append('fail: %d' % failed)
+ if errors:
+ details.append('errors: %d' % errors)
if passed:
details.append('pass: %d' % passed)
if skipped: