SourceForge.net Logo
prevtopnext
Система тестирования izh_test
    Виды тестов
        Адаптированные тесты и тестовые команды.
php - Тестирование html-странички, сгенерированной php

Тест позволяющий тестировать html страничку генерируемую php скриптом.

В качестве входных данных для php странички выступает обычно 3 вещи:

  1. параметры, передаваемые методом GET
  2. параметры, передаваемые методом POST
  3. переменные сессии
  4. содержимое СУБД
Описываемый тест позволяет передавать все эти параметры скрипту в адаптированных терминах.

В качестве результата, php-страничка обычно оставляет:

  1. текст html-странички
  2. переменные сессии
  3. содержимое СУБД
Данный тест позволяет в адаптированных терминах описывать все эти вещи и сравнивать их с эталонными.

Тест использует возможности стандартной консольной утилиты php.

Полное описание теста выглядит как:
<php>
  <spec>
    <sname>test_short_name</sname>
    <fname>test full name</fname>
    <descr>test description</descr>
  </spec>
  <before> .. script items to run before php .. </before>
  <script>a.php</script>
  <out>a.html</out>
  <get>
    <par><name>get name 1</name><value>get value 1</value></par>
    <par><name>get name 2</name><value>get value 2</value></par>
    ...
  </get>
  <post>
    <par><name>post name 1</name><value>post value 1</value></par>
    <par><name>post name 2</name><value>post value 2</value></par>
    ...
  </post>
  <session>
    <par><name>session name 1</name><value>session value 1</value></par>
    <par><name>session name 2</name><value>session value 2</value></par>
    ...
  </session>
  <check_session>false</check_session>
  <after> .. script items to run before php .. </after>
</php>
здесь
script Путь до конкретного php скрипта. К нему автоматически добавляется %test_dir% .
getНабор параметров, передаваемых php скрипту методом GET.
postНабор параметров, передаваемых php скрипту методом POST.
session Переменные, хранящиеся в сессии вместе с их значениями, которые получает php скрипт в тестовом варианте.
parОписание конкретной переменной/параметра.
nameИмя переменной/параметра.
valueЗначение переменной/параметра.
out

Базовое название файла, в котором будет сохраняться результирующая html страничка.

Если название имеет вид [имя_файла].htm то

  • имя файла-результата строится как [имя_файла].result.htm,
  • имя файла-эталона как [имя_файла].etalon.htm,
  • имя файла-разницы как [имя_файла].diff.

При использовании к имени файла автоматически добавляется путь к файлу, в котором лежит описание теста, так что %test_dir% использовать не надо.

check_session

Флаг, указывающий нужно ли проверять значения переменных сессии после завершения работы php-скрипта.

По умолчанию - false

Если значение этого флага указано true, то значение переменных сессии в конце php скрипта записывается в файл с целью сравнения с эталоном.

Если имя out - файла (см. выше описание параметра out) имеет вид [имя_файла].htm то

  • имя файла-результата со значениями переменных сессии строится как [имя_файла].ses.result.txt,
  • имя файла-эталона со значениями переменных сессии как [имя_файла].ses.result.txt,
  • имя файла-разницы со значениями переменных сессии как [имя_файла].ses.diff.

При использовании к имени файла автоматически добавляется путь к файлу, в котором лежит описание теста, так что %test_dir% использовать не надо.

before Тестовые команды, запускающиеся перед запуском php скрипта. (Обычно подготавливают базу данных)
after Тестовые команды, запускающиеся после запуска php скрипта. (Обычно проверяют состояние базы данных и возвращают её в первоначальное состояние)
Спецификатор spec стандартный для всех тестов:
spec Идентификационная информация о тесте (имена, описание)
sname Короткое название теста. Используется для вывода в ГУИ-среде и для указания пути к тесту в консольном варианте . Без перевода строк. Желательно покороче, и без пробелов.
fname Полное название теста. Используется для вывода в консольном варианте системы . Без перевода строк. Предполагается, что должно поместиться в одну строку/экран. То есть желательно уложиться до 60 символов.
descr Полное описание текста. Вот здесь можно писать что угодно, любой длинны и с любыми переводами каретки. В консольном и ГУИ варианте это описание можно посмотреть только специальной командой.

