Skip to content
Snippets Groups Projects
Commit ac95264a authored by Bartek Wrona's avatar Bartek Wrona
Browse files

Merge branch 'dk-benchmarks-rework' into 'master'

benchmark_generator.py moved to hivemind

See merge request !162
parents a9e1d937 819563bf
No related branches found
No related tags found
1 merge request!162benchmark_generator.py moved to hivemind
...@@ -4,6 +4,8 @@ Script `benchmark_generator` will scan given test directory for tavern test file ...@@ -4,6 +4,8 @@ Script `benchmark_generator` will scan given test directory for tavern test file
test parameters from each file and will create benchmark test basing on that parameters. Benchmarks generated test parameters from each file and will create benchmark test basing on that parameters. Benchmarks generated
from directory are stored in a single file. from directory are stored in a single file.
Script moved to hivemind scripts/ci/ directory.
## Examples ## Examples
```bash ```bash
...@@ -14,4 +16,4 @@ $ ./benchmark_generator.py <path_to_test_directory> <name_of_the_generated_bench ...@@ -14,4 +16,4 @@ $ ./benchmark_generator.py <path_to_test_directory> <name_of_the_generated_bench
```bash ```bash
$ ./benchmark_generator.py ../tavern/condenser_api_patterns/ condenser_benchmarks.py http://127.0.0.1:8080 $ ./benchmark_generator.py ../tavern/condenser_api_patterns/ condenser_benchmarks.py http://127.0.0.1:8080
$ pytest condenser_benchmarks.py $ pytest condenser_benchmarks.py
``` ```
\ No newline at end of file
#!/usr/bin/python3
from json import dumps
def make_benchmark_header():
return """from requests import post
from json import dumps
def send_rpc_query(address, data):
response = post(address, data=data)
response_json = response.json()
return response_json
"""
def make_benchmark(test_name, address, test_payload):
return """
def test_{}(benchmark):
response_json = benchmark(send_rpc_query, "{}", dumps({}))
error = response_json.get("error", None)
result = response_json.get("result", None)
assert error is not None or result is not None, "No error or result in response"
""".format(test_name, address, test_payload)
def get_request_from_yaml(path_to_yaml):
import yaml
yaml_document = None
with open(path_to_yaml, "r") as yaml_file:
yaml_document = yaml.load(yaml_file, Loader=yaml.BaseLoader)
if "stages" in yaml_document:
if "request" in yaml_document["stages"][0]:
json_parameters = yaml_document["stages"][0]["request"].get("json", None)
assert json_parameters is not None, "Unable to find json parameters in request"
return dumps(json_parameters)
return None
def make_test_name_from_path(test_path):
splited = test_path.split("/")
return ("_".join(splited[-3:])).replace(".", "_").replace("-", "_")
def make_benchmark_test_file(file_name, address, tests_root_dir):
import os
from fnmatch import fnmatch
pattern = "*.tavern.yaml"
test_files = []
for path, subdirs, files in os.walk(tests_root_dir):
for name in files:
if fnmatch(name, pattern):
test_files.append(os.path.join(path, name))
with open(file_name, "w") as benchmarks_file:
benchmarks_file.write(make_benchmark_header())
for test_file in test_files:
test_name = make_test_name_from_path(test_file)
test_payload = get_request_from_yaml(test_file)
benchmarks_file.write(make_benchmark(test_name, address, test_payload))
benchmarks_file.write("\n")
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("path_to_test_dir", type=str, help = "Path to test directory for given xml file")
parser.add_argument("benchmark_test_file_name", type=str, help="Name of the generated test file")
parser.add_argument("target_ip_address", type=str, help="Address of the hivemind")
args = parser.parse_args()
make_benchmark_test_file(args.benchmark_test_file_name, args.target_ip_address, args.path_to_test_dir)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment