6 Stimmen

Testen von RESTful API mit Cucumber in einer Front-End-losen Anwendung

Hallo, ich habe kein Frontend in meiner App. Ich bin bereit, nur eine RESTful API zu veröffentlichen, die von verschiedenen Clients verwendet werden kann. Irgendwelche Hinweise, wie ich vorgehen sollte, um es mit Cucumber zu testen? Jede Aktion im Controller generiert nur einen XML-Feed. Irgendwelche Hinweise oder Vorschläge?

9voto

schastar Punkte 236

El visit Funktion von webrat akzeptiert eine http_method als zweiten Parameter. Sie können Ihre API auch wie in der folgenden Cucumber-Regel testen:

When /^I restfully delete (?:|the )user "([^\"]*)"$/ do |login|
  visit(path_to("user \"#{login}\" page"), :delete)
end

7voto

Kazim Zaidi Punkte 494

Ich denke, Webrat ist mehr als das, was Sie brauchen. Für das Testen von XML-Feeds brauchen Sie keinen Browsersimulator wie Webrat, der Seiten lädt und das gesamte Markup (Links, Formulare usw.) analysiert, wenn Sie eigentlich gar keine HTML-Seiten haben.

Sie brauchen eher etwas wie Curl ( http://curl.haxx.se ) oder Curb (auf rubyforge, das sind Ruby-Bindings für Curl), oder Patron (auf rubyforge).

Diese Bibliotheken können einen Anfrage-Header nach Ihren Wünschen erstellen (z.B. Einstellung des Content-Typs, Auswahl zwischen GET PUT POST DELETE HEAD usw.) und die Antwort erhalten, und wahrscheinlich 302 Weiterleitungen folgen, wenn nötig.

Die zurückgegebene Antwort kann dann in ein XML-Objekt umgewandelt werden, und die für Ruby verfügbaren XML-Parser können zum Testen der Ausgabe verwendet werden. Sie können auch XMLMapping-Klassen (auf rubyforge) schreiben, um die XML-Ausgabe in Ruby-Objekte zu konvertieren und deren Attribute usw. zu testen. Dies ist IMHO viel sauberer.

5voto

alvinsj Punkte 855

Jayzes hat seine Cucumber Test Schritte Beispiele mit Rack::Test::Methods, JSONpath, Nokogiri usw. geteilt, um Tests für json/xml API zu schreiben, vielleicht möchten Sie sich darauf beziehen und mehr für Ihre eigenen Schritte erstellen.

https://github.com/jayzes/cucumber-api-steps

2voto

Praveen Angyan Punkte 7152

Sobald Sie Ihre RESTful-Routen eingerichtet haben, sollten Sie Webrat verwenden können, um die verschiedenen Routen zu besuchen. Sie können dann testen, ob jede Route XML zurückgibt, das Ihren Erwartungen entspricht.

In diesem Blogbeitrag wird beschrieben, wie man die XML-Ausgabe in RSpec testet: Testen der XML-Ausgabe

Webrat ist ein Headless Browser, was einfach bedeutet, dass Sie einen Browser simulieren können, ohne einen echten Browser wie FireFox auf Ihrem Entwicklungsrechner öffnen zu müssen. Das bedeutet, dass Sie einfach etwas wie "visit 'users/'" in Ihre definierten Schritte eingeben können und einen Benutzer simulieren, der auf Ihre Anwendung zugreift.

Schließlich wird die Pragmatisches Buch über RSpec (noch in der Beta-Phase), ist eine großartige Ressource für die gemeinsame Nutzung von Cucumber, Webrat und RSpec, um Ihre Anwendungsentwicklung mit BDD voranzutreiben.

0voto

user379217 Punkte 106

Ich habe versucht, das zu tun, und bin in einem großen Problem mit restful_authentication steckengeblieben (ich benutze AASM, eines der internen Modelle von restful_auth, wie es scheint) und kam zu dieser Lösung, um mich anzumelden:

Given /^I am logged in with a new account$/ do  
  login = "test"
  @current_user = User.new(
     :login => login,
     :password => 'generic',
     :password_confirmation => 'generic',
     :email => "#{login}@example.com",
     :state => "active"
   )
   @current_user.save
   x = User.find_by_login(login)
   x.state = "active"
   x.save!

   visit "/login" 
   fill_in("login", :with => login) 
   fill_in("password", :with => 'generic') 
   click_button
   response.body.should =~ /Logged in successfully/m
end

Modularisieren Sie es für einen saubereren Testkorpus, um das von mir gefundene Konzept zu demonstrieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X