def compare(self, uuid1=None, uuid2=None, output_file=None, output_csv=None, output_html=None, output_json=None, threshold=0): """Compare two verification results. :param uuid1: First Verification UUID :param uuid2: Second Verification UUID :param output_file: If specified, output will be saved to given file :param output_csv: Save results in csv format to the specified file :param output_html: Save results in html format to the specified file :param output_json: Save results in json format to the specified file (Default) :param threshold: Timing difference threshold percentage """ try: results1 = db.verification_result_get(uuid1)["data"]["test_cases"] results2 = db.verification_result_get(uuid2)["data"]["test_cases"] _diff = diff.Diff(results1, results2, threshold) except exceptions.NotFoundException as e: print(six.text_type(e)) return 1 result = "" if output_json + output_html + output_csv > 1: print("Please specify only one output format, either --json, " "--html or --csv.") return 1 elif output_html: result = _diff.to_html() elif output_csv: result = _diff.to_csv() else: result = _diff.to_json() if output_file: with open(output_file, "wb") as f: if output_csv: writer = csv.writer(f, dialect="excel") writer.writerows(result) else: f.write(result) else: print(result)
def results(self, verification_uuid=None, output_file=None, output_html=None, output_json=None): """Get raw results of the verification. :param verification_uuid: Verification UUID :param output_file: If specified, output will be saved to given file :param output_html: The output will be in HTML format :param output_json: The output will be in JSON format (Default) """ try: results = db.verification_result_get(verification_uuid)["data"] except exceptions.NotFoundException as e: print(six.text_type(e)) return 1 result = "" if output_json + output_html > 1: print("Please specify only one output format.") elif output_html: result = json2html.HtmlOutput(results).create_report() else: result = json.dumps(results, sort_keys=True, indent=4) if output_file: output_file = os.path.expanduser(output_file) with open(output_file, "wb") as f: f.write(result) else: print(result)
def test_verification_result_create_and_get(self): verification = self._create_verification() db_verification = db.verification_get(verification["uuid"]) ver_result1 = db.verification_result_create( db_verification["uuid"], {}) ver_result2 = db.verification_result_get(db_verification["uuid"]) self.assertEqual(ver_result1["verification_uuid"], ver_result2["verification_uuid"])
def test_verification_result_create_and_get(self): verification = self._create_verification() db_verification = db.verification_get(verification["uuid"]) ver_result1 = db.verification_result_create(db_verification["uuid"], {}) ver_result2 = db.verification_result_get(db_verification["uuid"]) self.assertEqual(ver_result1["verification_uuid"], ver_result2["verification_uuid"])
def get_verification_results(verification_uuid): detailed = flask.request.args.get('detailed', False) and True verification = db.verification_get(verification_uuid) results = db.verification_result_get(verification_uuid)['data'] if detailed: return flask.jsonify(results) else: return flask.jsonify(verification._as_dict())
def show(self, verification_uuid=None, sort_by="name", detailed=False): """Display results table of the verification.""" try: sortby_index = ("name", "duration").index(sort_by) except ValueError: print("Sorry, but verification results can't be sorted " "by '%s'." % sort_by) return 1 try: verification = db.verification_get(verification_uuid) tests = db.verification_result_get(verification_uuid) except exceptions.NotFoundException as e: print(six.text_type(e)) return 1 print("Total results of verification:\n") total_fields = [ "UUID", "Deployment UUID", "Set name", "Tests", "Failures", "Created at", "Status" ] cliutils.print_list([verification], fields=total_fields) print("\nTests:\n") fields = ["name", "time", "status"] values = [ objects.Verification(test) for test in six.itervalues(tests.data["test_cases"]) ] cliutils.print_list(values, fields, sortby_index=sortby_index) if detailed: for test in six.itervalues(tests.data["test_cases"]): if test["status"] == "FAIL": header = cliutils.make_header( "FAIL: %(name)s\n" "Time: %(time)s\n" "Type: %(type)s" % { "name": test["name"], "time": test["time"], "type": test["failure"]["type"] }) formatted_test = "%(header)s%(log)s\n" % { "header": header, "log": test["failure"]["log"] } print(formatted_test)
def get_verification_report(verification_uuid): report_format = flask.request.args.get('report_format', 'html') results = db.verification_result_get(verification_uuid)["data"] output_file = "tempest_{0}.{1}".format(verification_uuid, report_format) if report_format == 'json': result = json.dumps(results, sort_keys=True, indent=4) else: result = json2html.HtmlOutput(results).create_report() with open(os.path.join(WORKDIR, output_file), "wb") as f: f.write(result) return flask.send_from_directory( WORKDIR, output_file, mimetype="application/octet-stream")
def show(self, verification_uuid=None, sort_by="name", detailed=False): """Display results table of the verification.""" try: sortby_index = ("name", "duration").index(sort_by) except ValueError: print("Sorry, but verification results can't be sorted " "by '%s'." % sort_by) return 1 try: verification = db.verification_get(verification_uuid) tests = db.verification_result_get(verification_uuid) except exceptions.NotFoundException as e: print(six.text_type(e)) return 1 print ("Total results of verification:\n") total_fields = ["UUID", "Deployment UUID", "Set name", "Tests", "Failures", "Created at", "Status"] cliutils.print_list([verification], fields=total_fields) print ("\nTests:\n") fields = ["name", "time", "status"] values = [objects.Verification(test) for test in six.itervalues(tests.data["test_cases"])] cliutils.print_list(values, fields, sortby_index=sortby_index) if detailed: for test in six.itervalues(tests.data["test_cases"]): if test["status"] == "FAIL": header = cliutils.make_header( "FAIL: %(name)s\n" "Time: %(time)s\n" "Type: %(type)s" % {"name": test["name"], "time": test["time"], "type": test["failure"]["type"]}) formatted_test = "%(header)s%(log)s\n" % { "header": header, "log": test["failure"]["log"]} print (formatted_test)
def get_results(self): try: results = db.verification_result_get(self.uuid)["data"] except exceptions.NotFoundException: return None if "errors" in results: # NOTE(andreykurilin): there is no "error" status in verification # and this key presents only in old format, so it can be used as # an identifier for old format. for test in results["test_cases"].keys(): old_status = results["test_cases"][test]["status"] new_status = _MAP_OLD_TO_NEW_STATUSES.get(old_status, old_status.lower()) results["test_cases"][test]["status"] = new_status if "failure" in results["test_cases"][test]: results["test_cases"][test]["traceback"] = results[ "test_cases"][test]["failure"]["log"] results["test_cases"][test].pop("failure") results["unexpected_success"] = 0 results["expected_failures"] = 0 return results
def get_results(self): try: return db.verification_result_get(self.uuid) except exceptions.NotFoundException: return None