SourceForge.net Logo
prevtopnext
Система тестирования izh_test
    Частные случаи

PHP-страницы.

Тестирование php страниц достаточно подробно в принципе описано в разделе по тест php .

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

Итак будем тестировать начальную страницу "регистрации" некоего воображаемого портала.

Информация о зарегестрированных пользователях пусть лежит в mysql-табличке. Скрипт который инициализирует пустую базу данных назовём create_account.sql и он будет содержать следующий текст:
create database if not exists php_tests;
use php_tests;

create table Account(
  Account_id   int      NOT NULL primary key auto_increment,
  login        char(50) NOT NULL,
  password     char(50) NOT NULL,
  name         char(50) NULL,
  account_type enum('user','admin','programmer'),

  unique index (login),
  index Login_password (login,password)
) TYPE=MyISAM;

Для полноценного тестирования подготовим скрипт с тестовыми данными (test_account.sql):
use php_tests;

insert into Account
  (login,     password,     name,     account_type)
values
  ("tlogin0", "tpassword0", null,     "user"),
  ("tlogin1", "tpassword1", "tname1", "user"),
  ("tlogin2", "tpassword2", "tname2", "admin"),
  ("tlogin3", "tpassword3", "tname3", "programmer");

Для проверки состояния нашей СУБД заведём также специальный скрипт (check_account.sql):
use php_tests;

select * from Account order by Account_id desc\G

Кроме того, чтобы было легко восстанавливать исходное состояние СУБД, договоримчя в процессе тестов регистрировать только логины с префиксом "test_". Соответственно очищать СУБД после тестов можно простым скриптом (clear_test_account.sql):
use php_tests;

delete from Account where login like "test_%";

repair table php_tests.Account use_frm;
В данном случае repair нужен для того, чтобы сбрасывать счётчик автоинкрементного поля и добиться тем самым повторяемых результатов.

В качестве регистрационных данных будем принимать логин, пароль, имя и кроме того "тип" аккуонта (user, admin,account).

Подумаем какие случаи для нашей формы должны быть протестированы:

  1. Введён пустой логин
  2. Введённые пароли не совпадают
  3. Введенны пустые пароли
  4. Пользователь с таким логином уже существует
  5. Регистрация пользователя с пустым именем
  6. Регистрация пользователей разных типов:
    1. Зарегестрирован пользователь типа "user"
    2. Зарегестрирован пользователь типа "admin"
    3. Зарегестрирован пользователь типа "programmer"
    4. На вход регистрационного скрипта был подан неправильный тип пользователя "unknown_type"
Причём заметим что при удачной регистрации должно измениться состояние базы данных и переменной сессии (то есть при удачной регистрации сразу же начинается сессия для вновь зарегестрированного пользователя). Будем записывать идентификатор зарегестрированного пользователя в переменную сессии account_id.

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

