2015-05-22 6 views
12

Ich plane eine Apigility-gesteuerte RESTful Zend Framework 2-Anwendung. Für Komponententests und wahrscheinlich auch für Datenbanktests wird PHPUnit verwendet. Jetzt bin ich dabei, funktionales Tesgin für die Anwendung zu definieren.Wie gestalte ich Funktionstests in einer RESTful ZF2-Anwendung?

"Funktionsprüfung" bedeutet für mich das Testen der realen Funktionalität. Es wird auch ein Integrationstestaspekt gegeben, da die Anwendung dann "intermodular" getestet wird, so dass es ein Testen über die Einheiten/Module hinweg ist. (Ist mein Verständnis der Funktionstests korrekt?)

Für diese Prüfung wird echte Anfrage gesendet und die Antworten mit den Erwartungen verglichen. Mit den Schreibanforderungen könnte es ein bisschen komplexer sein, aber um es einfach zu halten, betrachten wir zuerst den GET Fall. (rechts?)

Zu diesem Zweck scheint die Verwendung von Verhaltenstests Sinn zu machen. (Eigentlich einfach ich keine andere geeignete Ansätze sehen.) (rechts?)

Wenn einer meiner logischen Schritte falsch ist, kann man mich korrigieren.

Welche Verhaltenstests können im Zusammenhang mit einer RESTful PHP (ZF2) -Anwendung verwendet werden? PHPUnit Story Extension? behat? phpspec? Andere Rahmenbedingungen? Oder vielleicht direkte Tests über PHPUnit (Definieren einer separaten Testsuite und Ausführen von Verhaltenstests mit API-Aufrufen in den Testklassen)?

Oder ist das alles falsch und der Funktionstest benötigt einen völlig anderen Ansatz?

+2

ich wähle diese Frage als Wegthema zu schließen, weil es Danke mehr geeignet über bei http://programmers.stackexchange.com/ –

+0

scheint für Ihren Kommentar. Ich denke, diese Frage könnte tatsächlich auf programmers.stackexchange gepostet werden.com, aber dieser Ort ist auch korrekt. Aber egal, auch wenn nicht, würde ich nicht schließen, sondern einfach zu programmers.stackexchange.com verschieben. – automatix

+0

Es ist besser geeignet für Programmierer.SE, weil es in diesem Stadium eher konzeptionell ist als "Ich habe diesen Code, wie würde ich diesen Fehler beheben". Fühlen Sie sich frei zu c & p zu programmers.SE und löschen Sie dieses ':)' –

Antwort

3

Behat ist ein vollkommen akzeptables Werkzeug für Verhaltenstests gegen eine Apigility-Anwendung (oder irgendeine Anwendung).

Wenn Sie von APIs sprechen (die Apigility im Allgemeinen ist), können Sie auch Dredd from apiary.io betrachten. Es ist ein großartiges Werkzeug zum Testen, nachdem Sie Ihre API dokumentiert haben (viele andere Vorteile, dies zu tun)

+0

Können Sie einige Codebeispiele hinzufügen? – Wilt

3

Alle Ihre Beispiele von Tools (PHPUnit Story Erweiterung, behat, phpspec) sind an PHP gebunden ... In der Tat , können Sie Ihre Suche erweitern.

Das Schöne beim Testen einer Webanwendung in Blackbox ist, dass Sie kein Framework benötigen, das an die Sprache gebunden ist, die Sie "innerhalb der Box" verwendet haben.

Zum Beispiel, ich verwende Capybara, um meine Web-Anwendungen zu testen, während keine von ihnen mit Ruby fertig sind. Wählen Sie diejenige, die am besten zu Ihrem Test-Stil passt.

habe ich gewählt Capybara für seine benutzerzentrierten Ansatz und Lesbarkeit:

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 

Und wenn Ihre Anwendung mehr wie eine API ist, können Sie eine andere Art von Sprachen finden, die besser für diese geeignet sind (wie 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

Vielen Dank für Ihren Beitrag. Ich kann das nicht akzeptieren und/oder das Kopfgeld vergeben, da ich dort keine Antworten auf meine (theoretischen) Fragen finde. Aber auf jeden Fall liefert es sehr nützliche Informationen, die ich wirklich brauche, danke dafür! +1 – automatix

Verwandte Themen