Работа с $_SESSION и Behat + mink + selenium

Чтобы использовать систему, которую я пытаюсь протестировать, вы должны быть авторизованным пользователем. После входа в систему создается переменная $_SESSION, содержащая идентификатор пользователя и имя пользователя, и пока вы вошли в систему. Этот сеанс всегда проверяется, и если эта переменная сеанса не существует, пользователь перенаправляется на страницу входа. . Я могу войти с помощью behat, но как только он входит в систему, меня перенаправляют обратно на страницу входа. Если я прокомментирую строки, отвечающие за проверку $_SESSION, все будет работать как положено. Ребята, вы знаете какой-нибудь способ войти в систему и сохранить сессию? Я прочитал много решений, использующих laravel или symfony, но я не использую никакой фреймворк.

Вот код функции:

Feature:
    In order to use the system, the user needs a valid login first

Scenario: Loading the log in page
    Given I am on "/login.php"
    Then I should see "Login"

@javascript
Scenario: Logging in with the right credentials 
    Given I am signed in
    And I am on "/students"
    And I wait 10 seconds
    Then I should see "logout"

А вот часть кода контекста mink:

/**
 * @Given /^(?:|I )am signed in$/
 */
public function signIn()
{

    session_start();
    $_SESSION['admin']["user_name"] = 'admin';
    $_SESSION['admin']["id"] = '1';
    $this->getSession()->getDriver()->setCookie(session_name(), session_id());
    session_commit();
}

person Supwr    schedule 08.05.2015    source источник
comment
Итак, вы имеете в виду, что сессия завершена после того, как вы запустите еще один набор тестов?   -  person Stan E    schedule 08.05.2015
comment
Нет. Я имею в виду: если у меня есть сценарий, в котором я вхожу в систему и меня перенаправляют на следующую страницу, которая проверяет, есть ли у меня сеанс администратора, меня выгоняют. Как будто этот сеанс администратора никогда не был установлен.   -  person Supwr    schedule 08.05.2015
comment
Это странно. Кэм ты обуваешь годовые тесты?   -  person Stan E    schedule 09.05.2015
comment
Я продолжал искать какое-то решение. Нет успеха.   -  person Supwr    schedule 14.05.2015
comment
Вы нашли решение?   -  person Thomas Fournet    schedule 18.06.2018


Ответы (1)


Суперглобальная переменная PHP $_SESSION будет сбрасываться после каждого сценария. Вы можете вызвать логин в каждом Scanrio, чтобы свести к минимуму вашу проблему.

/* @Given I am logged in as :username with password :password
 *
 * @param $username
 * @param $password
 */
public function iAmLoggedInAs($username, $password)
{
    $session = $this->getSession();

    $session->visit("[URL]");

    $page = $session->getPage();

    $page->find("named", array("id_or_name", "[id]"))->setValue($username);
    $page->find("named", array("id_or_name", "[id]"))->setValue($password);
    $page->find("named", array("id_or_name", "[submit button]"))->click();
}
person HelloWorldComputing    schedule 12.12.2018