From ffeb3a61f770a78ad5b47e5587bae5a9bcb2f77d Mon Sep 17 00:00:00 2001 From: Alexander Kabui Date: Tue, 8 Jun 2021 01:40:47 +0300 Subject: initial commit for queries perfomance tests --- tests/performance/__init__.py | 0 tests/performance/test_query.py | 119 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 tests/performance/__init__.py create mode 100644 tests/performance/test_query.py (limited to 'tests/performance') diff --git a/tests/performance/__init__.py b/tests/performance/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/performance/test_query.py b/tests/performance/test_query.py new file mode 100644 index 0000000..c0a3210 --- /dev/null +++ b/tests/performance/test_query.py @@ -0,0 +1,119 @@ +"""module contains performance tests for queries""" + +import time +import sys + +from inspect import getmembers +from inspect import isfunction + +from functools import wraps +from gn3.db_utils import database_connector + + +def timer(func): + """time function""" + @wraps(func) + def wrapper_time(*args, **kwargs): + """time wrapper""" + start_time = time.perf_counter() + results = func(*args, **kwargs) + end_time = time.perf_counter() + run_time = end_time - start_time + print(f"the time taken is {run_time:.3f} seconds") + return results + + return wrapper_time + + +def query_executor(query, fetch_all=True): + """function to execute a query""" + conn, _ = database_connector() + + with conn: + cursor = conn.cursor() + cursor.execute(query) + + if fetch_all: + return cursor.fetchall() + return cursor.fetchone() + + +def fetch_probeset_query(dataset_name): + """contains queries for datasets""" + + query = """SELECT * from ProbeSetData + where StrainID in (4, 5, 6, 7, 8, 9, 10, 11, 12, + 14, 15, 17, 18, 19, 20, 21, 22, 24, 25, 26, 28, + 29, 30, 31, 35, 36, 37, 39, 98, 99, 100, 103, + 487, 105, 106, 110, 115,116, 117, 118, 119, + 120, 919, 147, 121, 40, 41, 124, 125, 128, 135, + 129, 130, 131, 132, 134, 138, 139, 140, 141, 142, + 144, 145, 148, 149, 920, 922, 2, 3, 1, 1100) + and id in (SELECT ProbeSetXRef.DataId + FROM (ProbeSet, ProbeSetXRef, ProbeSetFreeze) + WHERE ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id + and ProbeSetFreeze.Name = '{}' + and ProbeSet.Id = ProbeSetXRef.ProbeSetId)""".format(dataset_name) + + return query + + +@timer +def perf_simple_query(): + """initial simple query test""" + + query = """select * from ProbeSetData limit 1""" + + _results = query_executor(query) + + return {} + + +@timer +def perf_hc_m2_dataset(): + """test the default dataset HC_M2_0606_P""" + + query = fetch_probeset_query("HC_M2_0606_P") + + _results = query_executor(query) + + return {} + + +@timer +def perf_umutaffyexon_dataset(): + """largest dataset in gn""" + + query = fetch_probeset_query("UMUTAffyExon_0209_RMA") + _results = query_executor(query) + return {} + + +def fetch_perf_functions(): + """function to filter all functions strwith perf_""" + name_func_dict = {name: obj for name, obj in + getmembers(sys.modules[__name__], isfunction)if isfunction( + obj) and obj.__module__ == __name__ and name.startswith('perf_')} + + return name_func_dict + + +def fetch_cmd_args(): + """function to fetch cmd args""" + cmd_args = sys.argv[1:] + + name_func_dict = fetch_perf_functions() + + if len(cmd_args) > 0: + callables = [func_call for name, + func_call in name_func_dict.items() if name in cmd_args] + + return callables + + return list(name_func_dict.values()) + + +if __name__ == '__main__': + func_list = fetch_cmd_args() + for call_func in func_list: + call_func() -- cgit v1.2.3