rspec+rest-client测试第三方web service
如果你手工测试Restful 服务将会是一件非常单调乏味的事情。当然,目前有一些浏览器插件可以通过可视化的界面帮助你手工测试,例如postman、rest console,但是每次系统版本更新,你都需要去手动执行大量的测试,显然这种方式不是非常实用。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环境请自行解决)进入你创建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
在命令行执行rspec -f doc filename
aaarticlea/png;base64,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" alt="" />
因此返回码是对的,但是我们如何知道返回的json也是对的呢?
有几种不同的方式去验证。一种方法是解析body中的json(由key,value组成),然后针对你要检查的每个key创建断言。这种方式可以使用,但是它需要你写多个断言而且是比较难于维护的。另外一种方法是和一个已知有效的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
想要了解更多关于json_expression gem的技巧,猛击github wiki page。
rspec+rest-client测试第三方web service的更多相关文章
- 网络上可供测试的Web Service
网络上可供测试的Web Service 腾讯QQ在线状态 WEB 服务Endpoint: http://www.webxml.com.cn/webservices/qqOnlineWebService ...
- IGS_学习笔记07_IREP通过页面测试客户化Web Service调用(案例)
20150819 Created By BaoXinjian
- (转)接口自动化测试 – Java+TestNG 测试 Restful Web Service
本文主要介绍如何用Java针对Restful web service 做接口自动化测试(数据驱动),相比UI自动化,接口自动化稳定性可靠性高,实施难易程度低,做自动化性价比高.所用到的工具或类库有 T ...
- IGS_学习笔记08_IREP通过soapUI测试客户化Web Service调用(案例)
20150819 Created By BaoXinjian
- Apache CXF实现Web Service(5)—— GZIP使用
Apache CXF实现Web Service(5)-- GZIP使用 参考来源: CXF WebService整合Spring Apache CXF实现Web Service(1)--不借助重量级W ...
- 就是这么简单!使用Rest-assured 测试Restful Web Services
使用 Rest-assured 测试 Restful Web Services 转载注明出处: http://www.cnblogs.com/wade-xu/p/4298819.html 这里向大家介 ...
- [转]Web Service Authentication
本文转自:http://www.codeproject.com/Articles/9348/Web-Service-Authentication Download source files - 45. ...
- 使用Eclipse自带Web Service插件(Axis1.4)生成Web Service服务端/客户端
创建一个名字为math的Java web工程,并将WSDL文件拷入该工程中 将Axis所需的jar包拷贝至WebRoot\WEB-INF\lib目录下,这些jar包会自动导入math工程中 一,生成W ...
- Web Service性能测试方案
目录: 1.web Service简介 2.SoapUI介绍 3.使用SoapUI进行web service性能测试 4.使用LR进行web service性能测试 5.使用JMeter进行web s ...
随机推荐
- iOS-图片拉伸技巧
iOS开发中我们会遇到渐变的背景,内容可变的流式标签,聊天气泡(QQ聊天气泡),由于内容是可变的,宽度和高度同样可变,这样就是导致每次出现的尺寸与之前不一样.如果是需要设置的比较的多,估计美工会烦死, ...
- Django模板系统
创建模板对象Template类在django.template模板中 // 用django-admin.py startproject 命令创建一个项目目录django-admin.py startp ...
- Nginx在安装过程经常出现的问题
在Linux操作系统下搭建Nginx服务器,很多时候会出现不同的错误,在此我们在搭建过程中出现的错误进行一些总结: 主要问题有: 1.防火墙问题 2.缺少gc++ 3.缺少pcre.zlib库 解决办 ...
- Eclipse崩溃后无法启动的问题解决
一次Eclipse发生内存溢出(ADT环境,多打开几个xml文件内存占用就会飚升),强制结束任务,再次启动Eclipse发现闪退.查看workspace/.metadata/.log文件发现如下错误信 ...
- 用于主题检测的临时日志(b2d5c7b3-e3f6-4b0f-bfa4-a08e923eda9b - 3bfe001a-32de-4114-a6b4-4005b770f6d7)
这是一个未删除的临时日志.请手动删除它.(1c773d57-4f35-40cf-ad62-bd757d5fcfae - 3bfe001a-32de-4114-a6b4-4005b770f6d7)
- Linux下tomcat部署
进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 如果你想直接干掉Tomcat,你可以使用kill命令,直接杀死Tomcat进程 kill -9 7010 然后继续查看 ...
- Sicily 3913. 阶乘之和
http://soj.me/3913 一开始被它的数据吓到了,还以为很复杂,但想清楚之后,确实是比较简单的,你只需要算到 24! 就行了,大于 24 的时候答案永远是 940313,因为我们是对 10 ...
- 服务器断电,Oracle数据库无法启动解决方案
数据库没有备份的情况下,数据库所在服务器由于意外断电,导致服务器启动之后,Oracle数据库startup报错. 1. 数据库没开归档模式 2. 无备份 解决方案: 1 2 3 4 5 6 7 8 9 ...
- 【原创】从零开始学SpagoBI5.X源码汉化编译
从零开始学SpagoBI5.X源码汉化编译 一.新建Tomact Server 服务器并配置测试1.文件-新建-其他-过滤server-服务类型选择Tomact V7.0 Server2.根据需要修改 ...
- Mac 安装终端软件
1.安装或者重新安装lua环境 下载 lua 地址: http://www.lua.org/versions.html 1.进入 lua 目录 2.make macosx 3.sudo make in ...