Введение

FitNesse – это веб-сервер, вики и инструмент автоматизированного тестирования программного обеспечения. Он основан на Framework for Integrated Test, разработанном Уордом Каннингемом, и предназначен для поддержки приемочного тестирования, а не модульного, поскольку позволяет создавать подробные и понятные описания функциональности системы. FitNesse позволяет пользователям разработанной системы вводить данные в специальном формате (который доступен даже не программистам). Эти данные интерпретируются, и тесты создаются автоматически. Затем эти тесты выполняются системой, а результаты возвращаются пользователю. Преимущество такого подхода – очень быстрая обратная связь от пользователей. Разработчику тестируемой системы необходимо предоставить определенную поддержку (классы, называемые "fixtures", соответствующие определенным соглашениям). FitNesse написан на Java (Мика Мартин при участии Роберта К. Мартина и других). Изначально программа поддерживала только Java, но со временем были добавлены версии для других языков (C++, Python, Ruby, Delphi, C# и т.д.).

FitNesse как метод тестирования

FitNesse изначально был разработан как удобный интерфейс для фреймворка Fit. Поэтому его задача – поддержка гибкого стиля тестирования методом «черного ящика», включая приемочное и регрессионное тестирование. В этом стиле тестирования функциональные тестировщики в проекте разработки программного обеспечения совместно с разработчиками создают тестовый набор. Тестирование в FitNesse основано на принципах тестирования «черного ящика», где тестируемая система рассматривается как «черный ящик» и оценивается по результатам, генерируемым в ответ на заданные входные данные. Функциональный тестировщик отвечает за проектирование тестов с функциональной точки зрения и их описание в FitNesse, а разработчик – за подключение FitNesse к тестируемой системе, чтобы обеспечить выполнение тестов и сравнение фактических результатов с ожидаемыми. Идея этого метода тестирования, описанная в книге "Fit for Developing Software", заключается в том, что вынужденное сотрудничество тестировщиков и разработчиков улучшает взаимопонимание системы и требований, поскольку обе группы вынуждены вырабатывать общий язык в процессе коммуникации.

FitNesse как инструмент тестирования

Тесты в Fitnesse описываются как связки входных данных и ожидаемых результатов. Эти связки представляют собой различные вариации таблицы решений. Инструмент FitNesse поддерживает несколько таких вариаций, от буквальных таблиц решений до таблиц, выполняющих запросы, и до таблиц, выражающих скрипты тестирования (то есть последовательный порядок шагов, необходимых для достижения результата). Наиболее универсальная форма – это полностью свободная таблица, которую разработчики тестов могут интерпретировать любым удобным способом. Однако все тесты выражаются в виде той или иной таблицы. FitNesse полностью ориентирована на простоту создания тестов, позволяя тестировщикам и разработчикам сосредоточиться на разработке высококачественных тестов, а не на технических деталях их выполнения. Учитывая принцип работы FitNesse, простота создания тестов обусловлена тремя факторами:
Легкое создание таблиц. Простое преобразование таблиц в вызовы тестируемой системы. Обеспечение удобства и гибкости при документировании тестов. Для удовлетворения этих требований FitNesse использует механизм вики. Вики-системы позволяют легко и быстро создавать HTML-страницы и, в частности, упрощают представление таблиц. Эти качества делают базовый язык WikiWiki идеальным выбором для "пользовательского интерфейса" FitNesse: с одной стороны, он позволяет просто выражать таблицы произвольной формы, а с другой – ограничивает содержимое этих таблиц достаточно простым текстом. Это означает, что язык WikiWiki может обрабатывать любую форму таблицы, необходимую для конкретного теста, и одновременно ограничивает содержимое таблиц буквенно-цифровым текстом, который легко сопоставить с вызовом программного обеспечения. Наконец, поскольку каждый тест в FitNesse является вики-страницей, каждую таблицу тестирования можно встраивать в текст вики, что позволяет функциональному тестировщику быстро добавлять описательный текст с разумной разметкой.

FitNesse как программный инструмент

FitNesse – это инструмент, разработанный на Java и поставляемый в виде единого исполняемого JAR-файла. Этот исполняемый файл включает в себя движок вики, встроенный веб-сервер, механизм тестирования и все необходимые ресурсы (изображения, таблицы стилей и т. д.) для создания веб-сайта в фирменном стиле FitNesse. FitNesse уделяет большое внимание простоте использования как инструменту тестирования. Поэтому он поставляется со всеми необходимыми компонентами: при запуске инструмент активирует встроенный веб-сервер, который позволяет с одинаковой легкостью публиковать тестовые страницы локально или в интернете. Встроенный сервер достаточно легкий и может работать как на ноутбуке, так и на полноценном сервере. После запуска инструмент разворачивает собственный движок вики на встроенном сервере. Этот движок вики также ориентирован на простоту, что означает, что для работы ему не требуется внешняя база данных – он просто создает файловый набор страниц вики, которые интерпретируются движком вики и обслуживаются встроенным веб-сервером. Вики по умолчанию, создаваемая инструментом, включает в себя руководство пользователя FitNesse и несколько примеров. Репозиторий документов по умолчанию создается со всем необходимым для публикации стандартной вики в стиле FitNesse (то есть вместе с базовым репозиторием страниц вики создаются все изображения, таблицы стилей, файлы JavaScript и т. д.). Движок вики достаточно прост, но предлагает все основные функции, характерные для движков вики: поисковую систему, историю изменений страниц и обзор файлов. Он также предоставляет некоторые возможности рефакторинга, позволяющие удалять, перемещать и переименовывать файлы. Кроме того, движок вики предлагает специальные функции для тестирования, такие как стандартные кнопки для запуска тестов, способы определения отдельных тестовых страниц и наборов тестов, а также историю результатов тестирования для анализа динамики. Наконец, движок предоставляет базовые средства безопасности для блокировки страниц и защиты доступа к вики.

Испытание двигателей

Фактическое сопоставление, как описано выше (а также вызов методов оснастки), выполняется тестовым движком. FitNesse поддерживает два таких движка: движок Fit и движок SLIM.

Подходит

Больше, чем просто движок, Fit – это самостоятельная тестовая среда. Он объединяет функциональность для запуска тестов, интерпретации вики-страниц и генерации выходных страниц. FitNesse изначально был создан вокруг Fit как пользовательского интерфейса, что и вдохновило название инструмента. Fit – это фреймворк, который объединяет множество задач в тестировании, вместо того чтобы чётко разделять их. Разработчик программного обеспечения платит за это тем, что фикстуры для движка Fit должны наследовать базовые классы фреймворка Fit. Это может быть неудобно в Java, поскольку фреймворк использует единственный шанс разработчика на наследование класса. Это также означает, что фикстура по своей сути является сложной конструкцией. Эти соображения побудили команду FitNesse в последние годы перейти на тестовый движок SLIM.

СЛИМ

SLIM (Simple List Invocation Method) является альтернативой Fit. Движок SLIM представляет собой реализацию протокола Slim. В отличие от объединения всех элементов вики-тестирования, движок SLIM концентрируется исключительно на вызове фикстур; он работает как отдельный сервер, который удаленно вызывается движком FitNesse wiki. Интерпретация вики-страницы и генерация страницы результатов теперь выполняются движком wiki. Движок SLIM позволяет использовать гораздо более легковесные фикстуры, представляющие собой простые POJO. Эти фикстуры не требуют расширения или использования каких-либо классов фреймворков, что упрощает их разработку и позволяет разработчику фикстур сосредоточиться на правильном и максимально простом вызове тестируемой системы. Он также оставляет возможность наследования, позволяя разработчикам фикстур создавать иерархии фикстур при необходимости.