Initial QSfera import
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user