Триггеры
Исходный код на языке 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
Политика конфиденциальности