From a2af730894adde51a69eae4e1a5e6a644fdc2097 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois?= Date: Sat, 14 Feb 2026 12:02:02 +0100 Subject: [PATCH] fixed html reporting issue in validation suite. --- .../test_items/test_item_report.py | 6 +- .../test_report/report_export_html.py | 67 ++++++++++--------- 2 files changed, 41 insertions(+), 32 deletions(-) diff --git a/src/testium/interpreter/test_items/test_item_report.py b/src/testium/interpreter/test_items/test_item_report.py index e30ccee..8e0a585 100644 --- a/src/testium/interpreter/test_items/test_item_report.py +++ b/src/testium/interpreter/test_items/test_item_report.py @@ -36,6 +36,10 @@ class TestItemReport(TestItem): success = TestValue.SUCCESS for rep in reports: - rep.exec(self.report.db_connection, rep_name, no_header=True) + try: + rep.exec(self.report.db_connection, rep_name, no_header=True) + except Exception as e: + print(f"Error reporting '{rep.type}': {e}") + self.result.set(success) diff --git a/src/testium/interpreter/test_report/report_export_html.py b/src/testium/interpreter/test_report/report_export_html.py index 93dd2cd..936ba66 100644 --- a/src/testium/interpreter/test_report/report_export_html.py +++ b/src/testium/interpreter/test_report/report_export_html.py @@ -1,5 +1,6 @@ -from lxml import (etree, html) +import lxml +import html import interpreter.test_report.report_export as rpe import interpreter.test_report.test_report as tr import interpreter.utils.constants as cst @@ -13,60 +14,64 @@ class ReportExportHTML(rpe.ReportExport): self.create_base() self.process_tests() with open(self._file_name, 'w') as f: - f.write(html.tostring(self.root, pretty_print=True).decode()) + f.write(lxml.html.tostring(self.root, pretty_print=True).decode()) def testsIterate(self, row): super().testsIterate(row) rdata = self.extract_info(row) - trow = etree.SubElement(self.table, 'tr') - for r in self.ROW_TEXTS: - rh = etree.SubElement(trow, 'td') - if r[self.KEY_INDEX] == self.KEY_DURATION: - rh.text = '{:.4f}'.format(rdata[r[self.KEY_INDEX]]) - else: - rh.text = rdata[r[self.KEY_INDEX]] + trow = lxml.etree.SubElement(self.table, 'tr') + try: + for r in self.ROW_TEXTS: + rh = lxml.etree.SubElement(trow, 'td') + if r[self.KEY_INDEX] == self.KEY_DURATION: + rh.text = '{:.4f}'.format(rdata[r[self.KEY_INDEX]]) + else: + rh.text = rdata[r[self.KEY_INDEX]] + + if rdata[self.KEY_LOG] != '': + h2 = lxml.etree.SubElement(self.logsection, 'h3') + h2.text = rdata[self.KEY_TITLE] + for l in rdata[self.KEY_LOG].splitlines(): + p = lxml.etree.SubElement(self.logsection, 'p') + p.text = html.escape(l) + except ValueError as e: + print(f"Error reporting html: {e}") - if rdata[self.KEY_LOG] != '': - h2 = etree.SubElement(self.logsection, 'h3') - h2.text = rdata[self.KEY_TITLE] - for l in rdata[self.KEY_LOG].splitlines(): - p = etree.SubElement(self.logsection, 'p') - p.text = l def create_base(self): repname = self.header[cst.DB_TEST_SET_NAME] if self.name != '': repname = self.name - self.root = etree.Element('html', lang='en') - head = etree.SubElement(self.root, 'head') - title = etree.SubElement(head, 'title') + self.root = lxml.etree.Element('html', lang='en') + head = lxml.etree.SubElement(self.root, 'head') + title = lxml.etree.SubElement(head, 'title') title.text = repname - self.body = etree.SubElement(self.root, 'body') - h1 = etree.SubElement(self.body, 'h1') + self.body = lxml.etree.SubElement(self.root, 'body') + h1 = lxml.etree.SubElement(self.body, 'h1') h1.text = repname - div = etree.SubElement(self.body, 'div') - h2 = etree.SubElement(div, 'h2') + div = lxml.etree.SubElement(self.body, 'div') + h2 = lxml.etree.SubElement(div, 'h2') h2.text = 'Test conditions' for k in self.HEADER_TEXTS.keys(): if k in self.header.keys(): - h = etree.SubElement(div, 'h3') + h = lxml.etree.SubElement(div, 'h3') h.text = self.HEADER_TEXTS[k] - p = etree.SubElement(div, 'p') + p = lxml.etree.SubElement(div, 'p') p.text = self.header[k] - div = etree.SubElement(self.body, 'div') - h2 = etree.SubElement(div, 'h2') + div = lxml.etree.SubElement(self.body, 'div') + h2 = lxml.etree.SubElement(div, 'h2') h2.text = 'Test results' - self.table = etree.SubElement(self.body, 'table') - row = etree.SubElement(self.table, 'tr') + self.table = lxml.etree.SubElement(self.body, 'table') + row = lxml.etree.SubElement(self.table, 'tr') for r in self.ROW_TEXTS: - rh = etree.SubElement(row, 'th') + rh = lxml.etree.SubElement(row, 'th') rh.text = r[self.TEXT_INDEX] - self.logsection = etree.SubElement(self.body, 'div') - h2 = etree.SubElement(self.logsection, 'h2') + self.logsection = lxml.etree.SubElement(self.body, 'div') + h2 = lxml.etree.SubElement(self.logsection, 'h2') h2.text = 'Logs'