98 lines
3.3 KiB
Python
98 lines
3.3 KiB
Python
import shutil
|
|
import os
|
|
import re
|
|
import pyautogui
|
|
from behave.model_core import Status
|
|
from datetime import datetime
|
|
|
|
from helpers import ScreenRecorder
|
|
from helpers.ConfigHelper import init_config
|
|
from helpers.api.provisioning import delete_created_users
|
|
from helpers.SpaceHelper import delete_project_spaces
|
|
from helpers.ConfigHelper import get_config
|
|
from helpers.FilesHelper import prefix_path_namespace, cleanup_created_paths
|
|
from helpers.AppHelper import close_and_kill_app
|
|
from helpers.SyncHelper import clear_socket_messages
|
|
from step_types.types import * # register all step types
|
|
|
|
|
|
def append_scenario_to_app_log(scenario):
|
|
with open(get_config('appLogFile'), 'a') as log_file:
|
|
logs = ["=" * 80]
|
|
logs.append(
|
|
f"Scenario: {scenario.name}\nLocation: {scenario.filename}:{scenario.line}"
|
|
)
|
|
logs.append("-" * 80)
|
|
logs.append("") # extra line break
|
|
log_file.write("\n".join(logs))
|
|
|
|
|
|
def store_app_log():
|
|
with open(get_config('appLogFile'), 'a') as log_file:
|
|
# client log is stored in utf-16.
|
|
with open(
|
|
get_config('currentAppLogFile'), 'r', encoding='utf-16'
|
|
) as current_log:
|
|
log_file.write(f"{current_log.read()}\n\n")
|
|
|
|
|
|
def cleanup_app_log():
|
|
if os.path.exists(get_config('currentAppLogFile')):
|
|
os.remove(get_config('currentAppLogFile'))
|
|
|
|
|
|
def before_feature(context, feature):
|
|
init_config()
|
|
|
|
|
|
def before_scenario(context, scenario):
|
|
if os.getenv("CI"):
|
|
ScreenRecorder.start_recording(scenario)
|
|
|
|
|
|
def after_step(context, step):
|
|
if step.status in [Status.failed, Status.error] and os.getenv("CI"):
|
|
scenario = context.scenario.name.lower()
|
|
scenario = re.sub(r'[^a-zA-Z0-9_]', '_', scenario)
|
|
timestamp = datetime.now().strftime("%d-%b-%Y_%H-%M-%S")
|
|
screenshots_dir = os.path.join(get_config("guiTestReportDir"), "screenshots")
|
|
os.makedirs(screenshots_dir, exist_ok=True)
|
|
|
|
file_path = os.path.join(screenshots_dir, f"{scenario}_{timestamp}.png")
|
|
pyautogui.screenshot(file_path)
|
|
|
|
|
|
def after_scenario(context, scenario):
|
|
|
|
# stop screen recording
|
|
if os.getenv("CI"):
|
|
ScreenRecorder.stop_recording(passed=scenario.status == Status.passed)
|
|
|
|
# clean up sync dir
|
|
if os.path.exists(get_config("clientRootSyncPath")):
|
|
for entry in os.scandir(get_config("clientRootSyncPath")):
|
|
try:
|
|
if entry.is_file() or entry.is_symlink():
|
|
print("Deleting file: " + entry.name)
|
|
os.unlink(prefix_path_namespace(entry.path))
|
|
elif entry.is_dir():
|
|
print("Deleting folder: " + entry.name)
|
|
shutil.rmtree(prefix_path_namespace(entry.path))
|
|
except OSError as e:
|
|
print(f"Failed to delete '{entry.name}'.\nReason: {e}.")
|
|
# cleanup paths created outside of the temporary directory during the test
|
|
cleanup_created_paths()
|
|
delete_project_spaces()
|
|
delete_created_users()
|
|
# quit the application
|
|
close_and_kill_app()
|
|
|
|
# store app log on scenario failure
|
|
if scenario.status in [Status.failed, Status.error] and os.path.exists(
|
|
get_config('currentAppLogFile')
|
|
):
|
|
append_scenario_to_app_log(scenario)
|
|
store_app_log()
|
|
cleanup_app_log()
|
|
clear_socket_messages()
|