Refactor to not use QQL endpoints

This commit is contained in:
Izaac Zavaleta 2023-12-18 18:06:07 -07:00
parent 6011b5828b
commit 3dbaef4f68
1 changed files with 48 additions and 46 deletions

View File

@ -135,12 +135,15 @@ skipped_cases_ids = []
failed_cases_ids_stack = {} failed_cases_ids_stack = {}
def qase_cases(project, case_id=None): def qase_cases(project, case_id=None, suite_id=None, limit=100):
if case_id is not None: if case_id is not None:
return requests.get("{0}/{1}/{2}".format(cases_url, project, case_id), return requests.get("{0}/{1}/{2}".format(cases_url, project, case_id),
headers=qase_headers) headers=qase_headers)
elif suite_id is not None:
return requests.get("{0}/{1}?suite_id={2}&limit={3}".format(cases_url, project, suite_id, limit),
headers=qase_headers)
else: else:
return requests.get("{0}/{1}".format(cases_url, project), return requests.get("{0}/{1}?limit={2}".format(cases_url, project, limit),
headers=qase_headers) headers=qase_headers)
@ -160,15 +163,15 @@ def qase_update_case(project, payload, case_id):
return None return None
def qase_suites(project, suite_id=None, search_string=""): def qase_suites(project, suite_id=None, search_string="", limit=100):
if search_string: if search_string:
return requests.get("{0}/{1}?search={2}".format(suites_url, project, search_string), return requests.get("{0}/{1}?search={2}&limit={3}".format(suites_url, project, search_string, limit),
headers=qase_headers) headers=qase_headers)
if suite_id is not None: if suite_id is not None:
return requests.get("{0}/{1}/{2}".format(suites_url, project, suite_id), return requests.get("{0}/{1}/{2}".format(suites_url, project, suite_id),
headers=qase_headers) headers=qase_headers)
else: else:
return requests.get("{0}/{1}".format(suites_url, project), return requests.get("{0}/{1}?limit={2}".format(suites_url, project, limit),
headers=qase_headers) headers=qase_headers)
@ -216,17 +219,19 @@ def create_run_result(project, payload, run_id):
return None return None
def create_testcases_under_suite(all_cases_under_suite, suite_title_from_qase, suite_id): def create_testcases_under_suite(case_entities, suite_title_from_junit, suite_id):
""" """
Custom Fields Custom Fields
- TestSource -> 14 - TestSource -> 14
- AutomationTestName -> 15 - AutomationTestName -> 15
""" """
case_entities = all_cases_under_suite["result"]["entities"] case_titles_from_junit = results[suite_title_from_junit].keys()
case_titles_from_junit = results[suite_title_from_qase].keys() if len(case_entities) > 0:
case_titles = [subs["title"] for subs in case_entities] case_titles = [subs["title"] for subs in case_entities]
case_title_and_id = {subs["title"]: subs['id'] for subs in case_entities} case_title_and_id = {subs["title"]: subs['id'] for subs in case_entities}
case_descriptions = [subs["description"] for subs in case_entities] case_descriptions = [subs["description"] for subs in case_entities]
else:
case_titles = []
logger.debug("Titles from jUnit: {0}".format(list(case_titles_from_junit))) logger.debug("Titles from jUnit: {0}".format(list(case_titles_from_junit)))
logger.debug("Titles from Qase: {0}".format(case_titles)) logger.debug("Titles from Qase: {0}".format(case_titles))
@ -235,19 +240,19 @@ def create_testcases_under_suite(all_cases_under_suite, suite_title_from_qase, s
tc_skipped = False tc_skipped = False
if ct not in case_titles: if ct not in case_titles:
# Title ct not found add it # Title ct not found add it
logger.info("Title not found: {0}".format(ct)) logger.info("Case title not found in suite: {0}".format(ct))
# if the result from junit has a description, add it # if the result from junit has a description, add it
# This part is where the error message goes if we want it in the Test Case description # This part is where the error message goes if we want it in the Test Case description
testcase_value = results[suite_title_from_qase][ct] testcase_value = results[suite_title_from_junit][ct]
req_body = {'title': ct, req_body = {'title': ct,
'is_flaky': 0, 'is_flaky': 0,
'automation': 1, 'automation': 1,
'custom_field': { 'custom_field': {
"14": TEST_SOURCE, "14": TEST_SOURCE,
"15": "{0}/{1}".format(suite_title_from_qase, ct)}, "15": "{0}/{1}".format(suite_title_from_junit, ct)},
"suite_id": suite_id} "suite_id": suite_id}
if testcase_value and testcase_value != "skipped_test": if testcase_value and testcase_value != "skipped_test":
req_body.update({'description': results[suite_title_from_qase][ct]}) req_body.update({'description': results[suite_title_from_junit][ct]})
failed = True failed = True
if testcase_value == "skipped_test": if testcase_value == "skipped_test":
tc_skipped = True tc_skipped = True
@ -257,22 +262,22 @@ def create_testcases_under_suite(all_cases_under_suite, suite_title_from_qase, s
if tc_skipped: if tc_skipped:
skipped_cases_ids.append(id_to_add) skipped_cases_ids.append(id_to_add)
if failed: if failed:
failed_cases_ids_stack[id_to_add] = results[suite_title_from_qase][ct] failed_cases_ids_stack[id_to_add] = results[suite_title_from_junit][ct]
else: else:
logger.info("Title found: {0}".format(ct)) logger.info("Case title found: {0}".format(ct))
case_id_from_title = case_title_and_id[ct] case_id_from_title = case_title_and_id[ct]
cases_ids.append(case_id_from_title) cases_ids.append(case_id_from_title)
req_body = {"suite_id": suite_id, req_body = {"suite_id": suite_id,
"custom_field": { "custom_field": {
"14": TEST_SOURCE, "14": TEST_SOURCE,
"15": "{0}/{1}".format(suite_title_from_qase, ct) "15": "{0}/{1}".format(suite_title_from_junit, ct)
}, },
} }
logger.debug("Refresh test case id {0} " logger.debug("Refresh test case id {0} "
"to ensure it is in the correct Suite {1}". "to ensure it is in the correct Suite {1}".
format(case_id_from_title, suite_id)) format(case_id_from_title, suite_id))
qase_update_case(qase_automation_project, req_body, case_id_from_title) qase_update_case(qase_automation_project, req_body, case_id_from_title)
has_skipped_or_error = results[suite_title_from_qase][ct] has_skipped_or_error = results[suite_title_from_junit][ct]
if has_skipped_or_error: if has_skipped_or_error:
logger.info("A description or skip value exist for test case") logger.info("A description or skip value exist for test case")
if has_skipped_or_error == "skipped_test": if has_skipped_or_error == "skipped_test":
@ -280,12 +285,12 @@ def create_testcases_under_suite(all_cases_under_suite, suite_title_from_qase, s
skipped_cases_ids.append(case_id_from_title) skipped_cases_ids.append(case_id_from_title)
else: else:
logger.info("Failed ID: {0} Title: {1}".format(case_id_from_title, ct)) logger.info("Failed ID: {0} Title: {1}".format(case_id_from_title, ct))
failed_cases_ids_stack[case_id_from_title] = results[suite_title_from_qase][ct] failed_cases_ids_stack[case_id_from_title] = results[suite_title_from_junit][ct]
if results[suite_title_from_qase][ct] not in case_descriptions: if results[suite_title_from_junit][ct] not in case_descriptions:
logger.debug("A description was found that is not in Qase " logger.debug("A description was found that is not in Qase "
"in a test case with ID: {0} Title: {1}". "in a test case with ID: {0} Title: {1}".
format(case_id_from_title, ct)) format(case_id_from_title, ct))
req_body = {'description': results[suite_title_from_qase][ct]} req_body = {'description': results[suite_title_from_junit][ct]}
qase_update_case(qase_automation_project, req_body, case_id_from_title) qase_update_case(qase_automation_project, req_body, case_id_from_title)
else: else:
logger.info("There isn't a failure message from junit data, clear the description in qase") logger.info("There isn't a failure message from junit data, clear the description in qase")
@ -299,8 +304,12 @@ check_global_suite = qase_suites(qase_automation_project, search_string=global_s
logger.info(check_global_suite.text) logger.info(check_global_suite.text)
logger.info(check_global_suite.status_code) logger.info(check_global_suite.status_code)
suite_objects = check_global_suite.json()["result"]["entities"] suite_objects = check_global_suite.json()["result"]["entities"]
suite_titles = [subs["title"] for subs in suite_objects] suite_objects = sorted(suite_objects, key=lambda x: x['id'], reverse=True)
suite_title_and_id = {subs["title"]: subs['id'] for subs in suite_objects} suite_titles = [subs["title"] for subs in suite_objects
if subs["title"] == global_suite_id_name]
suite_title_and_id = {subs["title"]: subs['id']
for subs in suite_objects
if subs["title"] == global_suite_id_name}
if global_suite_id_name not in suite_titles: if global_suite_id_name not in suite_titles:
suite_post_data = {"title": global_suite_id_name} suite_post_data = {"title": global_suite_id_name}
@ -317,34 +326,27 @@ for k in list(results.keys()):
if suite_result["status"]: if suite_result["status"]:
suite_entities = suite_result["result"]["entities"] suite_entities = suite_result["result"]["entities"]
else: else:
logger.error("No suites were found") logger.error("There was an error retrieving suites")
break sys.exit(1)
suite_entities = [suite_ent for suite_ent in suite_entities
if suite_ent["title"] == k and suite_ent["cases_count"] > 0]
logger.info(suite_entities)
if len(suite_entities) < 1: if len(suite_entities) < 1:
suite_data = {"title": k, "parent_id": global_suite_id} suite_data = {"title": k, "parent_id": global_suite_id}
r = qase_add_suite(qase_automation_project, suite_data) r = qase_add_suite(qase_automation_project, suite_data)
suiteid = r.json()["result"]["id"] suiteid = r.json()["result"]["id"]
logger.debug("Search query of suite not found: entity = \"{0}\" and project = \"{1}\" and suite = \"{2}\"". create_testcases_under_suite([], k, suiteid)
format("case", qase_automation_project, k))
cases = qase_search_qql({"query": " entity = \"{0}\" and project = \"{1}\" and suite = \"{2}\"".
format("case", qase_automation_project, k)})
cases_qql_results = cases.json()
create_testcases_under_suite(cases_qql_results, k, suiteid)
else: else:
logger.debug("Search query of suite found: entity = \"{0}\" and project = \"{1}\" and suite = \"{2}\"".
format("case", qase_automation_project, k))
cases_qql = qase_search_qql({"query": " entity = \"{0}\" and project = \"{1}\" and suite = \"{2}\"".
format("case", qase_automation_project, k)})
suiteid = None suiteid = None
for st in suite_entities: suite_entities = sorted(suite_entities, key=lambda x: x['id'])
if st["title"] == k: if suite_entities[0]:
suiteid = st["id"] suiteid = suite_entities[0]["id"]
break if suiteid == None:
logger.error("There was an error getting a suite id")
cases_qql_results = cases_qql.json() sys.exit(1)
logger.debug(cases_qql_results) suite_cases = qase_cases(qase_automation_project, suite_id=suiteid)
create_testcases_under_suite(cases_qql_results, k, suiteid) cases_entities = suite_cases.json()["result"]["entities"]
create_testcases_under_suite(cases_entities, k, suiteid)
formatted_date = "{0}".format(datetime.datetime.now().strftime("%m-%d-%y/%H-%M-%S")) formatted_date = "{0}".format(datetime.datetime.now().strftime("%m-%d-%y/%H-%M-%S"))