濮阳杆衣贸易有限公司

主頁 > 知識庫 > Ruby配置rspec和RestClient來檢測服務器

Ruby配置rspec和RestClient來檢測服務器

熱門標簽:地圖標注賺錢項目注冊 湖州u友防封電銷卡 白銀外呼paas系統(tǒng) 電銷機器人廠商代理 百度地圖標注自定義圖片 徐州網絡外呼系統(tǒng)哪個好 高德地圖標注客服 常德電銷平臺外呼系統(tǒng)軟件價格 滴滴外呼系統(tǒng)

如果你手工測試Restful 服務將會是一件非常單調乏味的事情。當然,目前有一些瀏覽器插件可以通過可視化的界面幫助你手工測試,例如postman、rest console,但是每次系統(tǒng)版本更新,你都需要去手動執(zhí)行大量的測試,顯然這種方式不是非常實用。Ruby擁有許多出色的gem包,你可以使用它們完成這項枯燥的工作。其中RestClient是我比較喜歡的一個。結合ruby的rspec框架使用RestClient可以編寫非常強大的測試腳本。假如Github想讓你測試他們的Restful API。你可能想做的第一件事就是確保端點返回你預計的響應代碼。開始前,你需要確認你已經安裝了相應的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!

現在讓我們來驗證我們從用戶終端得到200響應:

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

因此返回碼是對的,但是我們如何知道返回的json也是對的呢?

有幾種不同的方式去驗證。一種方法是解析body中的json(由key,value組成),然后針對你要檢查的每個key創(chuàng)建斷言。這種方式可以使用,但是它需要你寫多個斷言而且是比較難于維護的。另外一種方法是和一個已知有效的json格式的數據文件比較。你可以使用json_expressions gem包去做這個事情。下面的例子是相同的spec文件。新增一個testcase用來驗證json數據。

首先準備一個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文件包含了一個已知的響應。正如你可能猜到了,一些這樣的服務返回值可以改變很快。例如,"updated_at"是返回值可能經常變化的key。假如你只是想要驗證key是否存在,而不關心它的值,你可以增加如下的代碼到你的測試用例中。

it 'should return proper data for a user' do
  expected_data = JSON.parse(IO.read('users.json')) #解析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) 
  expected_data['updated_at'] = wildcard_matcher
 end

標簽:梧州 遼寧 張家界 普洱 公主嶺 永州 荊門 三沙

巨人網絡通訊聲明:本文標題《Ruby配置rspec和RestClient來檢測服務器》,本文關鍵詞  Ruby,配置,rspec,和,RestClient,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Ruby配置rspec和RestClient來檢測服務器》相關的同類信息!
  • 本頁收集關于Ruby配置rspec和RestClient來檢測服務器的相關信息資訊供網民參考!
  • 推薦文章
    蚌埠市| 志丹县| 博湖县| 象山县| 双鸭山市| 山丹县| 潞城市| 宝鸡市| 永福县| 肇庆市| 金山区| 黔南| 罗山县| 尚义县| 宜昌市| 滦平县| 旌德县| 德令哈市| 湖州市| 罗定市| 松潘县| 兰州市| 葵青区| 永吉县| 平远县| 沈阳市| 安新县| 永和县| 类乌齐县| 顺义区| 富川| 岳阳县| 西华县| 新余市| 开鲁县| 合江县| 邢台市| 庆安县| 万宁市| 霸州市| 山阴县|