<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/17387">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Improve junit xml generated fields<br><br>Change-Id: Ie2d10cee88a9c0d829e4620553164cf3150e8e5c<br>---<br>M src/osmo_gsm_tester/report.py<br>M src/osmo_gsm_tester/suite.py<br>M src/osmo_gsm_tester/test.py<br>3 files changed, 36 insertions(+), 9 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-tester refs/changes/87/17387/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo_gsm_tester/report.py b/src/osmo_gsm_tester/report.py</span><br><span>index 5d23c38..d33ba43 100644</span><br><span>--- a/src/osmo_gsm_tester/report.py</span><br><span>+++ b/src/osmo_gsm_tester/report.py</span><br><span>@@ -17,6 +17,8 @@</span><br><span> # You should have received a copy of the GNU General Public License</span><br><span> # along with this program. If not, see <http://www.gnu.org/licenses/>.</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# junit xml format: https://llg.cubic.org/docs/junit/</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> import math</span><br><span> import sys</span><br><span> import re</span><br><span>@@ -50,9 +52,24 @@</span><br><span> </span><br><span> def trial_to_junit(trial):</span><br><span> testsuites = et.Element('testsuites')</span><br><span style="color: hsl(120, 100%, 40%);">+ num_tests = 0</span><br><span style="color: hsl(120, 100%, 40%);">+ num_failures = 0</span><br><span style="color: hsl(120, 100%, 40%);">+ num_errors = 0</span><br><span style="color: hsl(120, 100%, 40%);">+ time = 0</span><br><span style="color: hsl(120, 100%, 40%);">+ id = 0</span><br><span> for suite in trial.suites:</span><br><span> testsuite = suite_to_junit(suite)</span><br><span style="color: hsl(120, 100%, 40%);">+ testsuite.set('id', str(id))</span><br><span style="color: hsl(120, 100%, 40%);">+ id += 1</span><br><span> testsuites.append(testsuite)</span><br><span style="color: hsl(120, 100%, 40%);">+ num_tests += int(testsuite.get('tests'))</span><br><span style="color: hsl(120, 100%, 40%);">+ num_failures += int(testsuite.get('failures'))</span><br><span style="color: hsl(120, 100%, 40%);">+ num_errors += int(testsuite.get('errors'))</span><br><span style="color: hsl(120, 100%, 40%);">+ time += suite.duration</span><br><span style="color: hsl(120, 100%, 40%);">+ testsuites.set('tests', str(num_tests))</span><br><span style="color: hsl(120, 100%, 40%);">+ testsuites.set('errors', str(num_errors))</span><br><span style="color: hsl(120, 100%, 40%);">+ testsuites.set('failures', str(num_failures))</span><br><span style="color: hsl(120, 100%, 40%);">+ testsuites.set('time', str(math.ceil(time)))</span><br><span> return testsuites</span><br><span> </span><br><span> def suite_to_junit(suite):</span><br><span>@@ -63,7 +80,11 @@</span><br><span> testsuite.set('timestamp', datetime.fromtimestamp(round(suite.start_timestamp)).isoformat())</span><br><span> testsuite.set('time', str(math.ceil(suite.duration)))</span><br><span> testsuite.set('tests', str(len(suite.tests)))</span><br><span style="color: hsl(0, 100%, 40%);">- testsuite.set('failures', str(suite.count_test_results()[2]))</span><br><span style="color: hsl(120, 100%, 40%);">+ passed, skipped, failed, errors = suite.count_test_results()</span><br><span style="color: hsl(120, 100%, 40%);">+ testsuite.set('errors', str(errors))</span><br><span style="color: hsl(120, 100%, 40%);">+ testsuite.set('failures', str(failed))</span><br><span style="color: hsl(120, 100%, 40%);">+ testsuite.set('skipped', str(skipped))</span><br><span style="color: hsl(120, 100%, 40%);">+ testsuite.set('disabled', str(skipped))</span><br><span> for suite_test in suite.tests:</span><br><span> testcase = test_to_junit(suite_test)</span><br><span> testsuite.append(testcase)</span><br><span>@@ -72,6 +93,7 @@</span><br><span> def test_to_junit(t):</span><br><span> testcase = et.Element('testcase')</span><br><span> testcase.set('name', t.name())</span><br><span style="color: hsl(120, 100%, 40%);">+ testcase.set('classname', '')</span><br><span> testcase.set('time', str(math.ceil(t.duration)))</span><br><span> if t.status == test.Test.SKIP:</span><br><span> et.SubElement(testcase, 'skipped')</span><br><span>@@ -113,10 +135,12 @@</span><br><span> if not suite.tests:</span><br><span> return 'no tests were run.'</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- passed, skipped, failed = suite.count_test_results()</span><br><span style="color: hsl(120, 100%, 40%);">+ passed, skipped, failed, errors = suite.count_test_results()</span><br><span> details = []</span><br><span> if failed:</span><br><span> details.append('fail: %d' % failed)</span><br><span style="color: hsl(120, 100%, 40%);">+ if errors:</span><br><span style="color: hsl(120, 100%, 40%);">+ details.append('errors: %d' % errors)</span><br><span> if passed:</span><br><span> details.append('pass: %d' % passed)</span><br><span> if skipped:</span><br><span>diff --git a/src/osmo_gsm_tester/suite.py b/src/osmo_gsm_tester/suite.py</span><br><span>index c2faa36..8c79d35 100644</span><br><span>--- a/src/osmo_gsm_tester/suite.py</span><br><span>+++ b/src/osmo_gsm_tester/suite.py</span><br><span>@@ -213,9 +213,9 @@</span><br><span> util.import_path_remove(suite_libdir)</span><br><span> self.duration = time.time() - self.start_timestamp</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- passed, skipped, failed = self.count_test_results()</span><br><span style="color: hsl(120, 100%, 40%);">+ passed, skipped, failed, errors = self.count_test_results()</span><br><span> # if no tests ran, count it as failure</span><br><span style="color: hsl(0, 100%, 40%);">- if passed and not failed:</span><br><span style="color: hsl(120, 100%, 40%);">+ if passed and not failed and not errors:</span><br><span> self.status = SuiteRun.PASS</span><br><span> else:</span><br><span> self.status = SuiteRun.FAIL</span><br><span>@@ -229,14 +229,17 @@</span><br><span> passed = 0</span><br><span> skipped = 0</span><br><span> failed = 0</span><br><span style="color: hsl(120, 100%, 40%);">+ errors = 0</span><br><span> for t in self.tests:</span><br><span style="color: hsl(0, 100%, 40%);">- if t.status == test.Test.PASS:</span><br><span style="color: hsl(120, 100%, 40%);">+ if t.status == test.Test.SKIP:</span><br><span style="color: hsl(120, 100%, 40%);">+ skipped += 1</span><br><span style="color: hsl(120, 100%, 40%);">+ elif t.status == test.Test.PASS:</span><br><span> passed += 1</span><br><span> elif t.status == test.Test.FAIL:</span><br><span> failed += 1</span><br><span style="color: hsl(0, 100%, 40%);">- else:</span><br><span style="color: hsl(0, 100%, 40%);">- skipped += 1</span><br><span style="color: hsl(0, 100%, 40%);">- return (passed, skipped, failed)</span><br><span style="color: hsl(120, 100%, 40%);">+ else: # error, could not run</span><br><span style="color: hsl(120, 100%, 40%);">+ errors += 1</span><br><span style="color: hsl(120, 100%, 40%);">+ return (passed, skipped, failed, errors)</span><br><span> </span><br><span> def remember_to_stop(self, process, respawn=False):</span><br><span> '''Ask suite to monitor and manage lifecycle of the Process object. If a</span><br><span>diff --git a/src/osmo_gsm_tester/test.py b/src/osmo_gsm_tester/test.py</span><br><span>index be6e8da..0bbff41 100644</span><br><span>--- a/src/osmo_gsm_tester/test.py</span><br><span>+++ b/src/osmo_gsm_tester/test.py</span><br><span>@@ -26,7 +26,7 @@</span><br><span> from . import log, util, resource</span><br><span> </span><br><span> class Test(log.Origin):</span><br><span style="color: hsl(0, 100%, 40%);">- UNKNOWN = 'UNKNOWN'</span><br><span style="color: hsl(120, 100%, 40%);">+ UNKNOWN = 'UNKNOWN' # matches junit 'error'</span><br><span> SKIP = 'skip'</span><br><span> PASS = 'pass'</span><br><span> FAIL = 'FAIL'</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/17387">change 17387</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/17387"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-gsm-tester </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ie2d10cee88a9c0d829e4620553164cf3150e8e5c </div>
<div style="display:none"> Gerrit-Change-Number: 17387 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>