blob: ae7116660398f3735d777d8bd576812c735678a6 [file] [log] [blame]
Ilya Menkovad234032019-10-22 13:43:54 +04001import config
stavrovska28772bc2024-05-22 09:33:50 +02002from testrail import APIClient
Ilya Menkovad234032019-10-22 13:43:54 +04003
4
5class Base:
6 def __init__(self):
7 self.client = APIClient(config.URL)
8 self.client.user = config.USER
9 self.client.password = config.PASSWORD
10 self.project = self._get_project(config.PROJECT)
11
12 def _get_project(self, project_name):
stavrovska28772bc2024-05-22 09:33:50 +020013 projects_uri = "get_projects"
14 projects = self.client.send_get(uri=projects_uri)["projects"]
Ilya Menkovad234032019-10-22 13:43:54 +040015 for project in projects:
stavrovska28772bc2024-05-22 09:33:50 +020016 if project["name"] == project_name:
Ilya Menkovad234032019-10-22 13:43:54 +040017 return project
18 return None
19
20 def send_post_add_result(self, some_id, bug, status_id, add_result):
stavrovska28772bc2024-05-22 09:33:50 +020021 add_result["status_id"] = status_id
22 add_result["custom_launchpad_bug"] = bug
23 send_add_result = "add_result/" + str(some_id)
Ilya Menkovad234032019-10-22 13:43:54 +040024 return self.client.send_post(send_add_result, add_result)
25
26 def get_plans(self, project_id): # !
stavrovska28772bc2024-05-22 09:33:50 +020027 return self.client.send_get("get_plans/{0}".format(project_id))
Ilya Menkovad234032019-10-22 13:43:54 +040028
29 def get_plan(self, plan_id): # !
stavrovska28772bc2024-05-22 09:33:50 +020030 return self.client.send_get("get_plan/{0}".format(plan_id))
Ilya Menkovad234032019-10-22 13:43:54 +040031
32 def is_test_plan_exist(self, test_plan_name):
stavrovska28772bc2024-05-22 09:33:50 +020033 runs = self.get_plans(self.project["id"])
34 if True in map(lambda item: item["name"] == test_plan_name, runs):
Ilya Menkovad234032019-10-22 13:43:54 +040035 return True
36 return False
37
38 def get_tests(self, plan_id): # !
stavrovska28772bc2024-05-22 09:33:50 +020039 return self.client.send_get("get_tests/{0}".format(plan_id))
Ilya Menkovad234032019-10-22 13:43:54 +040040
41 def get_test_runs(self, plan_id, pattern=None):
42 plans_runs = self.get_plan(plan_id) # !get_plans
43 runs = []
stavrovska28772bc2024-05-22 09:33:50 +020044 for run in plans_runs["entries"]:
Ilya Menkovad234032019-10-22 13:43:54 +040045 if pattern:
stavrovska28772bc2024-05-22 09:33:50 +020046 if pattern in run["name"]:
Ilya Menkovad234032019-10-22 13:43:54 +040047 runs.append(run)
48 else:
49 runs.append(run)
50 return runs
51
52 def get_tempest_runs(self, plan_id):
53 runs = self.get_plan(plan_id) # !get_plans
54 tempest_runs = []
stavrovska28772bc2024-05-22 09:33:50 +020055 for run in runs["entries"]:
56 if "Tempest" in run["name"]:
Ilya Menkovad234032019-10-22 13:43:54 +040057 tempest_runs.append(run)
58 return tempest_runs
59
60 def get_id_of_failed_tests(self, run_id): # !
61 all_tests = self.get_tests(run_id)
62 test_ids = []
63 for test in all_tests:
stavrovska28772bc2024-05-22 09:33:50 +020064 if test["status_id"] == 5:
65 test_ids.append(test["id"])
Ilya Menkovad234032019-10-22 13:43:54 +040066 return test_ids
67
68 def get_test_result(self, test_id):
stavrovska28772bc2024-05-22 09:33:50 +020069 return self.client.send_get("get_results/{0}".format(test_id))
Ilya Menkovad234032019-10-22 13:43:54 +040070
71 def get_test_results_for_run(self, run_id):
stavrovska28772bc2024-05-22 09:33:50 +020072 return self.client.send_get("get_results_for_run/{0}".format(run_id))
Ilya Menkovad234032019-10-22 13:43:54 +040073
74 def get_results_for_case(self, run_id, case_id):
stavrovska28772bc2024-05-22 09:33:50 +020075 return self.client.send_get(
76 "get_results_for_case/{0}/{1}".format(run_id, case_id)
77 )
Ilya Menkovad234032019-10-22 13:43:54 +040078
79 def get_test(self, test_id):
stavrovska28772bc2024-05-22 09:33:50 +020080 return self.client.send_get("get_test/{0}".format(test_id))
Ilya Menkovad234032019-10-22 13:43:54 +040081
82 def get_runs(self, run_id):
stavrovska28772bc2024-05-22 09:33:50 +020083 return self.client.send_get("get_runs/{0}".format(run_id))
Ilya Menkovad234032019-10-22 13:43:54 +040084
85 def get_run(self, run_id):
stavrovska28772bc2024-05-22 09:33:50 +020086 return self.client.send_get("get_run/{0}".format(run_id))
Ilya Menkovad234032019-10-22 13:43:54 +040087
88 def get_milestones(self):
stavrovska28772bc2024-05-22 09:33:50 +020089 milestones_uri = "get_milestones/{project_id}".format(
90 project_id=self.project["id"]
91 )
92 return self.client.send_get(uri=milestones_uri)["milestones"]
Ilya Menkovad234032019-10-22 13:43:54 +040093
94 def get_milestone(self, milestone_id):
stavrovska28772bc2024-05-22 09:33:50 +020095 milestone_uri = "get_milestone/{milestone_id}".format(
96 milestone_id=milestone_id
97 )
Ilya Menkovad234032019-10-22 13:43:54 +040098 return self.client.send_get(uri=milestone_uri)
99
100 def get_milestone_by_name(self, name):
101 for milestone in self.get_milestones():
stavrovska28772bc2024-05-22 09:33:50 +0200102 if milestone["name"] == name:
103 return self.get_milestone(milestone_id=milestone["id"])
Ilya Menkovad234032019-10-22 13:43:54 +0400104
105 def add_plan(self, name, description, milestone_id, entries):
stavrovska28772bc2024-05-22 09:33:50 +0200106 add_plan_uri = "add_plan/{project_id}".format(
107 project_id=self.project["id"]
108 )
Ilya Menkovad234032019-10-22 13:43:54 +0400109 new_plan = {
stavrovska28772bc2024-05-22 09:33:50 +0200110 "name": name,
111 "description": description,
112 "milestone_id": milestone_id,
113 "entries": entries, # entries=[]
Ilya Menkovad234032019-10-22 13:43:54 +0400114 }
115 return self.client.send_post(add_plan_uri, new_plan)
116
117 def add_plan_entry(self, project_id, new_run):
stavrovska28772bc2024-05-22 09:33:50 +0200118 add_plan_uri = "add_plan_entry/{project_id}".format(
119 project_id=project_id
120 )
Ilya Menkovad234032019-10-22 13:43:54 +0400121 return self.client.send_post(add_plan_uri, new_run)
122
123 def get_suites(self):
stavrovska28772bc2024-05-22 09:33:50 +0200124 suites_uri = "get_suites/{project_id}".format(
125 project_id=self.project["id"]
126 )
Ilya Menkovad234032019-10-22 13:43:54 +0400127 return self.client.send_get(uri=suites_uri)
128
129 def get_suite(self, suite_id):
stavrovska28772bc2024-05-22 09:33:50 +0200130 suite_uri = "get_suite/{suite_id}".format(suite_id=suite_id)
Ilya Menkovad234032019-10-22 13:43:54 +0400131 return self.client.send_get(uri=suite_uri)
132
133 def get_suite_by_name(self, name):
134 for suite in self.get_suites():
stavrovska28772bc2024-05-22 09:33:50 +0200135 if suite["name"] == name:
136 return self.get_suite(suite_id=suite["id"])
Ilya Menkovad234032019-10-22 13:43:54 +0400137
138 def get_plan_by_name(self, name):
139 for plan in self.get_plans(13):
stavrovska28772bc2024-05-22 09:33:50 +0200140 if plan["name"] == name:
141 return self.get_plan(plan["id"])
Ilya Menkovad234032019-10-22 13:43:54 +0400142
143 def add_result(self, test_id, result_to_add):
stavrovska28772bc2024-05-22 09:33:50 +0200144 return self.client.send_post(
145 "add_result/{0}".format(test_id["id"]), result_to_add
146 )
Ilya Menkovad234032019-10-22 13:43:54 +0400147
148 def add_suite(self, name, description=None):
stavrovska28772bc2024-05-22 09:33:50 +0200149 return self.client.send_post(
150 "add_suite/" + str(self.project["id"]),
151 dict(name=name, description=description),
152 )
Ilya Menkovad234032019-10-22 13:43:54 +0400153
154 def get_sections(self, suite_id):
stavrovska28772bc2024-05-22 09:33:50 +0200155 sections_uri = "get_sections/{project_id}&suite_id={suite_id}".format(
156 project_id=self.project["id"], suite_id=suite_id
Ilya Menkovad234032019-10-22 13:43:54 +0400157 )
158 return self.client.send_get(sections_uri)
159
160 def get_section(self, section_id):
stavrovska28772bc2024-05-22 09:33:50 +0200161 section_uri = "get_section/{section_id}".format(section_id=section_id)
Ilya Menkovad234032019-10-22 13:43:54 +0400162 return self.client.send_get(section_uri)
163
164 def get_section_by_name(self, suite_id, section_name):
165 for section in self.get_sections(suite_id=suite_id):
stavrovska28772bc2024-05-22 09:33:50 +0200166 if section["name"] == section_name:
167 return self.get_section(section_id=section["id"])
Ilya Menkovad234032019-10-22 13:43:54 +0400168
169 def add_section(self, suite_id, name, parent_id=None):
stavrovska28772bc2024-05-22 09:33:50 +0200170 return self.client.send_post(
171 "add_section/" + str(self.project["id"]),
172 dict(suite_id=suite_id, name=name, parent_id=parent_id),
173 )
Ilya Menkovad234032019-10-22 13:43:54 +0400174
175 def delete_section(self, section_id):
176 # Not working bug in testrail
177 section = self.get_section(section_id)
stavrovska28772bc2024-05-22 09:33:50 +0200178 print("SECTION", section)
Ilya Menkovad234032019-10-22 13:43:54 +0400179 try:
stavrovska28772bc2024-05-22 09:33:50 +0200180 deleted = self.client.send_post(
181 "delete_section/{}".format(section_id), section
182 )
183 print("DELETED", deleted)
Ilya Menkovad234032019-10-22 13:43:54 +0400184 except Exception:
185 pass
186 return
187
188 def add_case(self, section_id, case):
stavrovska28772bc2024-05-22 09:33:50 +0200189 add_case_uri = "add_case/{section_id}".format(section_id=section_id)
Ilya Menkovad234032019-10-22 13:43:54 +0400190 return self.client.send_post(add_case_uri, case)
191
192 @staticmethod
193 def prepare_common_results(tests, status_id):
194 results = {"results": []}
195
196 for test in tests:
stavrovska28772bc2024-05-22 09:33:50 +0200197 results["results"].append(
198 {
199 "test_id": test["id"],
200 "status_id": status_id,
201 "comment": "Deploy failed",
202 }
203 )
Ilya Menkovad234032019-10-22 13:43:54 +0400204 return results
205
206 @staticmethod
207 def get_result_by_name():
208 result = config.RESULT
stavrovska28772bc2024-05-22 09:33:50 +0200209 if result == "Blocked":
Ilya Menkovad234032019-10-22 13:43:54 +0400210 return 2
stavrovska28772bc2024-05-22 09:33:50 +0200211 elif result == "Passed":
Ilya Menkovad234032019-10-22 13:43:54 +0400212 return 1
stavrovska28772bc2024-05-22 09:33:50 +0200213 elif result == "Failed":
Ilya Menkovad234032019-10-22 13:43:54 +0400214 return 5
stavrovska28772bc2024-05-22 09:33:50 +0200215 elif result == "ProdFailed":
Ilya Menkovad234032019-10-22 13:43:54 +0400216 return 8
stavrovska28772bc2024-05-22 09:33:50 +0200217 elif result == "Skipped":
Ilya Menkovad234032019-10-22 13:43:54 +0400218 return 6
219
220 @staticmethod
221 def get_id_of_tempest_runs(tempest_runs):
222 tempest_runs_ids = {} # []
223 for i in tempest_runs:
stavrovska28772bc2024-05-22 09:33:50 +0200224 for item in i["runs"]:
225 tempest_runs_ids.update({item["id"]: item["name"]})
Ilya Menkovad234032019-10-22 13:43:54 +0400226 return tempest_runs_ids
227
228 @staticmethod
229 def get_last_tempest_run(get_plans):
230 for plans in get_plans:
231 # print dict
stavrovska28772bc2024-05-22 09:33:50 +0200232 if (
233 plans.get("passed_count") > 1000
234 or plans.get("blocked_count") > 1000
235 ) and "9.1" in plans.get("name"):
236 return plans.get("id")