#!/usr/bin/env python3 import os import logging import argparse import csv import json def process_result(result_folder): json_path = os.path.join(result_folder, "results.json") if not os.path.exists(json_path): return "success", "No testflows in branch", None, [] test_binary_log = os.path.join(result_folder, "test.log") with open(json_path) as source: results = json.loads(source.read()) total_tests = 0 total_ok = 0 total_fail = 0 total_other = 0 test_results = [] for test in results["tests"]: test_name = test["test"]["test_name"] test_result = test["result"]["result_type"].upper() test_time = str(test["result"]["message_rtime"]) total_tests += 1 if test_result == "OK": total_ok += 1 elif test_result == "FAIL" or test_result == "ERROR": total_fail += 1 else: total_other += 1 test_results.append((test_name, test_result, test_time)) if total_fail != 0: status = "failure" else: status = "success" description = "failed: {}, passed: {}, other: {}".format( total_fail, total_ok, total_other ) return status, description, test_results, [json_path, test_binary_log] def write_results(results_file, status_file, results, status): with open(results_file, "w") as f: out = csv.writer(f, delimiter="\t") out.writerows(results) with open(status_file, "w") as f: out = csv.writer(f, delimiter="\t") out.writerow(status) if __name__ == "__main__": logging.basicConfig(level=logging.INFO, format="%(asctime)s %(message)s") parser = argparse.ArgumentParser( description="ClickHouse script for parsing results of Testflows tests" ) parser.add_argument("--in-results-dir", default="./") parser.add_argument("--out-results-file", default="./test_results.tsv") parser.add_argument("--out-status-file", default="./check_status.tsv") args = parser.parse_args() state, description, test_results, logs = process_result(args.in_results_dir) logging.info("Result parsed") status = (state, description) write_results(args.out_results_file, args.out_status_file, test_results, status) logging.info("Result written")