2015-05-22 2 views
12

Я планирую приложение RESTful Zend Framework 2, основанное на Apigility. Для модульного тестирования и, возможно, также для тестирования базы данных будет использоваться PHPUnit. Теперь я собираюсь определить функциональный тезис для приложения.Как разработать функциональное тестирование в приложении RESTful ZF2?

«Функциональное тестирование» означает для меня тестирование реальной функциональности. Он также получает аспект интеграции, так как приложение затем тестируется «межмодулярно», поэтому это тестирование через модули/модули. (мое понимание функционального тестирования правильного?)

Для этого испытания реальной запрос будет отправлена ​​и по сравнению с Своими замечаниями ожидания. С запросами на запись это может быть немного сложнее, но чтобы это было просто, рассмотрим случай GET только в первую очередь. (справа?)

Для этой цели использование методов тестирования, по-видимому, имеет смысл. (На самом деле я просто не вижу каких-либо других соответствующих подходов.) (правый?)

Если один из моих логических шагов является ложным, пожалуйста, поправьте меня.

Какие средства тестирования поведения могут использоваться в контексте приложения RESTful PHP (ZF2)? PHPUnit Story Extension? behat? phpspec? Другие рамки? Или, может быть, прямое тестирование через PHPUnit (определение отдельного набора тестов и выполнение в тестах поведения тестовых классов с помощью API-вызовов)?

Или все это неправильно, и для функционального тестирования необходим совершенно другой подход?

+2

Я голосую, чтобы закрыть этот вопрос не по теме, потому что кажется более подходит более в http://programmers.stackexchange.com/ –

+0

Спасибо за ваш комментарий. Я думаю, этот вопрос действительно можно было бы опубликовать на programers.stackexchange.com, но это место также верно. Но в любом случае, даже если нет, я бы не закрылся, а просто переместил его на programers.stackexchange.com. – automatix

+0

Это больше подходит для программистов.SE, потому что на этом этапе это скорее концептуально, чем «у меня есть этот код, как бы исправить эту ошибку». Не стесняйтесь c & p для программистов.SE и удаляйте этот ':)' –

ответ

3

Behat - вполне приемлемый инструмент для тестирования поведения против приложения Apigility (или любого приложения).

Если вы говорите об API-интерфейсах (в основном это Apigility), вы также можете посмотреть Dredd from apiary.io. Это отличный инструмент для тестирования после документирования вашего API (много других преимуществ от этого)

+0

Можете ли вы добавить примеры кода? – Wilt

3

Все ваши примеры инструментов (PHPUnit Story Extension, behat, phpspec) привязаны к PHP ... На самом деле , вы можете расширить свой поиск.

Приятная вещь с тестированием черного ящика веб-приложения заключается в том, что вам не нужно использовать фреймворк, связанный с языком, который вы использовали «внутри коробки».

Например, я использую Capybara для проверки своих веб-приложений, но ни один из них не выполнен с помощью 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(); 
+0

Спасибо за сообщение. Я не могу принять его и/или наградить щедростью, так как я не нахожу ответы на мои (теоретические) вопросы. Но в любом случае, он предоставляет очень полезную информацию, которая мне действительно нужна, спасибо за это! +1 – automatix

Смежные вопросы