Триггеры

Исходный код на языке python находящийся в тестовых файлах выполняется во время загрузки тестового набора, после чего происходит запуск самих тестов описанных на встроенном языке. Но часто возникает потребность выполнять код на языке python во время определённых событий возникающих во время выполнения теста либо модифицировать тест вставив дополнительные команды. Для этих целей был создан механизм триггеров.

Описание триггеров

Триггер представляет собой производный класс от класса BaseTrigger в котором можно переопределить методы вызываемые в определённые моменты прохождения теста:

Метод Аргументы Описание
setup Срабатывает перед запуском первого теста
setup_test browser, test_id, test_scope, test_args Срабатывает перед запуском каждого теста
teardown_test browser, test_id, test_scope, test_args Срабатывает после окончания работы каждого теста
setup_step browser, step_id, test_scope, step_args Срабатывает перед переходом на новый шаг теста
teardown_step browser, step_id, test_scope, step_args Срабатывает после окончания работы шага теста
setup_script browser, script_id, test_scope, script_args Срабатывает перед выполнением объекта SCRIPT
teardown_script browser, script_id, test_scope, script_args Срабатывает после выполнения объекта SCRIPT
setup_command browser, command, test_scope Срабатывает перед выполнением команды
teardown_command browser, command, test_scope Срабатывает после выполнением команды
close Срабатывает после окончания работы последнего теста

В момент вызова методу могут быть переданы следующие аргументы:

Aргумент Тип Описание
browser Browser Специальный объект реализующий высокоуровневую обёртку над WebDriver
test_id str Идентификатор текущего теста
step_id str Идентификатор текущего шага
script_id [str] Список идентификаторов последовательно запускаемых сценариев
test_scope SCOPE Ссылка на пространство имён теста (см. ARG)
test_args dict Словарь аргументов теста
step_args dict Словарь аргументов шага
script_args dict Словарь аргументов передаваемых сценарию

Триггер может быть определён глобально, так и для каждого теста в отдельности. Для того что бы определить триггер не уровни теста необходимо присвоить строку с названием класса триггера методу теста trigger (см. Описание тестов).

Для того что бы определить триггер глобально нужно присвоить строку с названием класса триггера параметру среды TRIGGER. Методы setup и close будут выполнены только у глобально определённого триггера. Метод setup запускаются перед началом тестирования, а метод close после его окончания. В отчётах они отображаются как отдельные тесты с именами имя триггера -> setup и имя триггера -> close.

Пример:

from metatest import *
from trigger import BaseTrigger

class AuthTrigger(BaseTrigger):
    """
    Авторизация на сайте при помощи cookies
    """
    def __init__(self):
        self._cookies = {
            "name": "user", "value": "234d36e1de92e831d66bd788e1974bc0"
        }
    
    def setup_test(self, browser, test_id, test_scope, test_args):
        """
        Перед выполнением теста переходим на страницу BASE_URL, очищаем cookies и
        устанавливаем cookies определённые в конструкторе
        """
        browser.get_url(CONFIG.BASE_URL)
        browser.del_cookies()
        browser.set_cookies(self._cookies)

# "подключаем" триггер
CONFIG.TRIGGER = AuthTrigger

Методы могут возвращать отдельные команды или списки команд которые будут выполнены в теле теста сразу после завершения работы метода. Таким образом из триггера можно влиять на ход выполнения теста.

Пример:

# Если URL страницы после выполнения команды изменился, то проверяем веб-элемент с id RightSide_Advertisement, если он есть, то скрываем его.

class QaDemoTrigger(BaseTrigger):
    def setup_test(self, browser, test_id, test_scope, test_args):
        """
        в начале теста запоминаем начальный URL
        """
        self._start_url = browser.url
    
    def setup_command(self, browser, command, test_scope):
        """
        сохраняем текущий URL, если он равен начальному, то присваиваем пустую строку
        """
        self._url = browser.url
        if self._url == self._start_url:
            self._url = ""
    
    def teardown_command(self, browser, command, test_scope):
        """
        Если URL после выполнения команды изменился, то добавляем в тест последовательность
        команд которые проверяют и скрывают веб-элемент с селектором #RightSide_Advertisement
        """
        if not self._url == browser.url:
            return (
                # если #RightSide_Advertisement виден, то скрываем его
                DATA_ATTR("#RightSide_Advertisement", "style", "display:none", execute=~(NOT("#RightSide_Advertisement", no_displayed=True)))
                # ждём исчезновения веб-элемента #RightSide_Advertisement
                , NOT("#RightSide_Advertisement", no_displayed=True)
            )

CONFIG.TRIGGER = QaDemoTrigger

Для версии 2.0 редакция от 16.09.2026


Группа в Max |  Группа в Telegramm
Политика конфиденциальности

© ИП Пуляев Григорий Васильевич, 2024-2026
ИНН: 263208655118, ОГРНИП: 320265100031176