Bug 1863606 - Add smoke test generation to experiment integration test suite
parent
101acb7ec9
commit
29d63d7065
@ -0,0 +1,82 @@
|
|||||||
|
from pathlib import Path
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
|
||||||
|
def search_for_smoke_tests(tests_name):
|
||||||
|
"""Searches for smoke tests within the requested test module."""
|
||||||
|
path = Path("../ui")
|
||||||
|
files = sorted([x for x in path.iterdir() if x.is_file()])
|
||||||
|
locations = []
|
||||||
|
file_name = None
|
||||||
|
test_names = []
|
||||||
|
|
||||||
|
for name in files:
|
||||||
|
if tests_name in name.name:
|
||||||
|
file_name = name
|
||||||
|
break
|
||||||
|
|
||||||
|
with open(file_name, "r") as file:
|
||||||
|
code = file.read().split(" ")
|
||||||
|
code = [item for item in code if item != ""]
|
||||||
|
|
||||||
|
for count, item in enumerate(code):
|
||||||
|
if "class" in item or "@SmokeTest" in item:
|
||||||
|
locations.append(count)
|
||||||
|
|
||||||
|
for location in locations:
|
||||||
|
if len(test_names) == 0:
|
||||||
|
class_name = code[location + 1]
|
||||||
|
test_names.append(class_name)
|
||||||
|
else:
|
||||||
|
test_names.append(f"{class_name}#{code[location+3].strip('()')}")
|
||||||
|
return test_names
|
||||||
|
|
||||||
|
|
||||||
|
def create_test_file():
|
||||||
|
"""Create the python file to hold the tests."""
|
||||||
|
|
||||||
|
path = Path("tests/")
|
||||||
|
filename = "test_smoke_scenarios.py"
|
||||||
|
final_path = path / filename
|
||||||
|
|
||||||
|
if final_path.exists():
|
||||||
|
print("File Exists, you need to delete it to create a new one.")
|
||||||
|
return
|
||||||
|
# file exists
|
||||||
|
subprocess.run([f"touch {final_path}"], encoding="utf8", shell=True)
|
||||||
|
assert final_path.exists()
|
||||||
|
with open(final_path, "w") as file:
|
||||||
|
file.write("import pytest\n\n")
|
||||||
|
|
||||||
|
|
||||||
|
def generate_smoke_tests(tests_names=None):
|
||||||
|
"""Generate pytest code for the requested tests."""
|
||||||
|
pytest_file = "tests/test_smoke_scenarios.py"
|
||||||
|
tests = []
|
||||||
|
|
||||||
|
for test in tests_names[1:]:
|
||||||
|
test_name = test.replace("#", "_").lower()
|
||||||
|
tests.append(
|
||||||
|
f"""
|
||||||
|
@pytest.mark.smoke_test
|
||||||
|
def test_smoke_{test_name}(setup_experiment, gradlewbuild, load_branches, check_ping_for_experiment):
|
||||||
|
setup_experiment(load_branches)
|
||||||
|
gradlewbuild.test("{test}", smoke=True)
|
||||||
|
assert check_ping_for_experiment
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
with open(pytest_file, "a") as file:
|
||||||
|
for item in tests:
|
||||||
|
file.writelines(f"{item}")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
test_modules = None
|
||||||
|
create_test_file()
|
||||||
|
with open("variables.yaml", "r") as file:
|
||||||
|
test_modules = yaml.safe_load(file)
|
||||||
|
for item in test_modules.get("smoke_tests"):
|
||||||
|
tests = search_for_smoke_tests(item)
|
||||||
|
generate_smoke_tests(tests)
|
Loading…
Reference in New Issue