Ruby配置rspec和RestClient來檢測服務(wù)器
如果你手工測試Restful 服務(wù)將會是一件非常單調(diào)乏味的事情。當然,目前有一些瀏覽器插件可以通過可視化的界面幫助你手工測試,例如postman、rest console,但是每次系統(tǒng)版本更新,你都需要去手動執(zhí)行大量的測試,顯然這種方式不是非常實用。Ruby擁有許多出色的gem包,你可以使用它們完成這項枯燥的工作。其中RestClient是我比較喜歡的一個。結(jié)合ruby的rspec框架使用RestClient可以編寫非常強大的測試腳本。假如Github想讓你測試他們的Restful API。你可能想做的第一件事就是確保端點返回你預(yù)計的響應(yīng)代碼。開始前,你需要確認你已經(jīng)安裝了相應(yīng)的gems。 最便利的方式是使用bundler安裝:
source "https://rubygems.org" gem 'rest-client' gem 'rspec' gem 'json_expressions'
在cmd(windows,linux/mac環(huán)境請自行解決)進入你創(chuàng)建gemfile文件的同層目錄,運行 'bundle'
rafs-computer:rafael$ bundle Using diff-lcs 1.2.5 Using json_expressions 0.8.3 Using mime-types 2.3 Using netrc 0.7.7 Using rest-client 1.7.2 Using rspec-support 3.1.1 Using rspec-core 3.1.4 Using rspec-expectations 3.1.2 Using rspec-mocks 3.1.2 Using rspec 3.1.0 Using bundler 1.7.3 Your bundle is complete!
現(xiàn)在讓我們來驗證我們從用戶終端得到200響應(yīng):
require 'rspec'
require 'rest_client'
describe 'GitHub API' do
it 'should return information about a user' do
result = RestClient.get 'https://api.github.com/users/rest-client', :content_type => :json, :accept => :json
expect(result.code).to eq(200)
end
end
在命令行執(zhí)行rspec -f doc filename

因此返回碼是對的,但是我們?nèi)绾沃婪祷氐膉son也是對的呢?
有幾種不同的方式去驗證。一種方法是解析body中的json(由key,value組成),然后針對你要檢查的每個key創(chuàng)建斷言。這種方式可以使用,但是它需要你寫多個斷言而且是比較難于維護的。另外一種方法是和一個已知有效的json格式的數(shù)據(jù)文件比較。你可以使用json_expressions gem包去做這個事情。下面的例子是相同的spec文件。新增一個testcase用來驗證json數(shù)據(jù)。
首先準備一個users.json文件
{
"login": "rest-client",
"id": 2386701,
"avatar_url": "https://avatars.githubusercontent.com/u/2386701?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/rest-client",
"html_url": "https://github.com/rest-client",
"followers_url": "https://api.github.com/users/rest-client/followers",
"following_url": "https://api.github.com/users/rest-client/following{/other_user}",
"gists_url": "https://api.github.com/users/rest-client/gists{/gist_id}",
"starred_url": "https://api.github.com/users/rest-client/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/rest-client/subscriptions",
"organizations_url": "https://api.github.com/users/rest-client/orgs",
"repos_url": "https://api.github.com/users/rest-client/repos",
"events_url": "https://api.github.com/users/rest-client/events{/privacy}",
"received_events_url": "https://api.github.com/users/rest-client/received_events",
"type": "Organization",
"site_admin": false,
"name": "REST-Client Team",
"company": null,
"blog": "",
"location": null,
"email": null,
"hireable": false,
"bio": null,
"public_repos": 1,
"public_gists": 0,
"followers": 0,
"following": 0,
"created_at": "2012-09-20T15:01:43Z",
"updated_at": "2015-03-11T19:08:01Z"
}
然后編寫測試用例spec文件
require 'rspec'
require 'rest_client'
require 'json_expressions/rspec'
describe 'GitHub API' do
it 'should return 200 when asking information about a user' do
result = RestClient.get 'https://api.github.com/users/rest-client', :content_type => :json, :accept => :json
expect(result.code).to eq(200)
end
it 'should return proper data for a user' do
expected_data = JSON.parse(IO.read('users.json'))
result = RestClient.get 'https://api.github.com/users/rest-client', :content_type => :json, :accept => :json
expect(result).to match_json_expression(expected_data)
end
end
這個users.json文件包含了一個已知的響應(yīng)。正如你可能猜到了,一些這樣的服務(wù)返回值可以改變很快。例如,"updated_at"是返回值可能經(jīng)常變化的key。假如你只是想要驗證key是否存在,而不關(guān)心它的值,你可以增加如下的代碼到你的測試用例中。
it 'should return proper data for a user' do
expected_data = JSON.parse(IO.read('users.json')) #解析users.json文件中的數(shù)據(jù)作為預(yù)期值
result = RestClient.get 'https://api.github.com/users/rest-client', :content_type => :json, :accept => :json
# expect(result).to match_json_expression(expected_data)
expected_data['updated_at'] = wildcard_matcher
end
相關(guān)文章
Ruby使用REXML庫來解析xml格式數(shù)據(jù)的方法
這篇文章主要介紹了Ruby使用REXML庫來解析xml格式數(shù)據(jù)的方法,文章最后提及了REXML庫的使用相關(guān)安全問題可以注意一下,需要的朋友可以參考下2016-04-04
Ruby中使用多線程隊列(Queue)實現(xiàn)下載博客文章保存到本地文件
這篇文章主要介紹了Ruby中使用多線程隊列(Queue)實現(xiàn)下載博客文章保存到本地文件,本文給出了實現(xiàn)代碼、并對代碼的核心部分做了講解,同時給出了運行效果圖,需要的朋友可以參考下2015-01-01
Ruby中Hash哈希結(jié)構(gòu)的基本操作方法小結(jié)
Hash是一種鍵值對應(yīng)的數(shù)據(jù)結(jié)構(gòu),Ruby中直接帶有Hash類來對其提供支持,這里我們整理了Ruby中Hash哈希結(jié)構(gòu)的基本操作方法小結(jié),首先來回顧一下Hash的基本知識:2016-06-06

