2009-04-15 8 views
12

Je veux tester l'API REST sur mon site Rails. Quelle est la manière la plus simple/la meilleure de le faire avec le cadre de test des rails? Je ne fais que le matériel standard, donc je me demande en particulier, puisque c'est un standard de bog, s'il y a une façon automagique de tester ce genre de choses.Meilleure façon de tester l'API XML REST REST?

+1

Voulez-vous dire comment pouvez-vous faire des demandes de test à l'URL en utilisant une sorte d'outil? Ou parlez-vous de créer un test d'unité automatique? – laz

Répondre

2

Je recommanderais d'utiliser du concombre. Le concombre émule un navigateur et vous pouvez vérifier les résultats obtenus. Cela fonctionne très bien pour les requêtes XML, JSON et HTML.

0

Si vous souhaitez tester les API que vous avez créées manuellement, vous pouvez essayer cela! Cela semble bien fonctionner!

REST Client - Simply Test REST APIs

Vous ne pouvez pas faire le test automatisé avec ce bien!

+0

Ce n'est pas vraiment REST si les URI sont disponibles dans le cadre de l'API. Il ne peut y avoir que l'URI de point d'entrée dans une API RESTful. – aehlke

2

Ce n'est pas automatisé mais c'est vraiment génial pour voir ce que fait votre API.

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

+1

Je voudrais mettre en garde en leur donnant votre nom d'utilisateur/mot de passe pour les demandes autorisées. Je suggère de saisir le code et l'installation pour un usage privé dans ce cas. https://github.com/defunkt/hurl –

1

Nous utilisons RESTClient un Firefox add-on pour visiter et tester les services REST.

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

Nous utilisons dans mon équipe pendant deux ou trois mois et je ne pense pas que nous pourrions faire notre travail sans elle. C'est très facile à mettre en place et convivial à utiliser.

Si vous obtenez la dernière version de Sourceforge, il existe même un support Oauth, quelque chose que je n'ai trouvé dans aucun autre client REST.

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

Un, de nombreux avantages, l'utilisation d'un add-on Firefox est qu'il est multi Plattform. Nous utilisons le même outil (RESTclient) pour tous les membres de notre équipe même si nous utilisons différents OS (Mac, Linux, Windows).

1

Vous pouvez curl

utilisation --form-string pour transmettre des données de formulaire au serveur

(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' 

Dans le contrôleur, vous obtiendrez params['book_key']=BOOK1234 et params["author"]="Gandhi"

utilisation -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' 

Dans le contrôleur, vous obtiendrez params['email]="[email protected]" et params["author"]="Gandhi" et params["document"] = "File(object)". Cela ne fonctionne que si test.doc est dans le répertoire courant. N'oubliez pas de passer mime-type que le serveur peut prendre comme "application octet-stream" et besoin d'écrire au code pour gérer cela séparément.

5

J'ai roulé ma propre solution à cela et j'ai pensé que cela serait utile.J'ai écrit un module qui utilise les gemmes json, curb et addressable pour envoyer des requêtes GET, PUT, POST et DELETE à localhost: 3000. Il peut demander soit XML (comme la question initiale demandée) ou json. Il renvoie le corps de la réponse sous la forme d'un Hash. C'est surtout un emballage autour de la gemme de trottoir, qui je pense a la syntaxe horrible. Notez que je charge automatiquement mon api_key. Cela peut être désactivé en passant :api_key => false ou cassé en utilisant api_key => "wrong". Vous pourriez vouloir laisser ceci dehors ou le modifier pour adapter votre schéma d'authentification.

est ici le module:

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

Et voici quelques exemples simples: Demande attributs ressource avec GET:

api_call("calls/41", :get)

Création de ressources avec POST:

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

ressources Mise à jour avec PUT:

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

ressources Suppression avec SUPPRIMER:

api_call("calls/41", :delete)

Désactivation de l'insertion automatique de api_key:

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

Utilisez la mauvaise api_key:

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

Utiliser comme JSON (par défaut xml):

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

pourquoi ne pas rouler dans un bijou que les rails peuvent tirer parti pendant les tests? – masukomi

+0

Vous devriez certainement en faire un petit bijou. Bon travail –