rspec+rest-client测试第三方web service
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了rspec+rest-client测试第三方web service,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3932字,纯文字阅读大概需要6分钟。
内容图文
![rspec+rest-client测试第三方web service](/upload/InfoBanner/zyjiaocheng/1044/3739973c71a64a798fd007e9e9b6e008.jpg)
如果你手工测试Restful 服务将会是一件非常单调乏味的事情。当然,目前有一些浏览器插件可以通过可视化的界面帮助你手工测试,例如postman、rest console,但是每次系统版本更新,你都需要去手动执行大量的测试,显然这种方式不是非常实用。Ruby拥有许多出色的gem包,你可以使用它们完成这项枯燥的工作。其中RestClient是我比较喜欢的一个。结合ruby的rspec框架使用RestClient可以编写非常强大的测试脚本。假如Github想让你测试他们的Restful API。你可能想做的第一件事就是确保端点返回你预计的响应代码。开始前,你需要确认你已经安装了相应的gems。 最便利的方式是使用bundler安装:
1 source "https://rubygems.org"23 gem ‘rest-client‘4 gem ‘rspec‘5 gem ‘json_expressions‘
在cmd(windows,linux/mac环境请自行解决)进入你创建gemfile文件的同层目录,运行 ‘bundle‘命令
1 rafs-computer:rafael$ bundle 2 Using diff-lcs 1.2.5 3 Using json_expressions 0.8.3 4 Using mime-types 2.3 5 Using netrc 0.7.7 6 Using rest-client 1.7.2 7 Using rspec-support 3.1.1 8 Using rspec-core 3.1.4 9 Using rspec-expectations 3.1.2 10 Using rspec-mocks 3.1.2 11 Using rspec 3.1.0 12 Using bundler 1.7.3 13 Your bundle is complete!
现在让我们来验证我们从用户终端得到200响应:
1 require ‘rspec‘ 2 require ‘rest_client‘ 3 4 describe ‘GitHub API‘ do 5 6 it ‘should return information about a user‘ do 7 result = RestClient.get ‘https://api.github.com/users/rest-client‘, :content_type => :json, :accept => :json 8 expect(result.code).to eq(200) 9 end 1011 end
在命令行执行rspec -f doc filename
因此返回码是对的,但是我们如何知道返回的json也是对的呢?
有几种不同的方式去验证。一种方法是解析body中的json(由key,value组成),然后针对你要检查的每个key创建断言。这种方式可以使用,但是它需要你写多个断言而且是比较难于维护的。另外一种方法是和一个已知有效的json格式的数据文件比较。你可以使用json_expressions gem包去做这个事情。下面的例子是相同的spec文件。新增一个testcase用来验证json数据。
首先准备一个users.json文件
1 { 2 " login ": "rest-client", 3"id": 2386701, 4"avatar_url": "https://avatars.githubusercontent.com/u/2386701?v=3", 5"gravatar_id": "", 6"url": "https://api.github.com/users/rest-client", 7"html_url": "https://github.com/rest-client", 8"followers_url": "https://api.github.com/users/rest-client/followers", 9"following_url": "https://api.github.com/users/rest-client/following{/other_user}", 10"gists_url": "https://api.github.com/users/rest-client/gists{/gist_id}", 11"starred_url": "https://api.github.com/users/rest-client/starred{/owner}{/repo}", 12"subscriptions_url": "https://api.github.com/users/rest-client/subscriptions", 13"organizations_url": "https://api.github.com/users/rest-client/orgs", 14"repos_url": "https://api.github.com/users/rest-client/repos", 15"events_url": "https://api.github.com/users/rest-client/events{/privacy}", 16"received_events_url": "https://api.github.com/users/rest-client/received_events", 17"type": "Organization", 18"site_admin": false, 19"name": "REST-Client Team", 20"company": null, 21"blog": "", 22"location": null, 23"email": null, 24"hireable": false, 25"bio": null, 26"public_repos": 1, 27"public_gists": 0, 28"followers": 0, 29"following": 0, 30"created_at": "2012-09-20T15:01:43Z", 31"updated_at": "2015-03-11T19:08:01Z"32 }
然后编写测试用例spec文件
1 require ‘rspec‘ 2 require ‘rest_client‘ 3 require ‘json_expressions/rspec‘ 4 5 6 describe ‘GitHub API‘ do 7 8 it ‘should return 200 when asking information about a user‘ do 9 result = RestClient.get ‘https://api.github.com/users/rest-client‘, :content_type => :json, :accept => :json 10 expect(result.code).to eq(200) 11 end 1213 it ‘should return proper data for a user‘ do 14 expected_data = JSON.parse(IO.read(‘users.json‘)) 15 result = RestClient.get ‘https://api.github.com/users/rest-client‘, :content_type => :json, :accept => :json 16 expect(result).to match_json_expression(expected_data) 17 end 1819 end
这个users.json文件包含了一个已知的响应。正如你可能猜到了,一些这样的服务返回值可以改变很快。例如,"updated_at"是返回值可能经常变化的key。假如你只是想要验证key是否存在,而不关心它的值,你可以增加如下的代码到你的测试用例中。
1 it ‘should return proper data for a user‘ do 2 expected_data = JSON.parse(IO.read(‘users.json‘)) #解析users.json文件中的数据作为预期值 3 result = RestClient.get ‘https://api.github.com/users/rest-client‘, :content_type => :json, :accept => :json 4# expect(result).to match_json_expression(expected_data) 5 expected_data[‘updated_at‘] = wildcard_matcher 6 end
想要了解更多关于json_expression gem的技巧,猛击github wiki page。
原文:http://www.cnblogs.com/timsheng/p/4333030.html
内容总结
以上是互联网集市为您收集整理的rspec+rest-client测试第三方web service全部内容,希望文章能够帮你解决rspec+rest-client测试第三方web service所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。