PHP изменяет значения $ _SESSION в тестах

1

Мне нужно протестировать веб-приложение PHP. Приложение представляет собой один блок процедурного кода (в index.php), контролируемый переменными сеанса. Определенные потоком управления, включены другие файлы, которые также являются процедурными блоками php (xy.inc) и изменяют переменные сеанса. Например:

header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Content-Type: text/html; charset=utf-8");
session_name("some_name");
session_start();

$_SESSION['some_key'] = 'some_value';
if($_SESSION['key1'] == 1){
  //include some file that in the end sets $_SESSION['key1'] = 0 
}
else if($_SESSION['key2'] == 1){
  //Do something
  $_SESSION['key2'] = 0;
  $_SESSION['keyX'] = 'someOtherControlValue';
}
//....Lots of code
$SESSION['whatever'] = 'justAnotherValue';
//..more code, more $_SESSION checks and so on

Рефакторинг не является вариантом (на данный момент?), Поэтому я просто пытаюсь запустить хотя бы некоторые базовые тесты, не мешая кодеру "стиль программирования".

Есть ли способ доступа (и изменения) свойств $ _SESSION в приемочных тестах? Я хочу использовать Codeception для своих тестов (но я открыт для альтернатив).

Я хочу достичь чего-то вроде (псевдо)

// setup test db etc.
get('/');
assert(title == 'the title');
// change some control values
$_SESSION['myDatabase'] = 'myTestdb';
$_SESSION['SomeKeyForFuctionIWantTest'] = 'myValue';
get('/');
assert($_SESSION['SomeKeyForFuctionIWantTest'] == 'myValue');
assert(getSomeElementCreatedByFunction() != null);
assert(somethingIsInTheDatabase);

У меня мало опыта работы с php и session-management (и я кодирую в ООП), может ли кто-нибудь помочь мне?

примечание: нет рамок, mvc или всего остального

  • 0
    Вы хотите изменить данные сеанса в середине выполнения или будет достаточно загрузки другого набора в session_start ()? В первом случае: действительно? Почему? В последнем случае: возможно, написание и настройка другого обработчика сеанса поможет.
  • 0
    @VolkerK: мне нужно читать и записывать значения сеанса после просмотра страницы (так что php уже был выполнен), например 1. чтение сеанса и изменение var x 2. загрузка страницы '/', которая использует var x и устанавливает некоторые другие vars 3. прочитать сессию и изменить var y 4. загрузить страницу '/' (...) Я должен знать о текущем состоянии между загрузками страниц (состояние сеанса). Не могли бы вы дать мне минимальный пример того, как я могу интегрировать пользовательский SessionHandler в index.php? Это просто вызов session_set_save_handler () в классе или мне нужно изменить index.php, чтобы фактически использовать класс?
Теги:
testing
session
legacy-code

1 ответ

0

Я нашел относительно простой и очень грязный взлом для этого.

При тестировании я не вызываю "/" (index.php) напрямую, а тестовую страницу. На тестовой странице по мере необходимости меняются переменные (может быть, нужен "безопасный" способ ввода моих тестовых варов здесь.).

# defined in /test.php - otherwise change path in include index
<?php
   header("Cache-Control: no-cache, must-revalidate");   
   header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    
   header("Content-Type: text/html; charset=utf-8");

   session_name("my_session_name");
   session_start();

   $_SESSION['TESTME'] = 'bla';

   session_write_close();
   session_destroy();

   include 'index.php';
?>

В index.php я могу видеть $ _SESSION ['TESTME'] == 'bla'.

Думаю, сражайтесь с огнем.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню