2010-11-22 16 views
4

Je devrais être gentil avec mes clients du service web et leur servir de bons exemples, même si ce n'est pas drôle de maintenir un gros test de requête xml. Y a-t-il de meilleurs moyens d'être un bon fournisseur de WS?Application de test automatique des rails avec requête/réponse XML et JSON réelle, pour servir de documentation API?

Je n'ai pas de code HTML. L'application accepte à la fois XML et JSON, donc pour assurer la validité des exemples d'API (xml et json), je voudrais prouver leur OK dans une suite d'intégration.

Dans votre réponse, j'aimerais voir quelques exemples, pas "essayer concombre/webrat/capybara" seulement. Il est difficile de trouver comment sans html. Merci d'avoir aidé!

Répondre

1

J'ai eu ce script autonome, me permettant d'envoyer la requête XML, mais nécessitant un serveur:

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 

enfin j'ai pu le faire sans démarrer un serveur, en utilisant rspec 2. Mettre cela dans un fichier de spécifications sous spec/requests me permet de le faire dans mon application sans webrat ou capybara.

pour XML

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

et JSON

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

Maintenant, je suppose que je peux construire le some_xml_string à partir d'une ressource distante comme mon documentation fichier xml ou JSON (certains http: // ressource), par exemple. Oui, c'est plus à entretenir et le test sera fragile. Je vais devoir y réfléchir davantage ... Changer les API utilisées par des personnes externes n'est pas quelque chose à prendre à la légère, toujours beaucoup de compromis. Mieux suggère sont les bienvenus!

2

Puisque vous n'avez pas besoin des fonctions fantaisistes de webrat/capybara pour exécuter du javascript ou pour traiter du html arbitraire, il est logique d'utiliser le basic integration test support from rails. Je stocke les exemples d'API sous une forme qui peut être facilement transformée en XML ou JSON, puis j'utilise ce fichier dans le test d'intégration afin de tester les deux types de format tout en ne conservant qu'une seule représentation des requêtes de test . Vous pouvez également écrire une tâche pour générer des exemples d'API pour la documentation. Le corps de réponse complet de tout appel d'API dans vos tests sera stocké dans @ response.body, et vous pouvez l'analyser/vérifier comme bon vous semble.

+0

Comment "générer les exemples d'API pour la documentation à partir de ceci"? – oma

+0

Je suppose que vous voulez dire que je devrais utiliser 'some_hash.to_xml' et' some_hash.to_json'. J'ai déjà beaucoup de tests envoyant des hashes au contrôleur, donc je suppose que je pourrais aller avec ça .. Comment documentez-vous vos API à d'autres? – oma