|
|
|
Тест позволяющий тестировать html страничку генерируемую php скриптом.
В качестве входных данных для php странички выступает обычно 3 вещи:
В качестве результата, php-страничка обычно оставляет:
Тест использует возможности стандартной консольной утилиты 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 то
При использовании к имени файла автоматически добавляется путь к файлу, в котором лежит описание теста, так что %test_dir% использовать не надо. |
| check_session |
Флаг, указывающий нужно ли проверять значения переменных сессии после завершения работы php-скрипта. По умолчанию - false Если значение этого флага указано true, то значение переменных сессии в конце php скрипта записывается в файл с целью сравнения с эталоном. Если имя out - файла (см. выше описание параметра out) имеет вид [имя_файла].htm то
При использовании к имени файла автоматически добавляется путь к файлу, в котором лежит описание теста, так что %test_dir% использовать не надо. |
| before | Тестовые команды, запускающиеся перед запуском php скрипта. (Обычно подготавливают базу данных) |
| after | Тестовые команды, запускающиеся после запуска php скрипта. (Обычно проверяют состояние базы данных и возвращают её в первоначальное состояние) |
| spec | Идентификационная информация о тесте (имена, описание) |
| sname | Короткое название теста. Используется для вывода в ГУИ-среде и для указания пути к тесту в консольном варианте . Без перевода строк. Желательно покороче, и без пробелов. |
| fname | Полное название теста. Используется для вывода в консольном варианте системы . Без перевода строк. Предполагается, что должно поместиться в одну строку/экран. То есть желательно уложиться до 60 символов. |
| descr | Полное описание текста. Вот здесь можно писать что угодно, любой длинны и с любыми переводами каретки. В консольном и ГУИ варианте это описание можно посмотреть только специальной командой. |
Для того чтобы команда работала корректно, необходимо предварительно настроить значение переменной подстановки %php% которое и должно содержать правильный путь до консольного клиента php, причём желательно со всеми параметрами подключения и т.п.
Тест изнутри представляет собой тестовый скрипт из 4-х частей:
Для использования теста необходимо провести ряд предварительных мероприятий:
$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);
}
}
}
|
prepare_params(); |
safe_trace_session(); |
Законченный пример тестирования php-страницы приведён ниже .
|