Тестирование API : Выбор фреймворка для тестирования (PHP, Codeception или Behat)

Доступные фреймворки для тестирования

Существуют различные фреймворки для разработки приложений, которые значительно облегчают нам жизнь. Точно также существуют различные фреймворки для тестирования, которые могут использоваться для автоматического тестирования. Так какой же фреймворк использоваться? Тут все очень субъективно. У всех есть свои плюсы. Важно знать, чего вы хотите достигнуть и в какие сроки. Когда я впервые писал тесты для API, мне понадобилось 4 дня, чтобы найти подходящий инструмент, с помощью которых я мог бы автоматически тестировать все точки API и тесты перед тем, как сделать коммит. Да-да, если у вас нет автоматического инструмента, вам придется все делать вручную каждый день.

Мой проект был написан на фреймворке Lavarel 4, и небольшие поиски по гуглу привели меня к трем фреймворкам для тестирования на базе PHP.

  1. PHP Unit — это основы, а начинать с основ всегда легко
  2. CodeCeption — фреймворк для тестирования на базе BDD, не такой базовый как PHP Unit, но вполне подходящий для различного рода тестирования.
  3. Behat — это инструмент для разработоки на основе поведения. Это означает, что тесты написаны человеческими читабельными приложениями, которые описывают характеристики вашего приложения.

Теперь более детально о плюсах и минусах.

PHP Unit

PHP Unit — это базовый тестировочный инструмент, и первое, что приходит на ум в процессе написания и первое, что выдает гугл при запросе “PHP тестирование”. И PHP Unit был выпущен достаточно давно — в 2004 — что означает его самодостаточность и зрелость.

Плюсы PHP Unit:

  1. Он был выпущен давно, очень популярен, поэтому к нему подготовлена хорошая документационная база, вы сможете найти множество тренингов и ссылок на форумах Q&A.
  2. Он базовый, а значит простой. С него очень легко начинать, если вы сталкиваетесь с тестированием впервые.
  3. PHP Unit, пожалуй, самый известный инструмент для Unit тестирования, что, собственно, понятно из названия.

Минусы PHP Unit:

  1. PHP Unit идеально подходит для Unit тестирования, но API тестирование — это немного другое, поэтому, наверное, не стоит его использовать для API тестирования или приемочного тестирования, поскольку это на уровень выше Unit тестирования
  2. Возможности PHP Unit очень ограничены. Его легко понять, но по мере того, как вам будет необходимы новые уровни тестирования, вам придется комбинировать различные инструменты с PHP Unit, либо придется написать много кода, чтобы протестировать API.

Codeception

Codeception — это тестировочный фреймворк BDD. Если вы зайдете на сайт codeception.com, вы увидите различные примеры для разного рода тестирования.

Плюсы Codeception

  1. Он не такой базовый, у него есть много характеристик, подходящих для различного рода тестирования, неважно, какой у него уровень: Unit тестирование, API тестирование или BDD тестирование.
  2. Даже с большим количеством характеристик, он не такой уж и сложный. Поверьте, он проще, чем кажется на сайте Codeception.
  3. У него есть отдельные модули для множества фреймворков PHP: Symphony2, Lavarel4, Yii, Phalcon, Zend Framework. Это не означает, что Codeception поддерживает только эти фреймворки, но если вы используете именно их, Codeception обеспечит вас улучшенными характеристиками, как, например, более простой метод обнаружения ошибок и более простая отладка, хотя, иногда это может привести к использованию большего объема памяти.
  4. Он поддерживает и другие тестировочные фреймворки, если вы хотите использовать их вместе.
  5. Его тесты написаны на PHP, поэтому программисту не нужно знать какой-то другой язык.

Минусы Codeception

  1. Codeception без сомнения крут, на него вы найдете много литературы и тематических ресурсов по сравнению с PHP Unit. Хотя написан он на базе PHP Unit, поэтому на базовом уровне можно использовать документацию PHP Unit.
  2. Codeception проще, но не такой простой для начинающих, каким является PHP Unit.
  3. Codeception богат на характеристики, но все же это инструмент BDD, не направленный по факту на BDD, а его тесты написаны на PHP, поэтому если у вас нет специалистов в службе Q&A, знающих PHP, которые могли бы написать новый функционал или другой сценарий, вам придется писать тестовые сценарии самостоятельно.

Behat

Behat — это инструмент BDD. И именно для этих целей Behat и используется.

Плюсы Behat

  1. Behat — это фреймворк BDD, его язык настолько удобен для человека, что даже тот, у кого нет опыта в программировании, сможет легко написать его функционал.
  2. Как и Codeception, у Behat очень много функций.
  3. Тестирование Behat проходит очень гладко, обслуживать тесты в Behat легко, поскольку описание тестов и сами тесты осуществляется на разных уровнях.

Минусы Behat

  1. Behat без сомнения хороший инструмент BDD, но для проведения API тестирования вам, возможно, понадобится больше инструментов.
  2. Если у вас нет отдела Q&A и программиста для написания тестов, процесс написания сценариев и их определений будет достаточно сложным.
  3. Программисту необходимо будет понимать удобный для человека синтаксис под названием Gherkin.
  4. По причине своей многослойности, программисту, который ранее не использовал Behat, может понадобиться больше времени для написания тестов и понимания этого инструмента.

Заключение

Как я уже говорил, выбор тестировочного фреймворка у меня занял 4 дня, а так как я работал с Laravel 4, я выбрал Codeception. Здесь не идет речь о том, что лучше, а что хуже, просто все зависит от вашей ситуацаии. В тоге вы выбираете тот, в котором вам проще разобраться и какой проще настроить.

Я остановился на Codeception, а не PHPUnit так как потратив больше временит на него настройку и изучение, я смог сэкономить много времени на написании тестов. Behat я не стал использовать потому, что его изучение занимает намного больше времени и он использует не PHP, а Gherkin. А так как я один работал над тестами, то необходимости в использовании Gherkin не было.

Итак я исходил из своих требований. Чтобы корректно выбрать фреймворк следует всегда взвесить все плюсы и минусы и вы найдете ответ. В следующей статье мы рассмотрим как установить и настроить codeception, а также разберем структуру его каталогов.