Skip to content

Commit 3e11651

Browse files
author
frizzby
committed
* Cleanup code. Remove wrapper classes in favor of plain dicts.
* Add async client class which is now being used by default by pytest agent. * Added automatic batch support of log messages.
1 parent ef65cce commit 3e11651

File tree

2 files changed

+31
-66
lines changed

2 files changed

+31
-66
lines changed

pytest_reportportal/plugin.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,10 @@ def pytest_configure(config):
9191

9292

9393
def pytest_unconfigure(config):
94+
rp_launch = config.getoption("rp_launch")
95+
if rp_launch:
96+
PyTestService.terminate_service()
97+
9498
if hasattr(config, "_reporter"):
9599
reporter = config._reporter
96100
del config._reporter

pytest_reportportal/service.py

Lines changed: 27 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
import logging
22
from time import time
33
from six import with_metaclass
4-
from reportportal_client import (
5-
ReportPortalService, FinishExecutionRQ, StartLaunchRQ, StartTestItemRQ,
6-
FinishTestItemRQ, SaveLogRQ)
4+
from reportportal_client import ReportPortalServiceAsync
75

86

97
def timestamp():
@@ -26,45 +24,40 @@ class PyTestServiceClass(with_metaclass(Singleton, object)):
2624

2725
def __init__(self):
2826
self.RP = None
29-
self.TEST_ITEM_STACK = []
30-
self.launch_id = None
3127

3228
def init_service(self, endpoint, project, uuid):
33-
3429
if self.RP is None:
3530
logging.debug(
3631
msg="ReportPortal - Init service: "
3732
"endpoint={0}, project={1}, uuid={2}".
3833
format(endpoint, project, uuid))
39-
self.RP = ReportPortalService(
34+
self.RP = ReportPortalServiceAsync(
4035
endpoint=endpoint,
4136
project=project,
4237
token=uuid)
4338
else:
4439
logging.debug("The pytest is already initialized")
4540
return self.RP
4641

42+
def terminate_service(self):
43+
if self.RP is not None:
44+
self.RP.terminate()
45+
4746
def start_launch(
4847
self, launch_name=None, mode=None, tags=None, launch=None):
4948
# In next versions launch object(suite, testcase)
5049
# could be set as parameter
51-
sl_pt = StartLaunchRQ(
50+
sl_pt = dict(
5251
name=launch_name,
5352
start_time=timestamp(),
5453
description='Pytest Launch',
5554
mode=mode,
5655
tags=tags)
57-
logging.debug(msg="ReportPortal - Start launch: "
58-
"request_body={0}".format(sl_pt.data))
59-
req_data = self.RP.start_launch(sl_pt)
60-
logging.debug(msg="ReportPortal - Launch started: "
61-
"response_body={0}".format(req_data.raw))
62-
self.launch_id = req_data.id
63-
64-
self.TEST_ITEM_STACK.append((None, "SUITE"))
65-
logging.debug(
66-
msg="ReportPortal - Stack: {0}".
67-
format(self.TEST_ITEM_STACK))
56+
logging.debug("ReportPortal - Start launch: "
57+
"request_body={0}".format(sl_pt))
58+
req_data = self.RP.start_launch(**sl_pt)
59+
logging.debug("ReportPortal - Launch started: "
60+
"response_body={0}".format(req_data))
6861

6962
def start_pytest_item(self, test_item=None):
7063
try:
@@ -73,78 +66,46 @@ def start_pytest_item(self, test_item=None):
7366
except AttributeError:
7467
# doctest has no `function` attribute
7568
item_description = test_item.reportinfo()[2]
76-
start_rq = StartTestItemRQ(
69+
start_rq = dict(
7770
name=test_item.name,
7871
description=item_description,
7972
tags=['PyTest Item Tag'],
8073
start_time=timestamp(),
81-
launch_id=self.launch_id,
8274
type="TEST")
8375

84-
parent_item_id = self._get_top_id_from_stack()
85-
8676
logging.debug(
87-
msg="ReportPortal - Start TestItem: "
88-
"request_body={0}, parent_item={1}".format(
89-
start_rq.data, parent_item_id))
90-
91-
req_data = self.RP.start_test_item(
92-
parent_item_id=parent_item_id, start_test_item_rq=start_rq)
77+
"ReportPortal - Start TestItem: "
78+
"request_body={0}".format(start_rq))
9379

94-
self.TEST_ITEM_STACK.append((req_data.id, "TEST"))
95-
logging.debug(
96-
msg="ReportPortal - Stack: {0}".
97-
format(self.TEST_ITEM_STACK))
80+
self.RP.start_test_item(**start_rq)
9881

9982
def finish_pytest_item(self, status, issue=None):
100-
fta_rq = FinishTestItemRQ(end_time=timestamp(),
101-
status=status,
102-
issue=issue)
83+
fta_rq = dict(end_time=timestamp(),
84+
status=status,
85+
issue=issue)
10386

104-
test_item_id = self._get_top_id_from_stack()
105-
logging.debug(
106-
msg="ReportPortal - Finish TetsItem:"
107-
" request_body={0}, test_id={1}".
108-
format(fta_rq.data, test_item_id))
109-
self.RP.finish_test_item(
110-
item_id=test_item_id,
111-
finish_test_item_rq=fta_rq)
112-
self.TEST_ITEM_STACK.pop()
11387
logging.debug(
114-
msg="ReportPortal - Stack: {0}".
115-
format(self.TEST_ITEM_STACK))
88+
"ReportPortal - Finish TestItem:"
89+
" request_body={0}".format(fta_rq))
90+
self.RP.finish_test_item(**fta_rq)
11691

11792
def finish_launch(self, launch=None, status="rp_launch"):
11893
# TO finish launch session str parameter is needed
119-
fl_rq = FinishExecutionRQ(
94+
fl_rq = dict(
12095
end_time=timestamp(),
12196
status=status)
122-
launch_id = self.launch_id
12397
logging.debug(msg="ReportPortal - Finish launch: "
124-
"request_body={0}, launch_id={1}".format(fl_rq.data,
125-
launch_id))
126-
self.RP.finish_launch(launch_id, fl_rq)
127-
self.TEST_ITEM_STACK.pop()
128-
logging.debug(
129-
msg="ReportPortal - Stack: {0}".
130-
format(self.TEST_ITEM_STACK))
131-
132-
def _get_top_id_from_stack(self):
133-
try:
134-
return self.TEST_ITEM_STACK[-1][0]
135-
except IndexError:
136-
return None
98+
"request_body={0}".format(fl_rq))
99+
self.RP.finish_launch(**fl_rq)
137100

138101
def post_log(self, message, loglevel='INFO'):
139102
if loglevel not in self._loglevels:
140103
logging.warning('Incorrect loglevel = {}. Force set to INFO. Avaliable levels: '
141104
'{}.'.format(loglevel, self._loglevels))
142105
loglevel = 'INFO'
143106

144-
sl_rq = SaveLogRQ(item_id=self._get_top_id_from_stack(),
145-
time=timestamp(), message=message,
146-
level=loglevel)
147-
self.RP.log(sl_rq)
107+
sl_rq = dict(time=timestamp(), message=message, level=loglevel)
108+
self.RP.log(**sl_rq)
148109

149110

150111
PyTestService = PyTestServiceClass()

0 commit comments

Comments
 (0)