115 lines
4.6 KiB
Python
Executable File
115 lines
4.6 KiB
Python
Executable File
""" This is the pytest configuration file """
|
|
|
|
import os
|
|
import shutil
|
|
import time
|
|
from seleniumbase.config import settings
|
|
from seleniumbase.fixtures import constants
|
|
|
|
|
|
def pytest_addoption(parser):
|
|
parser.addoption('--browser', action="store",
|
|
dest='browser',
|
|
choices=constants.Browser.VERSION.keys(),
|
|
default=constants.Browser.FIREFOX,
|
|
help="""Specifies the web browser to use. Default=FireFox.
|
|
If you want to use Chrome, explicitly indicate that.
|
|
Example: (--browser=chrome)""")
|
|
parser.addoption('--is_pytest', action="store_true",
|
|
dest='is_pytest',
|
|
default=True,
|
|
help="""This is used by the BaseCase class to tell apart
|
|
pytest runs from nosetest runs.""")
|
|
parser.addoption('--data', dest='data',
|
|
default=None,
|
|
help='Extra data to pass from the command line.')
|
|
parser.addoption('--with-selenium', action="store_true",
|
|
dest='with_selenium',
|
|
default=False,
|
|
help="Use if tests need to be run with a web browser.")
|
|
parser.addoption('--with-testing_base', action="store_true",
|
|
dest='with_testing_base',
|
|
default=False,
|
|
help="Use to save logs (screenshots) when tests fail.")
|
|
parser.addoption('--log_path', dest='log_path',
|
|
default='logs/',
|
|
help='Where the log files are saved.')
|
|
parser.addoption('--headless', action="store_true",
|
|
dest='headless',
|
|
default=False,
|
|
help="""Using this makes Webdriver run headlessly,
|
|
which is useful inside a Linux Docker.""")
|
|
parser.addoption('--demo_mode', action="store_true",
|
|
dest='demo_mode',
|
|
default=False,
|
|
help="""Using this slows down the automation so that
|
|
you can see what it's actually doing.""")
|
|
parser.addoption('--demo_sleep', action='store', dest='demo_sleep',
|
|
default=None,
|
|
help="""Setting this overrides the Demo Mode sleep
|
|
time that happens after browser actions.""")
|
|
|
|
|
|
def pytest_configure(config):
|
|
with_selenium = config.getoption('with_selenium')
|
|
with_testing_base = config.getoption('with_testing_base')
|
|
browser = config.getoption('browser')
|
|
log_path = config.getoption('log_path')
|
|
headless = config.getoption('headless')
|
|
demo_mode = config.getoption('demo_mode')
|
|
demo_sleep = ''
|
|
data = ''
|
|
if config.getoption('demo_sleep') is not None:
|
|
demo_sleep = config.getoption('demo_sleep')
|
|
if config.getoption('data') is not None:
|
|
data = config.getoption('data')
|
|
# Create a temporary config file while tests are running
|
|
pytest_config = '.pytest_config'
|
|
config_file = open(pytest_config, 'w+')
|
|
config_file.write("with_selenium:::%s\n" % with_selenium)
|
|
config_file.write("browser:::%s\n" % browser)
|
|
config_file.write("data:::%s\n" % data)
|
|
config_file.write("with_testing_base:::%s\n" % with_testing_base)
|
|
config_file.write("log_path:::%s\n" % log_path)
|
|
config_file.write("headless:::%s\n" % headless)
|
|
config_file.write("demo_mode:::%s\n" % demo_mode)
|
|
config_file.write("demo_sleep:::%s\n" % demo_sleep)
|
|
config_file.close()
|
|
log_folder_setup(config)
|
|
|
|
|
|
def pytest_unconfigure():
|
|
pytest_config = '.pytest_config'
|
|
if os.path.isfile(pytest_config):
|
|
os.remove(pytest_config)
|
|
|
|
|
|
def log_folder_setup(config):
|
|
# Handle Logging
|
|
with_testing_base = config.getoption('with_testing_base')
|
|
if with_testing_base:
|
|
log_path = config.getoption('log_path')
|
|
if log_path.endswith("/"):
|
|
log_path = log_path[:-1]
|
|
if not os.path.exists(log_path):
|
|
os.makedirs(log_path)
|
|
else:
|
|
archived_folder = "%s/../archived_logs/" % log_path
|
|
if not os.path.exists(archived_folder):
|
|
os.makedirs(archived_folder)
|
|
archived_logs = "%slogs_%s" % (archived_folder, int(time.time()))
|
|
shutil.move(log_path, archived_logs)
|
|
os.makedirs(log_path)
|
|
if not settings.ARCHIVE_EXISTING_LOGS:
|
|
shutil.rmtree(archived_logs)
|
|
|
|
|
|
def pytest_runtest_setup():
|
|
# A placeholder for a method that runs before every test with pytest
|
|
pass
|
|
|
|
|
|
def pytest_runtest_teardown():
|
|
# A placeholder for a method that runs after every test with pytest
|
|
pass
|