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

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

codeception
php
Теги: #<Tag:0x00007fedc08b69f0> #<Tag:0x00007fedc08b67e8>

(Anatoly Kuznetsov) #1

Добрый день!
Подскажите есть ли возможность использовать в codeception глобальные переменные, значение которых можно передавать из одного теста в другой к примеру в рамках acceptance тестов?


(Ray Romanov) #2

Конечно можно, если ты эти переменные в хелпере определишь.


(Anatoly Kuznetsov) #3

А можно пример привести данного определения. В документации об этом ни слова нет.


(Ray Romanov) #4

Ну в документации и не будет, это из раздела программирования, пример:

<?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);


(Anatoly Kuznetsov) #5

Спасибо за ответ.
Но в данной ситуации невозможно из теста изменить значение данноой переменной.
Мне же хотелось иметь переменную значение которой я могу изменить в тесте, после чего посмотреть в последующем тесте это откорректированнное значение.


(Ray Romanov) #6

А ты пробовал:

$I->apiTTSKey = '';


(Anatoly Kuznetsov) #7

Попробывал. не работает. переменная остается такойже как изначально задана в хэлпере.


(Ray Romanov) #8

Решение, запили метод в хелпере который будет менять значение этой переменной типа:

	public function setVariable($value) {
		$this->apiTTSKey = $value;
        }

В тесте вызывай
$I->setVariable('новое значение');


(5am) #9

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


(Ray Romanov) #10

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


(5am) #11

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


(Michael Bodnarchuk) #12

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

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


(Алексей Пономарев) #13

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


(Alex Alex) #14

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