Функциональное тестирование (FunctionalTesting) и Web
Функциональное тестирование – процесс, в ходе которого, готовая программа проверяется на соответствие требованиям того на чьи деньги мы пьем кофе. Главная задача функционального тестирования – говорить, либо “странно, но ты ничего не сломал”, либо “я так и знал, теперь чини”.
Функциональное тестирование называют также тестированием “черного ящика”, то есть тесты, в идеале, не должны ничего знать про тестируемую систему. Это позволит менять разработчиков архитектуру, язык приложения, базу данных.
Что тестировать?
Функциональное тестирование для web-сайтов подразумевает эмуляцию работы конечного пользователя: открытие страниц, переход по ссылкам, заполнение и отправка форм, проверка значений полей форм, наличие определённого текста на страницах, получение почты, отправку файлов, а также попытки взлома, и кривизну рук.
Например, есть форма регистрации. Для каждого из заполняемых полей мы должны проверить все граничные условия, даже самые извращённые. В итоге получается по 2-3 проверки на поле.
-
email (заполнен, соответствует паттерну, уникален на сайте)
-
пароль (заполнен, не содержит “нехороших” символов)
-
подтверждение пароля (заполнен, соответствует паролю)
-
псевдоним (заполнен, не содержит “нехороших” символов, уникален на сайте)
После этого мы должны проверить, что нам пришло “правильное” письмо, не пришло неправильных.
Из за использования метода addRecipient(), вместо setRecipient(), у класса PHPMailer, мы однажды разослали 15 000 писем нашим пользователям. По 50-70 штук на каждую невинную жертву. Если бы тест проверял наличие лишних писем, то все бы было хорошо, а так – по башке получили. Хорошо хоть в спам-лист не попали.
Часто функциональное тестирование выполняется специально натренированным человеком со стойкой психикой и любовью к механической работе. Его вооружают листочком с описанием теста и ограждают от окружающего мира, так как не понятно, как он отнесётся к программисту, из-за ошибки которого, ему пришлось опять полностью обходить весь сайт. Ошибаться этот тестер не должен, так как если ошибка пройдет в релиз, ее увидят все, и время ее исправления будет зависеть от ее близости к основным пользовательским “маршрутам”. Такой подход с легкой руки сослуживца получил название wiki-тестирование.
Чем тестировать?
Есть два больших лагеря продуктов для функционального тестирования:
-
Эмуляторы браузера, написанные на языке высокого уровня: httpUnit, JWebUnit, WebTester из SimpleTest
Первые немного ущербны даже идеологически, так как браузер это неотъемлемая часть веб-приложений. То есть то, что тесты проходят, совершенно не гарантирует, что приложение будет работать у конечных пользователей. Но их высокая скорость позволяет использовать их для простых задач, типа определения “битых” ссылок.
Среди вторых хочется отметить Selenium, который уже стал стандартом де факто, для автоматизации функционального тестирования веб-приложений, ибо:
-
для описания тестов используется HTML
-
поддерживаются все популярные браузеры
-
распространяется под лицензией Apache 2
-
начинался проект под патронажем ThoughtWorks, владельцем которой является, некто, Мартин Фаулер
Продолжение следует…