Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Есть ли методы setUp TearDown для единичного запуска перед всеми тестами?

codeception
Теги: #<Tag:0x00007fedb63342e8>

(Andrey Kim) #1

Мне нужно перед запуском того или иного *Cest.php запускать определенный код.

Как решение вижу setUp метод = _before в Codeception. Но он запускается перед КАЖДЫМ тестом внутри Cest файла.

Мне нужно 1 раз перед всеми тестами одного файла. Что можно предпринять? Посоветуйте плз.


(Andrew Zakordonets) #2

Во всех тест ранерах методы называются по разному, но в JUnit и TestNg есть @beforeClass @AfterClass методы - они прогоняются один раз перед запуском тестов в классе


(Andrey Kim) #3

Мне как раз нужна такая аналогия только в Codeception


(brbrr) #4

(Andrey Kim) #5

Гуглил =)

Нашел hook _beforeSuite. Но чот в Cest он просто так не хочет работать. Может у кого есть вариант с его использованием ?


(Andrey Kim) #6

Нашел вариант с его использованием, но как я понял он может использоваться только в модулях или хелперах. А такой вариант мне не подходит.


(Michael Bodnarchuk) #7

Нашел вариант с его использованием, но как я понял он может использоваться только в модулях или хелперах. А такой вариант мне не подходит.

А почему? Предположим, что у вас тесты будут запускаться не последовательно, а в случайном порядке. Запуск “перед всеми” тестами абсолютно эквивалентно тому чтобы быть запущеным в начале сьюты. Кроме того, если вы возьмете подобный функционал из PHPUnit - там конечно есть метод setUpBeforeClass, но он статичен, т.е. не принадлежит инстансу обьекта, и не имеет доступ к контексту $this. Т.е. он находится вне контекста теста

TL;DR - всё можно сделать через beforeSuite


(Andrey Kim) #8

Спасибо за ответ от создателя :+1:

У меня есть несколько Cest со скоупами тестов внутри. Я хочу задавать в некоторых Cest метод _beforeSuite(_beforeCest), который будет выполняться 1 раз перед запуском тестов этого самого Cest. В других Cest содержимое метода _beforeSuite может меняться, или он вовсе не нужен в некоторых из них.

Пока не сообразил как можно заюзать этот ХУК, так чтобы решить мою задачу. Если я правильно понял, то используя этот хук в хэлепере он вызовется всего один раз, за один php codecept run. Если нет, то просьба объяснить как?