Я планирую приложение RESTful Zend Framework 2, управляемое Apigility. Для модульного тестирования и, возможно, также для тестирования базы данных будет использоваться PHPUnit. Теперь я собираюсь определить функциональный tesgin для приложения.
«Функциональное тестирование» означает для меня тестирование реального функционала. Он также получает аспект интеграционного тестирования, поскольку приложение затем тестируется «интермодульно», так что это тестирование по всем модулям / модулям.
(Верно ли мое понимание функционального тестирования?)
Для этого тестирования будет отправлен реальный запрос и полученные ответы сопоставлены с ожиданиями. С запросами на запись это может быть немного сложнее, но для простоты давайте рассмотрим GET
бывает только первым.
(Правильно?)
Для этого, кажется, имеет смысл использовать тестирование поведения. (На самом деле я просто не вижу других подходящих подходов.)
(Правильно?)
Если один из моих логических шагов неверен, пожалуйста, исправьте меня.
Какие инструменты тестирования поведения можно использовать в контексте приложения RESTful PHP (ZF2)? Расширение истории PHPUnit? behat? phpspec? Другие рамки? Или, может быть, прямое тестирование через PHPUnit (определение отдельного набора тестов и выполнение в его тестах классов тестирования поведения с помощью API-вызовов)?
Или все это неправильно, а функциональное тестирование требует совершенно другого подхода?
Behat является вполне приемлемым инструментом для тестирования поведения приложения Apigility (или любого приложения).
Если вы говорите об API-интерфейсах конкретно (каковым является Apigility), вы также можете посмотреть на Дредд от пасеки.ио. Это отличный инструмент для тестирования после того, как вы документируете свой API (множество других преимуществ также делают это)
Все ваши примеры инструментов (PHPUnit Story Extension, behat, phpspec) связаны с PHP … Фактически, вы можете расширить свой поиск.
При тестировании веб-приложения в «черном ящике» хорошо то, что вам не нужно использовать фреймворк, связанный с языком, который вы использовали «внутри коробки».
Например, я использую Водосвинка протестировать мои веб-приложения, хотя ни одно из них не сделано с Ruby. Выберите тот, который наилучшим образом соответствует вашему стилю тестирования.
Я выбрал Capybara за его ориентированный на пользователя подход и удобочитаемость:
require 'spec_helper'
feature 'Register' do
scenario 'as a new user' do
visit '/register.html'
fill_in 'Username', :with => a_string()
fill_in 'Password', :with => 'secret'
fill_in 'Confirm password', :with => 'secret'
click_on 'submit'
expect(page).to have_content "Your account has been created"end
scenario 'not as an existing user' do
visit '/register.html'
fill_in 'Username', :with => 'hatter'
fill_in 'Password', :with => 'secret'
fill_in 'Confirm password', :with => 'secret'
click_on 'submit'
expect(page).to have_content 'username already exists'
end
end
И если ваше приложение больше похоже на API, вы можете найти другие виды языков, которые лучше подходят для этого (например, Frisby.js):
test.create('Site cookie authentication')
.post('http://cassandre.local:1337/_session', {name:'alice', password:'whiterabbit'})
.expectStatus(200)
.after(function(error, resource) {
test.create('HTTP cookie authentication use')
.get('http://cassandre.local:1337/text/Wonderland/')
.addHeader('Cookie', resource.headers['set-cookie'])
.expectStatus(200)
.toss();
})
.toss();