Глобальные переменные в рамках acceptance тестов

Добрый день!
Подскажите есть ли возможность использовать в 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('новое значение');

что то мне подсказывает, что распаралелить пачку тестов работающих с одной переменной - будет не просто :slight_smile:

Ну про распаралеливание тут вроде ничего не сказано, при распаралеливании глобальные переменные не помогут. А глобальные переменные есть у меня в некоторых тестах, но там они меняются непосредственно в самом хелпере (внутри методов).

это так, заметка ТС’у на будущее :slight_smile: лучше, по возможности, заранее какие то вещи продумать/спланировать.

Это PHP, тут с распаралеливанием всё предельно просто. Его нет :slight_smile:
Впрочем, как по мне, на уровне функциональных и юнит тестов оно особо не нужно. А на уровне приемочных всё равно паралелить придется по нескольким нодам/контейнерам.

Так что глобальные переменные не должны быть проблемой. Я бы просто создавал классы PageObject со статическими переменными и использовал их там где это надо. Классы и их статические свойста глобальны.

2 Likes

А переменную созданную в _before() возможно передать в тест?

Переменную не подхватит, а вот поле (в контексте класса) - да.
Важен порядок выполнения:
_construct()
dataProvider
_before()
тестовый метод
_after()
Если засеттили на нижнем уровне списка, а пытаетесь получить на верхнем - то будет фэйл.