如果你手工测试Restful 服务将会是一件非常单调乏味的事情。当然,目前有一些浏览器插件可以通过可视化的界面帮助你手工测试,例如postman、rest console,但是每次系统版本更新,你都需要去手动执行大量的测试,显然这种方式不是非常实用。Ruby拥有许多出色的gem包,你可以使用它们完成这项枯燥的工作。其中RestClient是我比较喜欢的一个。结合ruby的rspec框架使用RestClient可以编写非常强大的测试脚本。假如Github想让你测试他们的Restful API。你可能想做的第一件事就是确保端点返回你预计的响应代码。开始前,你需要确认你已经安装了相应的gems。 最便利的方式是使用bundler安装:

  1. source "https://rubygems.org"
  2.  
  3. 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
  10.  
  11. 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文件

  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. describe 'GitHub API' do
  6.  
  7. it 'should return 200 when asking information about a user' do
  8. result = RestClient.get 'https://api.github.com/users/rest-client', :content_type => :json, :accept => :json
  9. expect(result.code).to eq(200)
  10. end
  11.  
  12. it 'should return proper data for a user' do
  13. expected_data = JSON.parse(IO.read('users.json'))
  14. result = RestClient.get 'https://api.github.com/users/rest-client', :content_type => :json, :accept => :json
  15. expect(result).to match_json_expression(expected_data)
  16. end
  17.  
  18. 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。

rspec+rest-client测试第三方web service的更多相关文章

  1. 网络上可供测试的Web Service

    网络上可供测试的Web Service 腾讯QQ在线状态 WEB 服务Endpoint: http://www.webxml.com.cn/webservices/qqOnlineWebService ...

  2. IGS_学习笔记07_IREP通过页面测试客户化Web Service调用(案例)

    20150819 Created By BaoXinjian

  3. (转)接口自动化测试 – Java+TestNG 测试 Restful Web Service

    本文主要介绍如何用Java针对Restful web service 做接口自动化测试(数据驱动),相比UI自动化,接口自动化稳定性可靠性高,实施难易程度低,做自动化性价比高.所用到的工具或类库有 T ...

  4. IGS_学习笔记08_IREP通过soapUI测试客户化Web Service调用(案例)

    20150819 Created By BaoXinjian

  5. Apache CXF实现Web Service(5)—— GZIP使用

    Apache CXF实现Web Service(5)-- GZIP使用 参考来源: CXF WebService整合Spring Apache CXF实现Web Service(1)--不借助重量级W ...

  6. 就是这么简单!使用Rest-assured 测试Restful Web Services

    使用 Rest-assured 测试 Restful Web Services 转载注明出处: http://www.cnblogs.com/wade-xu/p/4298819.html 这里向大家介 ...

  7. [转]Web Service Authentication

    本文转自:http://www.codeproject.com/Articles/9348/Web-Service-Authentication Download source files - 45. ...

  8. 使用Eclipse自带Web Service插件(Axis1.4)生成Web Service服务端/客户端

    创建一个名字为math的Java web工程,并将WSDL文件拷入该工程中 将Axis所需的jar包拷贝至WebRoot\WEB-INF\lib目录下,这些jar包会自动导入math工程中 一,生成W ...

  9. Web Service性能测试方案

    目录: 1.web Service简介 2.SoapUI介绍 3.使用SoapUI进行web service性能测试 4.使用LR进行web service性能测试 5.使用JMeter进行web s ...

随机推荐

  1. iOS-图片拉伸技巧

    iOS开发中我们会遇到渐变的背景,内容可变的流式标签,聊天气泡(QQ聊天气泡),由于内容是可变的,宽度和高度同样可变,这样就是导致每次出现的尺寸与之前不一样.如果是需要设置的比较的多,估计美工会烦死, ...

  2. Django模板系统

    创建模板对象Template类在django.template模板中 // 用django-admin.py startproject 命令创建一个项目目录django-admin.py startp ...

  3. Nginx在安装过程经常出现的问题

    在Linux操作系统下搭建Nginx服务器,很多时候会出现不同的错误,在此我们在搭建过程中出现的错误进行一些总结: 主要问题有: 1.防火墙问题 2.缺少gc++ 3.缺少pcre.zlib库 解决办 ...

  4. Eclipse崩溃后无法启动的问题解决

    一次Eclipse发生内存溢出(ADT环境,多打开几个xml文件内存占用就会飚升),强制结束任务,再次启动Eclipse发现闪退.查看workspace/.metadata/.log文件发现如下错误信 ...

  5. 用于主题检测的临时日志(b2d5c7b3-e3f6-4b0f-bfa4-a08e923eda9b - 3bfe001a-32de-4114-a6b4-4005b770f6d7)

    这是一个未删除的临时日志.请手动删除它.(1c773d57-4f35-40cf-ad62-bd757d5fcfae - 3bfe001a-32de-4114-a6b4-4005b770f6d7)

  6. Linux下tomcat部署

    进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 如果你想直接干掉Tomcat,你可以使用kill命令,直接杀死Tomcat进程 kill -9 7010 然后继续查看 ...

  7. Sicily 3913. 阶乘之和

    http://soj.me/3913 一开始被它的数据吓到了,还以为很复杂,但想清楚之后,确实是比较简单的,你只需要算到 24! 就行了,大于 24 的时候答案永远是 940313,因为我们是对 10 ...

  8. 服务器断电,Oracle数据库无法启动解决方案

    数据库没有备份的情况下,数据库所在服务器由于意外断电,导致服务器启动之后,Oracle数据库startup报错. 1. 数据库没开归档模式 2. 无备份 解决方案: 1 2 3 4 5 6 7 8 9 ...

  9. 【原创】从零开始学SpagoBI5.X源码汉化编译

    从零开始学SpagoBI5.X源码汉化编译 一.新建Tomact Server 服务器并配置测试1.文件-新建-其他-过滤server-服务类型选择Tomact V7.0 Server2.根据需要修改 ...

  10. Mac 安装终端软件

    1.安装或者重新安装lua环境 下载 lua 地址: http://www.lua.org/versions.html 1.进入 lua 目录 2.make macosx 3.sudo make in ...