Итак, тесты будут выглядеть следующим образом:
<package>

  <spec>
    <sname>sample_registrate</sname>
    <fname>tests for sample_registrate php form</fname>
    <descr>
      This is the test to illustrate testing 
      of php-pages using izh_test.
    </descr>
  </spec>

  <safe_params>
    <par><name>php</name>   <value>C:\php\cli\php.exe </value></par>
    <par><name>mysql</name> <value>C:\mysql\bin\mysql.exe </value></par>
  </safe_params>

  <tests>

    <php>
      <spec><sname>empty_login</sname></spec>
      <script>..\php\registrate.php</script>
      <out>r\empty_login.html</out>
      <post>
        <par><name>login</name><value/></par>
        <par><name>image_path</name><value>../../</value></par>
      </post>
    </php>

    <php>
      <spec><sname>wrong_password</sname></spec>
      <script>..\php\registrate.php</script>
      <out>r\wrong_password.html</out>
      <post>
        <par><name>login</name><value>login</value></par>
        <par><name>pass1</name><value>pass1</value></par>
        <par><name>pass2</name><value>pass2</value></par>
        <par><name>image_path</name><value>../../</value></par>
      </post>
    </php>

    <php>
      <spec><sname>empty_password</sname></spec>
      <script>..\php\registrate.php</script>
      <out>r\empty_password.html</out>
      <post>
        <par><name>login</name><value>login</value></par>
        <par><name>pass1</name><value/></par>
        <par><name>pass2</name><value/></par>
        <par><name>image_path</name><value>../../</value></par>
      </post>
    </php>

    <php>
      <spec><sname>existed_login</sname></spec>
      <script>..\php\registrate.php</script>
      <out>r\existed_login.html</out>
      <post>
        <par><name>login</name><value>tlogin1</value></par>
        <par><name>pass1</name><value>pass</value></par>
        <par><name>pass2</name><value>pass</value></par>
        <par><name>type</name> <value>programmer</value></par>
        <par><name>image_path</name><value>../../</value></par>
      </post>
      <before><mysql><script>..\db\clear_test_account.sql</script></mysql></before>
      <after>
        <mysql>
          <script>..\db\check_account.sql</script>
          <etalon>r\test_data.accounts.txt</etalon>
        </mysql>
      </after>
    </php>

    <php>
      <spec><sname>empty_name</sname></spec>
      <script>..\php\registrate.php</script>
      <out>r\empty_name.html</out>
      <check_session>true</check_session>
      <post>
        <par><name>login</name><value>test_login</value></par>
        <par><name>pass1</name><value>pass</value></par>
        <par><name>pass2</name><value>pass</value></par>
        <par><name>name</name> <value/></par>
        <par><name>type</name> <value>user</value></par>
        <par><name>image_path</name><value>../../</value></par>
      </post>
      <before><mysql><script>..\db\clear_test_account.sql</script></mysql></before>
      <after>
        <mysql>
          <script>..\db\check_account.sql</script>
          <etalon>r\empty_name.accounts.txt</etalon>
        </mysql>
        <mysql><script>..\db\clear_test_account.sql</script></mysql>
      </after>
    </php>

    <iterate>
      <spec><sname>types_of_account</sname></spec>
      <names><name>type</name></names>
      <tuples>
        <tuple><value>user</value></tuple>
        <tuple><value>admin</value></tuple>
        <tuple><value>programmer</value></tuple>
        <tuple><value>unknown_type</value></tuple>
      </tuples>
      <template>
        <php>
          <spec><sname>%type%</sname></spec>
          <script>..\php\registrate.php</script>
          <out>r\type\%type%.html</out>
          <check_session>true</check_session>
          <post>
            <par><name>login</name><value>test_login</value></par>
            <par><name>pass1</name><value>pass</value></par>
            <par><name>pass2</name><value>pass</value></par>
            <par><name>name</name> <value>test_name</value></par>
            <par><name>type</name> <value>%type%</value></par>
            <par><name>image_path</name><value>../../../</value></par>
          </post>
          <before><mysql><script>..\db\clear_test_account.sql</script></mysql></before>
          <after>
            <mysql>
              <script>..\db\check_account.sql</script>
              <etalon>r\type\%type%.accounts.txt</etalon>
            </mysql>
            <mysql><script>..\db\clear_test_account.sql</script></mysql>
          </after>
        </php>
      </template>
    </iterate>

  </tests>
</package>

Готовый пример можно выкачать здесь : http://www.izhsoft.com/downloads.html или здесь : http://www.sourceforge.org/projects/izh-test/

Для его использования необходимо:

  1. Скачать его и распокавать в директорию.
  2. Иметь установленный mysql. Пример тестировался с версией 4.1.7. Скачать и установить можно с сайта http://www.mysql.com .
  3. Иметь установленный php. Пример тестировался с версией 4.3.0. Скачать и установить можно с сайта http://www.php.net/ .
  4. Настроить правильно путь до php и mysql в файле tests\php_sample.itd.xml .
  5. Настроить правильно параметры соединения с mysql в файле db\mysql.bat .
  6. Настроить правильно параметры соединения с mysql в файле php\registrate.php (функция db_connect) .
  7. Запустить mysql сервер (если он не был запущен ранее).
  8. Выполнить db\prepare_test_db.bat для того чтобы создать тестовую базу с тестовым наполенением.
  9. Запустить командную строку
    itr tests\php_sample.itd.xml
    или
    itr tests\php_sample.itd.xml --gui


prevtopnext

SourceForge.net Logo