You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
swarms/run_all_tests.py

109 lines
3.9 KiB

import os
import subprocess
import logging
import time
import psutil
# Configure logging
logging.basicConfig(
filename="test_runner.log",
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s",
)
def run_tests_in_subfolders(
base_folders: list,
file_extension=".py",
python_interpreter="python",
):
report_file = "test_report.txt"
with open(report_file, "w") as report:
for base_folder in base_folders:
if not os.path.exists(base_folder):
logging.warning(
f"Base folder does not exist: {base_folder}"
)
continue
for root, dirs, files in os.walk(base_folder):
for file in files:
if file.endswith(file_extension):
file_path = os.path.join(root, file)
try:
logging.info(f"Running {file_path}...")
# Start time measurement
start_time = time.time()
# Get initial memory usage
process = psutil.Process(os.getpid())
initial_memory = (
process.memory_info().rss
) # Resident Set Size
result = subprocess.run(
[python_interpreter, file_path],
capture_output=True,
text=True,
)
# End time measurement
end_time = time.time()
# Get final memory usage
final_memory = process.memory_info().rss
# Calculate metrics
execution_time = end_time - start_time
memory_used = (
final_memory - initial_memory
)
report.write(f"Running {file_path}:\n")
report.write(result.stdout)
report.write(result.stderr)
report.write(
f"\nExecution Time: {execution_time:.2f} seconds\n"
)
report.write(
f"Memory Used: {memory_used / (1024 ** 2):.2f} MB\n"
) # Convert to MB
report.write("\n" + "-" * 40 + "\n")
logging.info(
f"Completed {file_path} with return code {result.returncode}"
)
logging.info(
f"Execution Time: {execution_time:.2f} seconds, Memory Used: {memory_used / (1024 ** 2):.2f} MB"
)
except FileNotFoundError:
logging.error(
f"File not found: {file_path}"
)
report.write(
f"File not found: {file_path}\n"
)
except Exception as e:
logging.error(
f"Error running {file_path}: {e}"
)
report.write(
f"Error running {file_path}: {e}\n"
)
# Example usage
base_folders = [
"folder1",
"folder2",
] # Replace with your actual folder names
file_extension = ".py" # Specify the file extension to run
python_interpreter = "python" # Specify the Python interpreter to use
run_tests_in_subfolders(
base_folders, file_extension, python_interpreter
)