15
15
limitations under the License.
16
16
"""
17
17
import logging
18
-
19
18
import requests
20
19
from requests .adapters import HTTPAdapter
21
20
22
21
from reportportal_client .core .log_manager import LogManager
23
- from reportportal_client .core .test_manager import TestManager
24
22
from reportportal_client .core .rp_requests import (
25
23
HttpRequest ,
24
+ ItemStartRequest ,
25
+ ItemFinishRequest ,
26
26
LaunchStartRequest ,
27
27
LaunchFinishRequest
28
28
)
29
- from reportportal_client .helpers import uri_join
29
+ from reportportal_client .helpers import uri_join , verify_value_length
30
30
31
31
logger = logging .getLogger (__name__ )
32
32
logger .addHandler (logging .NullHandler ())
@@ -83,8 +83,6 @@ def __init__(self,
83
83
self ._log_manager = LogManager (
84
84
self .endpoint , self .session , self .api_v2 , self .launch_id ,
85
85
self .project , log_batch_size = log_batch_size )
86
- self ._test_manager = TestManager (
87
- self .session , self .endpoint , project , self .launch_id )
88
86
89
87
def finish_launch (self ,
90
88
end_time ,
@@ -101,14 +99,15 @@ def finish_launch(self,
101
99
"""
102
100
url = uri_join (self .base_url_v2 , 'launch' , self .launch_id , 'finish' )
103
101
request_payload = LaunchFinishRequest (
104
- end_time = end_time ,
102
+ end_time ,
105
103
status = status ,
106
104
attributes = attributes ,
107
- ** kwargs
105
+ description = kwargs . get ( 'description' )
108
106
).payload
109
107
response = HttpRequest (self .session .put , url = url , json = request_payload ,
110
108
verify_ssl = self .verify_ssl ).make ()
111
109
logger .debug ('finish_launch - ID: %s' , self .launch_id )
110
+ logger .debug ('response message: %s' , response .message )
112
111
return response .message
113
112
114
113
def finish_test_item (self ,
@@ -117,33 +116,100 @@ def finish_test_item(self,
117
116
status ,
118
117
issue = None ,
119
118
attributes = None ,
119
+ description = None ,
120
+ retry = False ,
120
121
** kwargs ):
121
122
"""Finish suite/case/step/nested step item.
122
123
123
- :param item_id: id of the test item
124
- :param end_time: time in UTC format
125
- :param status: status of the test
126
- :param issue: description of an issue
127
- :param attributes: list of attributes
128
- :param kwargs: other parameters
129
- :return: json message
124
+ :param item_id: ID of the test item
125
+ :param end_time: Test item end time
126
+ :param status: Test status. Allowable values: "passed",
127
+ "failed", "stopped", "skipped", "interrupted",
128
+ "cancelled"
129
+ :param attributes: Test item attributes(tags). Pairs of key and value.
130
+ Overrides attributes on start
131
+ :param description: Test item description. Overrides description
132
+ from start request.
133
+ :param issue: Issue of the current test item
134
+ :param retry: Used to report retry of the test. Allowable values:
135
+ "True" or "False"
136
+ """
137
+ url = uri_join (self .base_url_v2 , 'item' , item_id )
138
+ request_payload = ItemFinishRequest (
139
+ end_time ,
140
+ self .launch_id ,
141
+ status ,
142
+ attributes = attributes ,
143
+ description = description ,
144
+ is_skipped_an_issue = self .is_skipped_an_issue ,
145
+ issue = issue ,
146
+ retry = retry
147
+ ).payload
148
+ response = HttpRequest (self .session .put , url = url , json = request_payload ,
149
+ verify_ssl = self .verify_ssl ).make ()
150
+ logger .debug ('finish_test_item - ID: %s' , item_id )
151
+ logger .debug ('response message: %s' , response .message )
152
+ return response .message
153
+
154
+ def get_item_id_by_uuid (self , uuid ):
155
+ """Get test item ID by the given UUID.
156
+
157
+ :param uuid: UUID returned on the item start
158
+ :return: Test item ID
159
+ """
160
+ url = uri_join (self .base_url_v1 , 'item' , 'uuid' , uuid )
161
+ response = HttpRequest (self .session .get , url = url ,
162
+ verify_ssl = self .verify_ssl ).make ()
163
+ return response .id
164
+
165
+ def get_launch_info (self ):
166
+ """Get the current launch information.
167
+
168
+ :return dict: Launch information in dictionary
169
+ """
170
+ if self .launch_id is None :
171
+ return {}
172
+ url = uri_join (self .base_url_v1 , 'launch' , 'uuid' , self .launch_id )
173
+ logger .debug ('get_launch_info - ID: %s' , self .launch_id )
174
+ response = HttpRequest (self .session .get , url = url ,
175
+ verify_ssl = self .verify_ssl ).make ()
176
+ if response .is_success :
177
+ launch_info = response .json
178
+ logger .debug (
179
+ 'get_launch_info - Launch info: %s' , response .json )
180
+ else :
181
+ logger .warning ('get_launch_info - Launch info: '
182
+ 'Failed to fetch launch ID from the API.' )
183
+ launch_info = {}
184
+ return launch_info
185
+
186
+ def get_launch_ui_id (self ):
187
+ """Get UI ID of the current launch.
188
+
189
+ :return: UI ID of the given launch. None if UI ID has not been found.
190
+ """
191
+ return self .get_launch_info ().get ('id' )
192
+
193
+ def get_launch_ui_url (self ):
194
+ """Get UI URL of the current launch.
195
+
196
+ :return: launch URL or all launches URL.
130
197
"""
131
- self ._test_manager .finish_test_item (self .api_v2 ,
132
- item_id ,
133
- end_time ,
134
- status ,
135
- issue = issue ,
136
- attributes = attributes ,
137
- ** kwargs )
198
+ ui_id = self .get_launch_ui_id () or ''
199
+ path = 'ui/#{0}/launches/all/{1}' .format (self .project , ui_id )
200
+ url = uri_join (self .endpoint , path )
201
+ logger .debug ('get_launch_ui_url - ID: %s' , self .launch_id )
202
+ return url
138
203
139
204
def get_project_settings (self ):
140
- """Get settings from project.
205
+ """Get project settings .
141
206
142
- :return: json body
207
+ :return: HTTP response in dictionary
143
208
"""
144
209
url = uri_join (self .base_url_v1 , 'settings' )
145
- r = self .session .get (url = url , json = {}, verify = self .verify_ssl )
146
- return r .json ()
210
+ response = HttpRequest (self .session .get , url = url , json = {},
211
+ verify_ssl = self .verify_ssl ).make ()
212
+ return response .json
147
213
148
214
def log (self , time , message , level = None , attachment = None , item_id = None ):
149
215
"""Send log message to the Report Portal.
@@ -168,8 +234,7 @@ def start_launch(self,
168
234
mode = None ,
169
235
rerun = False ,
170
236
rerun_of = None ,
171
- ** kwargs
172
- ):
237
+ ** kwargs ):
173
238
"""Start a new launch with the given parameters.
174
239
175
240
:param name: Launch name
@@ -189,14 +254,14 @@ def start_launch(self,
189
254
description = description ,
190
255
mode = mode ,
191
256
rerun = rerun ,
192
- rerun_of = rerun_of ,
257
+ rerun_of = rerun_of or kwargs . get ( 'rerunOf' ) ,
193
258
** kwargs
194
259
).payload
195
260
response = HttpRequest (self .session .post ,
196
261
url = url ,
197
262
json = request_payload ,
198
263
verify_ssl = self .verify_ssl ).make ()
199
- self ._test_manager .launch_id = self .launch_id = response .id
264
+ self ._log_manager .launch_id = self .launch_id = response .id
200
265
logger .debug ('start_launch - ID: %s' , self .launch_id )
201
266
return self .launch_id
202
267
@@ -210,31 +275,68 @@ def start_test_item(self,
210
275
parent_item_id = None ,
211
276
has_stats = True ,
212
277
code_ref = None ,
278
+ retry = False ,
213
279
** kwargs ):
214
280
"""Start case/step/nested step item.
215
281
216
- :param name: Name of test item
217
- :param start_time: Test item start time
218
- :param item_type: Type of test item
219
- :param description: Test item description
220
- :param attributes: Test item attributes
221
- :param parameters: Test item parameters
222
- :param parent_item_id: Parent test item UUID
223
- :param has_stats: Does test item has stats or not
224
- :param code_ref: Test item code reference
282
+ :param name: Name of the test item
283
+ :param start_time: Test item start time
284
+ :param item_type: Type of the test item. Allowable values: "suite",
285
+ "story", "test", "scenario", "step",
286
+ "before_class", "before_groups", "before_method",
287
+ "before_suite", "before_test", "after_class",
288
+ "after_groups", "after_method", "after_suite",
289
+ "after_test"
290
+ :param attributes: Test item attributes
291
+ :param code_ref: Physical location of the test item
292
+ :param description: Test item description
293
+ :param has_stats: Set to False if test item is nested step
294
+ :param parameters: Set of parameters (for parametrized test items)
295
+ :param retry: Used to report retry of the test. Allowable values:
296
+ "True" or "False"
225
297
"""
226
- return self ._test_manager .start_test_item (self .api_v2 ,
227
- name ,
228
- start_time ,
229
- item_type ,
230
- description = description ,
231
- attributes = attributes ,
232
- parameters = parameters ,
233
- parent_uuid = parent_item_id ,
234
- has_stats = has_stats ,
235
- code_ref = code_ref ,
236
- ** kwargs )
298
+ if parent_item_id :
299
+ url = uri_join (self .base_url_v2 , 'item' , parent_item_id )
300
+ else :
301
+ url = uri_join (self .base_url_v2 , 'item' )
302
+ request_payload = ItemStartRequest (
303
+ name ,
304
+ start_time ,
305
+ item_type ,
306
+ self .launch_id ,
307
+ attributes = verify_value_length (attributes ),
308
+ code_ref = code_ref ,
309
+ description = description ,
310
+ has_stats = has_stats ,
311
+ parameters = parameters ,
312
+ retry = retry
313
+ ).payload
314
+ response = HttpRequest (self .session .post ,
315
+ url = url ,
316
+ json = request_payload ,
317
+ verify_ssl = self .verify_ssl ).make ()
318
+ logger .debug ('start_test_item - ID: %s' , response .id )
319
+ return response .id
237
320
238
321
def terminate (self , * args , ** kwargs ):
239
322
"""Call this to terminate the client."""
240
323
self ._log_manager .stop ()
324
+
325
+ def update_test_item (self , item_uuid , attributes = None , description = None ):
326
+ """Update existing test item at the Report Portal.
327
+
328
+ :param str item_uuid: Test item UUID returned on the item start
329
+ :param str description: Test item description
330
+ :param list attributes: Test item attributes
331
+ [{'key': 'k_name', 'value': 'k_value'}, ...]
332
+ """
333
+ data = {
334
+ 'description' : description ,
335
+ 'attributes' : verify_value_length (attributes ),
336
+ }
337
+ item_id = self .get_item_id_by_uuid (item_uuid )
338
+ url = uri_join (self .base_url_v1 , 'item' , item_id , 'update' )
339
+ response = HttpRequest (self .session .put , url = url , json = data ,
340
+ verify_ssl = self .verify_ssl ).make ()
341
+ logger .debug ('update_test_item - Item: %s' , item_id )
342
+ return response .message
0 commit comments