вторник, 15 января 2008 г.

Функциональное тестирование web приложений. Часть 1. HTML FORM-ы

Самыми распространенными объектами web приложений являются формы. Они окружают нас везде, даже когда мы их не видим. Заходя на почтовый ящик, мы заполняем форму логин, регистрируясь на форуме - форму регистрации, переводя деньги со счета на счет - форму перевода. От них никуда не уйти. Именно по этой причине, я начну подробное описание функционального тестирования html форм.

Имея перед собой html страницу мы видим только графическое отображение элементов - кнопки, ссылки, текстовые поля, статический текст и т.д. Но под ними, внутри страницы спрятано подробное описание того, как они должны выглядеть, где находиться и какими свойствами обладать. Фома является уникальным объектом страницы - она невидима, но ее функции архиважны для нас, как для пользователей. Именно с ее помощью передаются данные о входе в систему, регистрации или переводе денег. Именно на ней расположены элементы, которые мы видим, и в которые вводим информацию.

Зададимся вопросом как протестировать форму:
- Как узнать, что данные отправились правильно?
- Как узнать, что невозможно отправить некорректные данные?
- Как узнать, что наша конфиденциальная информация не попадет в руки не честных людей?
Ответ прост:
1. надо проанализировать метод отправки данных,
2. надо проверить, что корректные данные передаются правильно, а некорректные - не передаются.
То есть надо протестировать функциональность формы. Это можно сделать черным ящиком, просто заполняя формы перебирая разнообразные тестовые данные и проверяя их отображение на страницах. Подобный метод, конечно же даст вам некоторую гарантию, что данные передаются, и сохраняются на сервере, но вот будет ли это 100% гарантия того, что все проверки реализованы корректно, и что нет лазейки для записи невалидной информации? - я так не думаю. Именно об этих самых хитрых тест кейсах мы и поговорим.

Далее будем следовать следующему плану:

  1. Анализ формы
  2. Тест Кейсы
  3. Выводы

1. Анализ формы


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

<FORM method='...' action='...'>
... список элементов на форме
</FORM>

Так выглядит, обычная форма. Вместо "..." конечно же идут данные. О роли которых мы поговорим дальше:
  • method - говорит нам о том, как будут отправляться данные. 2 основных метода: GET и POST. Простым языком говоря, если форма отправляет данные методом GET, то параметры формы будут переданы через URL, если методом POST - передача данных будет закрытая. Уже на этом этапе мы можем сказать, что с позиции безопасности (security) не рекомендуется, а точнее нельзя использовать метод GET в формах, где будут передаваться конфиденциальные данные.

  • action - параметр содержит скриптовый метод или страницу которая будет открыта при выполнении действия submit.


Как сделать submit форме?
  1. Нажать кнопку, результатом которого будет submit
  2. Выполнить submit напрямую из адресной строки (при помощи javascript)
  3. Используя сторонние инструменты (httpunit, htmlunit или другие), выполнить действие submit


2. Тест кейсы


Если обработка введенных данных происходит при нажатии кнопки через событие onclick, а в свойстве формы action стоит только страница перехода, используя 2 последних способа submit формы, то мы можем передать данные в заведомо некорректном виде. Отсюда следует, что во избежании излишних проблем данные должны валидироваться на серверной стороне.

Если форма содержит элементы с свойством hidden, которые не видны в браузере на тестируемой странице, то рекомендую, используя сторонние инструменты, поиграть с данными, передающимися этими элементами. Иногда они могут содержать порядковые номера или булевые флаги записей, значение которых может вызывать критические ошибки.

Операция submit посылает запрос на сервер, который можно перехватить сторонними инструментами, например httpwatch. Перехватив запрос, мы можем менять его как захотим, посылая на сервер, с любыми значениями полей, не заполняя при этом форму. Причем в настоящий момент появились инструменты, способные перехватывать и посылать как GET так и POST запросы. Именно по этой причине, такого рода тест кейсы очень важны, так как любой пользователь интернета сможет скачать такой инструмент и совершить подобную операцию, в лучшем случае ради смеха, в худшем - с корыстным умыслом.

3. Выводы


На самом деле тест кейсов может бесконечное множество, все зависит от реализации той или иной функциональности с помощью форм. По этой причине, я рекомендую индивидуальный подход к каждому объекту тестирования.

P.S. Я специально не писал примеры, submit форм, и изменения параметров элементов т.к. эту статью могут читать не только люди обеспечивающие качество, но и те самые "не честные люди", о которых я упоминал выше. По всем подобным вопросам обращайтесь лично.

1 комментарий:

Анонимный комментирует...

Статья очень такая "обзорная", действительно не хватает примеров, конкретики и структурированности. Отличия Post и Get запросов освещены хорошо. И все-таки автор заслуживает респект и благодарность :)

Условия копирования публикаций:

Все публикации в данном блоге являются частной собственностью авторов. Любое копирование информации допускается только при условии указания имени автора и активной ссылки на источник.