2015-05-22 17 views
12

Sto pianificando un'applicazione RESTful Zend Framework 2 basata su Apigility. Per i test unitari e probabilmente anche per i test del database verrà utilizzato PHPUnit. Ora sto per definire tesgin funzionale per l'applicazione.Come progettare test funzionali in un'applicazione ZF2 RESTful?

"Test funzionale" significa per me il test della funzionalità reale. Ottiene anche un aspetto di test di integrazione, dal momento che l'applicazione viene poi testata "intermodularmente", quindi è un test attraverso le unità/moduli. (è la mia comprensione del test funzionali corretto?)

Per questo test reale richiesta verrà inoltrata e le responces rispetto alle aspettative. Con le richieste di scrittura potrebbe essere un po 'più complesso, ma per semplificare consideriamo solo il caso GET. (giusto?)

A questo scopo utilizza di test comportamento sembra fare sence. (In realtà io semplicemente non vedo altri approcci adeguati.) (giusto?)

Se uno dei miei passaggi logici è falso, per favore correggetemi.

Quali strumenti di test del comportamento possono essere utilizzati nel contesto di un'applicazione RESTful PHP (ZF2)? PHPUnit Story Extension? behat? phpspec? Altri quadri? O magari testare direttamente su PHPUnit (definendo una suite di test separata ed eseguendo test di comportamento delle classi di test con chiamate API)?

Oppure è tutto sbagliato e il test funzionale richiede un approccio completamente diverso?

+2

sto votando per chiudere questa domanda in quanto fuori tema, perché sembra più adatto sopra a http://programmers.stackexchange.com/ –

+0

Grazie per il tuo commento. Penso che questa domanda possa essere pubblicata su programmers.stackexchange.com, ma questo posto è corretto pure. Ma comunque, anche se non fosse, non lo chiuderei, ma lo sposterei semplicemente su programmers.stackexchange.com. – automatix

+0

È più adatto a programmers.SE perché in questa fase è più concettuale piuttosto che "Ho questo codice, come risolverei questo errore". Sentiti libero di c & p a programmers.SE ed elimina questo:: ' –

risposta

3

Behat è uno strumento perfettamente accettabile per test di comportamento contro un'applicazione Apigility (o qualsiasi applicazione).

Se parli di API in particolare (di solito Apigility), puoi anche guardare a Dredd from apiary.io. E 'un ottimo strumento per il test dopo aver documentare l'API (un sacco di altri vantaggi di fare anche quello)

+0

Puoi aggiungere alcuni esempi di codice? – Wilt

3

Tutti i vostri esempi di strumenti (PHPUnit Story Extension, Behat, phpspec) sono legati a PHP ... In effetti , puoi ampliare la tua ricerca.

La cosa bella con il testing della scatola nera di un'applicazione Web è che non è necessario utilizzare un framework collegato con il linguaggio utilizzato "all'interno della scatola".

Ad esempio, io uso Capybara per testare le mie applicazioni Web, mentre nessuno di loro è fatto con Ruby. Scegli quello che meglio si adatta al tuo stile di test.

ho scelto Capybara per il suo approccio user-centered e la leggibilità:

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 

E se l'applicazione è più simile a un API, è possibile trovare altri tipi di linguaggi che sono più adatti per questo (come 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

Grazie per il tuo post. Non posso accettarlo e/o assegnare la taglia, dal momento che non trovo lì le risposte alle mie domande (teoriche). Ma comunque, fornisce informazioni molto utili di cui effettivamente ho bisogno, grazie per questo! +1 – automatix

Problemi correlati