examples/python/combine_pytest_reports.py

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--build',      help="Build ID received from Jenkins", default='local')
    args = parser.parse_args()

    style = '''
    <style>
    .passed {
        background-color: #34eb93;
    }
    .failed {
        background-color: #eb4f34;
    }
    </style>
    '''

    errors_html = ""

    detailed_html = ""
    detailed_html += '<h2>Detailed report</h2>\n'
    detailed_html += '<table id="results">\n'
    files = glob.glob(f'reports/*-{args.build}.json')
    for json_file in files:
        try:
            with open(json_file) as fh:
                report = json.load(fh)
            for test in report['tests']:
                if test['outcome'] != 'passed':
                    errors_html += f"{test['outcome']} in {test['nodeid']}<b>"
                    if 'call' in test and 'longrepr' in test['call']:
                        errors_html += f"<pre>{test['call']['longrepr']}</pre>"
                    errors_html += "<p>\n"

                detailed_html += f"""<tr><td>{test['nodeid']}</td><td class="{test['outcome']}">{test['outcome']}</td></tr>\n"""
        except Exception:
            print("Exception")
    detailed_html += '</table>'

    if errors_html:
        errors_html = "<h2>Errors</h2>\n" + errors_html


    html = style + errors_html + detailed_html
    print(html)

main()