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.
109 lines
3.9 KiB
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
|
|
)
|