|
Тест позволяющий тестировать 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-страницы приведён ниже .
|