Добрый день!
Подскажите есть ли возможность использовать в codeception глобальные переменные, значение которых можно передавать из одного теста в другой к примеру в рамках acceptance тестов?
Конечно можно, если ты эти переменные в хелпере определишь.
А можно пример привести данного определения. В документации об этом ни слова нет.
Ну в документации и не будет, это из раздела программирования, пример:
<?php
namespace Helper;
// here you can define custom actions
// all public methods declared in helper class will be available in $I
class Acceptance extends \Codeception\Module
{
public $apiTTSKey = 'elm059ugjpm3hp3iky5';
............
И в любом месте тестов можно юзать:
$I->seeElement($I->apiTTSKey);
Спасибо за ответ.
Но в данной ситуации невозможно из теста изменить значение данноой переменной.
Мне же хотелось иметь переменную значение которой я могу изменить в тесте, после чего посмотреть в последующем тесте это откорректированнное значение.
А ты пробовал:
$I->apiTTSKey = '';
Попробывал. не работает. переменная остается такойже как изначально задана в хэлпере.
Решение, запили метод в хелпере который будет менять значение этой переменной типа:
public function setVariable($value) {
$this->apiTTSKey = $value;
}
В тесте вызывай
$I->setVariable('новое значение');
что то мне подсказывает, что распаралелить пачку тестов работающих с одной переменной - будет не просто
Ну про распаралеливание тут вроде ничего не сказано, при распаралеливании глобальные переменные не помогут. А глобальные переменные есть у меня в некоторых тестах, но там они меняются непосредственно в самом хелпере (внутри методов).
это так, заметка ТС’у на будущее лучше, по возможности, заранее какие то вещи продумать/спланировать.
Это PHP, тут с распаралеливанием всё предельно просто. Его нет
Впрочем, как по мне, на уровне функциональных и юнит тестов оно особо не нужно. А на уровне приемочных всё равно паралелить придется по нескольким нодам/контейнерам.
Так что глобальные переменные не должны быть проблемой. Я бы просто создавал классы PageObject со статическими переменными и использовал их там где это надо. Классы и их статические свойста глобальны.
А переменную созданную в _before() возможно передать в тест?
Переменную не подхватит, а вот поле (в контексте класса) - да.
Важен порядок выполнения:
_construct()
dataProvider
_before()
тестовый метод
_after()
Если засеттили на нижнем уровне списка, а пытаетесь получить на верхнем - то будет фэйл.