2009-04-15 6 views
12

Ich möchte die REST-API auf meiner Rails-Site testen. Was ist der einfachste/beste Weg, dies mit dem Rails-Test-Framework zu tun? Ich mache nur die üblichen findigen Sachen, also frage ich mich besonders, da dies so muffig ist, wenn es irgendeine automatische Methode gibt, dieses Zeug zu testen.Die beste Methode, Rails-XML-API zu testen?

+1

Meinst du, wie können Sie Testanfragen an die URL mit einer Art Werkzeug machen? Oder sprechen Sie davon, einen automatisierten Komponententest zu erstellen? – laz

Antwort

2

Ich würde empfehlen, Gurke zu verwenden. Gurke emuliert einen Browser und Sie können die Ergebnisse überprüfen, die es erhält. Dies funktioniert sowohl für XML-Anfragen als auch für JSON und normales HTML.

0

Wenn Sie die von Ihnen manuell erstellten APIs testen, sollten Sie dies versuchen! Scheint gut zu funktionieren!

REST Client - Simply Test REST APIs

Sie können die automatisierten Tests mit diesen, wenn auch nicht tun!

+0

Das ist nicht wirklich REST, wenn die URIs als Teil der API verfügbar sind. Es kann nur den Einstiegspunkt-URI in einer RESTful-API geben. – aehlke

2

Dies ist nicht automatisiert, aber es ist wirklich großartig, um zu sehen, was Ihre API macht.

http://hurl.r09.railsrumble.com/

+1

Ich würde ihnen den Benutzernamen/das Passwort für autorisierte Anfragen mitteilen. Ich würde vorschlagen, den Code zu greifen und in diesem Fall für den privaten Gebrauch zu installieren. https://github.com/defunkt/hurl –

1

Wir verwenden RESTClient ein Firefox-Add-on zu besuchen und zu testen REST-Services.

https://addons.mozilla.org/en-US/firefox/addon/9780

Wir haben für ein paar Monate in meinem Team diesen benutzen, und ich glaube nicht, dass wir ohne sie unsere Arbeit tun konnten. Es ist sehr einfach aufzustehen und freundlich zu bedienen.

Wenn Sie die neueste Version von Sourceforge erhalten, gibt es sogar OAuth-Unterstützung dafür, etwas, das ich in keinem anderen REST-Client gefunden habe.

http://sourceforge.net/projects/restclient/develop

Einer, der viele Vorteile ein Firefox-Add-on zu verwenden, ist, dass es Querplattform ist. Wir verwenden dasselbe Tool (RESTclient) für alle Mitglieder unseres Teams, obwohl wir verschiedene Betriebssysteme verwenden (Mac, Linux, Windows).

1

können Sie versuchen, curl

Verwendung --form-string Formulardaten an den Server

(1)

curl --form-string "book_key=BOOK1234" --form-string "author=Gandhi" -X PUT 'http://localhost:3000/api/show_all_books_of_a_particular_author?params1=value1&param2=value2' 

In der Steuerung passieren erhalten Sie params['book_key']=BOOK1234 und params["author"]="Gandhi"

Verwendung -F "[email protected];type=application/msword;"

(2)

curl -F "[email protected]_experiments_with_truth.pdf;type=application/pdf;" --form-string "author=Gandhi" --form-string "[email protected]" -X PUT 'http://localhost:3000/api/submit_a_pdf_book?params1=value1&param2=value2' 

In der Steuerung werden Sie params['email]="[email protected]" und params["author"]="Gandhi" und params["document"] = "File(object)" bekommen. Dies funktioniert nur, wenn sich test.doc im aktuellen Verzeichnis befindet. Vergessen Sie nicht, mime-type zu übergeben, da der Server es als "application octet-stream" nehmen kann und Code schreiben muss, um das separat zu behandeln.

5

Ich rollte meine eigene Lösung und dachte, es wäre hilfreich.Ich schrieb ein Modul, das die json, curb und addressable Edelsteine ​​verwendet, um GET, PUT, POST und DELETE Anfragen an localhost: 3000 zu senden. Es kann entweder XML (wie die ursprüngliche Frage) oder json anfordern. Es gibt den Antworttext als Hash zurück. Es ist meist ein Wrapper um den Randstein, von dem ich denke, dass er eine horrende Syntax hat.

Beachten Sie, dass ich meine api_key automatisch lade. Dies kann deaktiviert werden, indem :api_key => false übergeben oder unter Verwendung von api_key => "wrong" gebrochen wird. Möglicherweise möchten Sie dies auslassen oder es so ändern, dass es zu Ihrem Authentifizierungsschema passt.

Hier ist das Modul:

module ApiTesting 
    # requres the json, curb, and addressable gems 

    require "addressable/uri" 

    def api_call(path, verb, query_hash={}, options={}) 
    options.reverse_merge! :api_key => "abc1234", :format => "xml" 
    query_hash.reverse_merge!({:api_key => options["api_key"]}) if options[:api_key] 
    query = to_query_string(query_hash) 
    full_path = "http://localhost:3000/#{path}.#{options[:format]}?#{query}" 
    response = case verb 
     when :get 
     Curl::Easy.perform(full_path) 
     when :post 
     Curl::Easy.http_post("http://localhost:3000/#{path}.#{options[:format]}", query) 
     when :put 
     Curl::Easy.http_put(full_path, nil) 
     when :delete 
     Curl::Easy.http_delete(full_path) 
    end 
    case options[:format] 
     when "xml" 
     Hash.from_xml(response.body_str) 
     when "json" 
     JSON.parse(response.body_str) 
    end 
    end 

    private 

    def to_query_string(val) 
    uri = Addressable::URI.new 
    uri.query_values = val 
    uri.query 
    end 

end

Und hier sind einige einfache Beispiele: Anfordern Ressourcenattribute mit GET:

api_call("calls/41", :get)

Erstellen von Ressourcen mit POST:

api_call("people", :post, {:person => {:first => "Robert", :last => "Smith" } })

Aktualisierung Ressourcen mit PUT:

api_call("people/21", :put, {:person => { :first => "Bob" } })

Löschen von Ressourcen mit DELETE:

api_call("calls/41", :delete)

automatische Einfügen von api_key Ausschalten:

api_call("calls/41", :get, {}, {:api_key => false})

Verwenden Sie die falsche api_key:

api_call("calls/41", :get, {}, {:api_key => "wrong"})

Verwendung als json (Standard: xml):

api_call("calls/41", :get, {}, {:format => "json"})
+1

Warum rollen Sie das nicht in ein Juwel, das Schienen während des Testens nutzen können? – masukomi

+0

Sie sollten es auf jeden Fall ein Juwel machen. Gut gemacht –

Verwandte Themen