我想在我的Rails站點上測試REST api。使用rails測試框架做到這一點最簡單/最好的方法是什麼?我只是在做標準的資源豐富的東西,所以我特別想知道,因爲如果有任何自動手段來測試這些東西,那麼這就是標準。測試Rails REST XML API的最佳方式是什麼?
回答
我會推薦使用黃瓜。黃瓜模擬瀏覽器,你可以驗證它得到的結果。這適用於XML請求以及JSON和普通的舊HTML。
如果URI作爲API的一部分提供,那麼這並不是真正的REST。在RESTful API中只能有入口點URI。 – aehlke 2009-08-17 20:30:22
這不是自動化的,但它非常適合查看您的API在做什麼。
我會告誡他們爲授權請求提供用戶名/密碼。我建議在這種情況下抓住代碼並安裝以供私人使用。 https://github.com/defunkt/hurl – 2011-01-26 04:07:36
我們使用RESTClient實現一個Firefox插件訪問和測試REST服務。
https://addons.mozilla.org/en-US/firefox/addon/9780
我們已經在我的團隊一直在使用這個一兩個月的,我不認爲我們可以做我們的工作離不開它。起牀和跑步非常容易,而且使用起來很方便。
如果你從Sourceforge獲得最新版本,甚至還有Oauth支持它,這是我在任何其他REST客戶端都找不到的。
的使用Firefox插件的很多優勢http://sourceforge.net/projects/restclient/develop
一個,就是它的跨plattform。即使我們使用不同的操作系統(Mac,Linux,Windows),我們也會爲我們團隊的所有成員使用相同的工具(RESTclient)。
您可以嘗試curl
使用--form-string
表單數據傳遞到服務器
(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¶m2=value2'
在控制器中你會得到params['book_key']=BOOK1234
和params["author"]="Gandhi"
使用-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¶m2=value2'
在控制器中你會得到params['email]="[email protected]"
和params["author"]="Gandhi"
和params["document"] = "File(object)"
。只有當test.doc
在當前目錄中時,這才起作用。不要忘記通過mime-type
作爲服務器可能會把它作爲"application octet-stream"
,並需要寫入代碼來處理這個分開。
我推出了自己的解決方案,並認爲這會有所幫助。我編寫了一個模塊,它使用json,curb和addressable寶石發送GET,PUT,POST和DELETE請求到localhost:3000。它可以請求XML(如要求的原始問題)或json。它將響應主體作爲散列返回。它大多是圍繞着遏制寶石的包裝,我認爲它具有可怕的語法。
請注意,我自動加載我的api_key
。這可以通過傳遞:api_key => false
或使用api_key => "wrong"
來禁用。您可能希望保留或修改它以適應您的身份驗證方案。
這裏的模塊:
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
這裏有一些簡單的例子:
api_call("calls/41", :get)
創建資源與POST:
api_call("people", :post, {:person => {:first => "Robert", :last => "Smith" } })
更新資源,GET 請求資源屬性PUT:
api_call("people/21", :put, {:person => { :first => "Bob" } })
刪除資源用DELETE:
api_call("calls/41", :delete)
關閉API_KEY自動插入:
api_call("calls/41", :get, {}, {:api_key => false})
使用了錯誤的API_KEY:
api_call("calls/41", :get, {}, {:api_key => "wrong"})
用作JSON(默認爲xml):
api_call("calls/41", :get, {}, {:format => "json"})
爲什麼不把它放到一個可以在測試過程中使用的gem中? – masukomi 2011-05-20 17:51:42
- 1. 測試REST API的最佳方法是什麼?
- 2. 什麼是測試查詢性能的最佳方式的Rails
- 3. 爲REST API編寫單元測試的最佳方式是什麼?
- 4. 測試XML響應的最佳方式是什麼?
- 5. 測試rails應用程序的最佳方式是什麼?
- 6. 設置和測試Lambda API的最佳方式是什麼?
- 7. 什麼是自動執行REST api的最佳方式
- 8. 保護REST API的最佳方式是什麼?
- 9. 從angularjs調用Rest API的最佳方式是什麼?
- 10. 什麼是生成REST API文檔的最佳方式?
- 11. 測試Catalyst REST API的最簡單方法是什麼
- 12. MVCContrib - 測試XMLResult的最佳方式是什麼?
- 13. 測試Atom服務器的最佳方式是什麼?
- 14. 測試API用戶認證的最佳方法是什麼?
- 15. 測試iPod Touch的iPhone遊戲的最佳方式是什麼?
- 16. 什麼是測試郵件列表軟件的最佳方式?
- 17. 用PHPUnit組織Selenium測試的最佳方式是什麼?
- 18. 什麼是測試Web服務網關的最佳方式?
- 19. 什麼是實施在線測試的最佳方式?
- 20. 測試HTML5網站的最佳方式是什麼?
- 21. 什麼是測試GWT代碼的最佳方式
- 22. 使用selenium webdriver測試下載的最佳方式是什麼?
- 23. 什麼是測試電梯休息服務的最佳方式?
- 24. 什麼是測試RedirectToAction的最佳方式?
- 25. 模塊化PHPUnit Selenium2測試的最佳方式是什麼?
- 26. 什麼是測試DOM中元素的最佳方式
- 27. 壓力測試rails web應用程序的最佳方式是什麼?
- 28. 在Ruby中測試應用程序API庫的最佳方式是什麼?
- 29. 從Web客戶端訪問REST API的最佳方式是什麼?
- 30. 什麼是在WP7中使用REST的最佳方式
你是說如何使用某種工具向URL發出測試請求?還是你說的是創建某種自動單元測試? – laz 2009-04-17 18:57:20