Skip to content

Commit 69e9fc7

Browse files
Introduced --tests-regex flag to ease the process of running a subsetof tests (#168)
* Introduced --tests-regex flag to ease the process of running a subset of tests * Addressed review comment
1 parent 592047f commit 69e9fc7

File tree

5 files changed

+93
-11
lines changed

5 files changed

+93
-11
lines changed

redis_benchmarks_specification/__cli__/stats.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def generate_stats_cli_command_logic(args, project_name, project_version):
3939
logging.info("Using test-suites folder dir {}".format(testsuites_folder))
4040
testsuite_spec_files = get_benchmark_specs(testsuites_folder)
4141
logging.info(
42-
"There are a total of {} test-suites in folder {}".format(
42+
"There are a total of {} test-suites being run in folder {}".format(
4343
len(testsuite_spec_files), testsuites_folder
4444
)
4545
)

redis_benchmarks_specification/__common__/runner.py

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,55 @@
11
import logging
22
import os
33
import pathlib
4+
import re
45

56

6-
def get_benchmark_specs(testsuites_folder, test=""):
7+
def get_benchmark_specs(testsuites_folder, test="", test_regex=".*"):
8+
final_files = []
79
if test == "":
810
files = pathlib.Path(testsuites_folder).glob("*.yml")
9-
files = [str(x) for x in files]
10-
logging.info(
11-
"Running all specified benchmarks: {}".format(
12-
" ".join([str(x) for x in files])
11+
original_files = [str(x) for x in files]
12+
if test_regex == ".*":
13+
logging.info(
14+
"Acception all test files. If you need further filter specify a regular expression via --tests-regexp"
1315
)
14-
)
16+
"Running all specified benchmarks: {}".format(" ".join(original_files))
17+
final_files = original_files
18+
else:
19+
logging.info(
20+
"Filtering all test names via a regular expression: {}".format(
21+
test_regex
22+
)
23+
)
24+
test_regexp_string = re.compile(test_regex)
25+
for test_name in original_files:
26+
match_obj = re.search(test_regexp_string, test_name)
27+
if match_obj is None:
28+
logging.info(
29+
"Skipping test file: {} given it does not match regex {}".format(
30+
test_name, test_regexp_string
31+
)
32+
)
33+
else:
34+
final_files.append(test_name)
35+
1536
else:
1637
files = test.split(",")
17-
files = ["{}/{}".format(testsuites_folder, x) for x in files]
18-
logging.info("Running specific benchmark in file: {}".format(files))
19-
return files
38+
final_files = ["{}/{}".format(testsuites_folder, x) for x in files]
39+
logging.info(
40+
"Running specific benchmark in {} files: {}".format(
41+
len(final_files), final_files
42+
)
43+
)
44+
return final_files
2045

2146

2247
def extract_testsuites(args):
2348
testsuites_folder = os.path.abspath(args.test_suites_folder)
2449
logging.info("Using test-suites folder dir {}".format(testsuites_folder))
25-
testsuite_spec_files = get_benchmark_specs(testsuites_folder, args.test)
50+
testsuite_spec_files = get_benchmark_specs(
51+
testsuites_folder, args.test, args.tests_regexp
52+
)
2653
logging.info(
2754
"There are a total of {} test-suites in folder {}".format(
2855
len(testsuite_spec_files), testsuites_folder

redis_benchmarks_specification/__runner__/args.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@ def create_client_runner_args(project_name):
4747
help="specify a test to run. By default will run all the tests"
4848
+ " present in the folder specified in --test-suites-folder.",
4949
)
50+
parser.add_argument(
51+
"--tests-regexp",
52+
type=str,
53+
default=".*",
54+
help="Interpret PATTERN as a regular expression to filter test names",
55+
)
5056
parser.add_argument("--db_server_host", type=str, default="localhost")
5157
parser.add_argument("--db_server_port", type=int, default=6379)
5258
parser.add_argument("--cpuset_start_pos", type=int, default=0)

redis_benchmarks_specification/__self_contained_coordinator__/args.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,12 @@ def create_self_contained_coordinator_args(project_name):
8484
help="specify a test to run. By default will run all the tests"
8585
+ " present in the folder specified in --test-suites-folder.",
8686
)
87+
parser.add_argument(
88+
"--tests-regexp",
89+
type=str,
90+
default=".*",
91+
help="Interpret PATTERN as a regular expression to filter test names",
92+
)
8793
parser.add_argument(
8894
"--datasink_redistimeseries_host", type=str, default=DATASINK_RTS_HOST
8995
)

utils/tests/test_runner.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import yaml
55

66
from redis_benchmarks_specification.__common__.package import get_version_string
7+
from redis_benchmarks_specification.__common__.runner import extract_testsuites
78
from redis_benchmarks_specification.__common__.spec import extract_client_tool
89
from redis_benchmarks_specification.__runner__.args import create_client_runner_args
910
from redis_benchmarks_specification.__runner__.runner import (
@@ -208,3 +209,45 @@ def test_run_client_runner_logic():
208209
r = redis.Redis(host=db_host, port=db_port_int)
209210
total_keys = r.info("keyspace")["db0"]["keys"]
210211
assert total_keys == 10
212+
213+
214+
def test_extract_testsuites():
215+
project_name = "tool"
216+
project_version = "v0"
217+
parser = argparse.ArgumentParser(
218+
description="test",
219+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
220+
)
221+
parser = create_client_runner_args(
222+
get_version_string(project_name, project_version)
223+
)
224+
args = parser.parse_args(
225+
args=[
226+
"--test-suites-folder",
227+
"./utils/tests/test_data/test-suites",
228+
]
229+
)
230+
tests = extract_testsuites(args)
231+
assert len(tests) == 4
232+
233+
args = parser.parse_args(
234+
args=[
235+
"--test-suites-folder",
236+
"./utils/tests/test_data/test-suites",
237+
"--tests-regex",
238+
".*\.yml",
239+
]
240+
)
241+
tests = extract_testsuites(args)
242+
assert len(tests) == 4
243+
244+
args = parser.parse_args(
245+
args=[
246+
"--test-suites-folder",
247+
"./utils/tests/test_data/test-suites",
248+
"--tests-regex",
249+
".*expire.*",
250+
]
251+
)
252+
tests = extract_testsuites(args)
253+
assert len(tests) == 3

0 commit comments

Comments
 (0)