Для того чтобы команда работала корректно, необходимо предварительно настроить значение переменной подстановки %php% которое и должно содержать правильный путь до консольного клиента php, причём желательно со всеми параметрами подключения и т.п.

Тест изнутри представляет собой тестовый скрипт из 4-х частей:

  1. Тестовые команды, перечисленные в разделе before. (Подготовка тестовых данных в СУБД)
  2. Команда exec_check запускающая непосредственно php-скрипт и проверяющая результирующую страничку. При этом в переменной подстановки %php% должен располагаться путь до консольного интерпретатора php.
  3. Команда check , проверяющая файл с записанными значениями переменных сессии. В случае если не выставлен флаг check_session, эта часть отсутствует.
  4. Тестовые команды, перечисленные в разделе after. (Проверка состояния СУБД и возвращение её в исходное состояние)

Для использования теста необходимо провести ряд предварительных мероприятий:

  1. Выставить переменную подстановки %php%, которая должна содержать путь до консольного варианта php интерпретатора.
  2. Подключить к тестируемой странице модуль izh_test.php, который содержит следующие код:
    
    $filename_to_out_session= "";
    $root_path= "";
    $use_test_time= false;
    $test_time_count= 0;
    
    function prepare_root_path()
    {
      global $query_params, $root_path;
      if ($query_params["test_depth"]=="")
      {
        $root_path="";
      }
      else
      {
        $root_path="htdocs/";
        for ($i= 0; $i<$query_params["test_depth"]; $i++)
        {
          $root_path= "../".$root_path;
        }
      }
    }
    
    function mysql_get_time()
    {
      global $use_test_time, $test_time_count;
      if (!$use_test_time)
      {
        return "now()";
      }
      else
      {
        $test_time_count++;
        return "DATE_ADD('2000-01-01 23:59:59',INTERVAL ".$test_time_count." DAY)";
      }
    }
    
    function prepare_params()
    { 
      global $HTTP_POST_VARS, $HTTP_GET_VARS, $HTTP_SESSION_VARS;
      global $argv, $argc;
      global $query_params;
      global $test_mode;
      global $filename_to_out_session, $use_test_time;  
      $query_params= array_merge($HTTP_GET_VARS,$HTTP_POST_VARS);
      if ($argc>1)
      {
        $test_mode= 1;
        for ($i= 1; $i<$argc; $i++)
        {
          $arg= $argv[$i];
          if ($arg=="use_test_time")
          {
            $use_test_time= true;
          }
          else
          {
            $pos= strpos($arg,"=");
            if (is_integer($pos))
            {
              $name=  substr($arg,0,$pos);
              $value= substr($arg,$pos+1);
              if ($name=="outs")
              {
                $filename_to_out_session= $value;
              }
              else if ($name{0}=="s")
              {
                $name= substr($name,1);
                $HTTP_SESSION_VARS[$name]= $value;
              }
              else if ($name{0}=="p")
              {
                $name= substr($name,1);
                $query_params[$name]= $value;
                $HTTP_POST_VARS[$name]= $value;
              }
              else if ($name{0}=="g")
              {
                $name= substr($name,1);
                $query_params[$name]= $value;
                $HTTP_GET_VARS[$name]= $value;
              }
            }
          }
        }
      }
      prepare_root_path();
    }
    
    function safe_trace_session()
    {
      global $filename_to_out_session;
      global $HTTP_SESSION_VARS;
      if ($filename_to_out_session!="")
      {
        $fp= fopen($filename_to_out_session, "wb");
        if ($fp!=-1)
        {
          if (sizeof($HTTP_SESSION_VARS)!=0)
          {
            ob_start();
            ob_flush();
            print_r($HTTP_SESSION_VARS);
            $session_text= str_replace("\n","\r\n",ob_get_contents());
            fwrite($fp,$session_text);
            ob_clean();
          }
          fclose($fp);      
        }
      }
    }
    
  3. В начало php-скрипта вставить вызов
    prepare_params();
    который подготовит соответствующий входные параметры и параметры сессии.
  4. В конец php-скрипта вставить вызов
    safe_trace_session();
    который при необходимости осуществит сохранение переменных сессии для их контроля.

Законченный пример тестирования php-страницы приведён ниже .


prevtopnext

SourceForge.net Logo