Skip to content
This repository was archived by the owner on Feb 2, 2024. It is now read-only.

Commit 4683b6e

Browse files
PokhodenkoSAshssf
authored andcommitted
Add CSV support for TestResults (#347)
* Add CSV support for TestResults * Add drivers for Excel and CSV files * Use env vars and pass logger in methods.
1 parent cfe80ac commit 4683b6e

2 files changed

Lines changed: 82 additions & 27 deletions

File tree

sdc/tests/tests_perf/test_perf_base.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,14 @@ class TestBase(unittest.TestCase):
99

1010
@classmethod
1111
def setUpClass(cls):
12-
cls.test_results = TestResults()
12+
drivers = []
13+
if is_true(os.environ.get('SDC_TEST_PERF_EXCEL', True)):
14+
drivers.append(ExcelResultsDriver('perf_results.xlsx'))
15+
if is_true(os.environ.get('SDC_TEST_PERF_CSV', False)):
16+
drivers.append(CSVResultsDriver('perf_results.csv'))
17+
18+
cls.test_results = TestResults(drivers)
19+
1320
if is_true(os.environ.get('LOAD_PREV_RESULTS')):
1421
cls.test_results.load()
1522

sdc/tests/tests_perf/test_perf_utils.py

Lines changed: 74 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -195,13 +195,78 @@ def get_times(f, *args, iter_number=5):
195195
return exec_times, boxing_times
196196

197197

198+
class ResultsDriver:
199+
"""Base class. Load and dump results."""
200+
201+
def __init__(self, file_name, raw_file_name=None):
202+
self.file_name = file_name
203+
self.raw_file_name = raw_file_name if raw_file_name else f'raw_{file_name}'
204+
205+
206+
class ExcelResultsDriver(ResultsDriver):
207+
# openpyxl need to be installed
208+
209+
def dump_grouped_data(self, grouped_data, logger=None):
210+
try:
211+
with pandas.ExcelWriter(self.file_name) as writer:
212+
grouped_data.to_excel(writer)
213+
except ModuleNotFoundError as e:
214+
if logger:
215+
msg = 'Could not dump the results to "%s": %s'
216+
logger.warning(msg, self.file_name, e)
217+
218+
def dump_test_results_data(self, test_results_data, logger=None):
219+
try:
220+
with pandas.ExcelWriter(self.raw_file_name) as writer:
221+
test_results_data.to_excel(writer, index=False)
222+
except ModuleNotFoundError as e:
223+
if logger:
224+
msg = 'Could not dump raw results to "%s": %s'
225+
logger.warning(msg, self.raw_file_name, e)
226+
227+
def load(self, logger=None):
228+
raw_perf_results_xlsx = Path(self.raw_file_name)
229+
if raw_perf_results_xlsx.exists():
230+
with raw_perf_results_xlsx.open('rb') as fd:
231+
# xlrd need to be installed
232+
try:
233+
return pandas.read_excel(fd)
234+
except ModuleNotFoundError as e:
235+
if logger:
236+
msg = 'Could not load previous results from %s: %s'
237+
logger.warning(msg, self.raw_file_name, e)
238+
239+
240+
class CSVResultsDriver(ResultsDriver):
241+
242+
def dump_grouped_data(self, grouped_data, logger=None):
243+
grouped_data.to_csv(self.file_name)
244+
245+
def dump_test_results_data(self, test_results_data, logger=None):
246+
test_results_data.to_csv(self.raw_file_name)
247+
248+
def load(self, logger=None):
249+
raw_perf_results_csv = Path(self.raw_file_name)
250+
if raw_perf_results_csv.exists():
251+
with raw_perf_results_csv.open('rb') as fd:
252+
# xlrd need to be installed
253+
try:
254+
return pandas.read_csv(fd)
255+
except ModuleNotFoundError as e:
256+
if logger:
257+
msg = 'Could not load previous results from %s: %s'
258+
logger.warning(msg, self.raw_file_name, e)
259+
260+
198261
class TestResults:
199-
perf_results_xlsx = 'perf_results.xlsx'
200-
raw_perf_results_xlsx = 'raw_perf_results.xlsx'
201262
index = ['name', 'N', 'type', 'size']
202263
test_results_data = pandas.DataFrame(index=index)
203264
logger = setup_logging()
204265

266+
def __init__(self, drivers=None):
267+
self.drivers = drivers
268+
self.default_driver = drivers[0] if drivers else None
269+
205270
@property
206271
def grouped_data(self):
207272
"""
@@ -272,35 +337,18 @@ def dump(self):
272337
"""
273338
Dump performance testing results from global data storage to excel
274339
"""
275-
# openpyxl need to be installed
276-
277-
try:
278-
with pandas.ExcelWriter(self.perf_results_xlsx) as writer:
279-
self.grouped_data.to_excel(writer)
280-
except ModuleNotFoundError as e:
281-
msg = 'Could not dump the results to "%s": %s'
282-
self.logger.warning(msg, self.perf_results_xlsx, e)
283-
284-
try:
285-
with pandas.ExcelWriter(self.raw_perf_results_xlsx) as writer:
286-
self.test_results_data.to_excel(writer, index=False)
287-
except ModuleNotFoundError as e:
288-
msg = 'Could not dump raw results to "%s": %s'
289-
self.logger.warning(msg, self.raw_perf_results_xlsx, e)
340+
for d in self.drivers:
341+
d.dump_grouped_data(self.grouped_data, self.logger)
342+
d.dump_test_results_data(self.test_results_data, self.logger)
290343

291344
def load(self):
292345
"""
293346
Load existing performance testing results from excel to global data storage
294347
"""
295-
raw_perf_results_xlsx = Path(self.raw_perf_results_xlsx)
296-
if raw_perf_results_xlsx.exists():
297-
with raw_perf_results_xlsx.open('rb') as fd:
298-
# xlrd need to be installed
299-
try:
300-
self.test_results_data = pandas.read_excel(fd)
301-
except ModuleNotFoundError as e:
302-
msg = 'Could not load previous results from %s: %s'
303-
self.logger.warning(msg, raw_perf_results_xlsx, e)
348+
if self.default_driver:
349+
test_results_data = self.default_driver.load(self.logger)
350+
if test_results_data is not None:
351+
self.test_results_data = test_results_data
304352

305353

306354
class TestResultsStr(TestResults):

0 commit comments

Comments
 (0)