2010-11-22 3 views
4

Ich sollte freundlich zu meinen Web-Service-Kunden sein und ihnen ein paar nette Beispiele bieten, auch wenn es keinen Spaß macht, einen großen XML-Anforderungstest zu führen. Gibt es bessere Möglichkeiten, ein guter WS-Anbieter zu sein?Automatisiertes Testen der Rails-App mit echter XML- und JSON-Anfrage/-Antwort, um als API-Dokumentation zu dienen?

Ich habe keine HTML. Die App akzeptiert sowohl XML als auch JSON. Um die Gültigkeit der API-Beispiele (sowohl XML als auch JSON) zu gewährleisten, möchte ich ihr OK in einer Integrationssuite beweisen.

In Ihrer Antwort möchte ich einige Beispiele sehen, nicht nur "Gurke/Webrat/Capybara versuchen". Es ist schwer, Howto ohne HTML zu finden. Danke für die Hilfe!

Antwort

1

Ich hatte dieses Standalone-Skript, mir ermöglicht XML-Anforderung zu senden, sondern erfordern einen Server:

require 'rubygems' 
require 'net/http' 
require 'json' 
url = URI.parse('http://localhost:3030/myresource.xml') 
request = Net::HTTP::Post.new(url.path) 
request.content_type="text/xml" 
request.basic_auth('user', 'secret') 
request.body = "<?xml version='1.0' encoding='UTF-8'?><somedata><name>Test Name 1</name><description>Some data for testing</description></somedata>" 
response = Net::HTTP.start(url.host, url.port) {|http| http.request(request)} 
puts response 

schließlich war ich in der Lage, dies zu tun, ohne einen Server Inbetriebnahme rspec mit 2. dies in einem Putting Spec-Datei unter spec/requests ermöglicht es mir, es in meiner App ohne Webrat oder Capybara zu tun.

für XML

post("/myresource.xml", 
    some_xml_string, 
    {"CONTENT_TYPE" => "text/xml", 
     "HTTP_AUTHORIZATION" => ActionController::HttpAuthentication::Basic.encode_credentials("user", "secret")}) 

und JSON

post("/myresource.json", 
     some_json_string, 
     {"CONTENT_TYPE" => "application/json", 
     "HTTP_AUTHORIZATION" => ActionController::HttpAuthentication::Basic.encode_credentials("user", "secret")}) 

Jetzt denke ich, dass ich die some_xml_string von einer Remote-Ressource aufbauen kann wie meine Dokumentation xml oder JSON-Datei (einige http: // Ressource), zum Beispiel. Ja, es ist mehr zu warten und der Test wird fragil sein. Ich muss darüber mehr nachdenken ... Das Ändern von APIs, die von externen Leuten benutzt werden, ist nicht leicht zu nehmen, immer eine Menge Kompromisse. Bessere Vorschläge sind willkommen!

2

Da Sie die ausgefallenen Funktionen von webrat/capybara zur Ausführung von JavaScript oder zum Umgang mit beliebigem HTML nicht benötigen, ist es sinnvoll, einfach die basic integration test support from rails zu verwenden.

Ich würde die API-Beispiele in einer Form speichern, die einfach in XML oder JSON umgewandelt werden kann. Verwenden Sie diese Datei dann im Integrationstest, damit beide Formattypen getestet werden und nur eine Darstellung der Testanforderungen beibehalten wird . Sie können auch eine Aufgabe schreiben, um daraus API-Beispiele für die Dokumentation zu generieren.

Der vollständige Antworttext von einem beliebigen API-Aufruf in Ihren Tests wird in @ response.body gespeichert, und Sie können das wie gewünscht analysieren/überprüfen.

+0

Wie "generiere ich die API-Beispiele für die Dokumentation daraus"? – oma

+0

Ich denke, du meinst, ich sollte 'some_hash.to_xml' und' some_hash.to_json' verwenden. Ich habe bereits viele Tests, die Hashes an den Controller senden, also könnte ich damit gehen. Wie dokumentierst du deine APIs anderen? – oma

Verwandte Themen