测试RESTful服务的客户端
简要描述一下,为了测试客户端,我们需要一个本地服务器,该服务器可以返回记录的JSON响应。 rest-client-driver是一个模拟RESTful服务的库。 您可以对测试期间希望接收的HTTP请求设置期望值。 因此,这正是我们Java客户端所需的。 请注意,当我们开发RESTful Web客户端以连接到第三方开发的服务(例如Flickr Rest API , Jira Rest API , Github …)时,该项目对于编写RESTful Web客户端非常有用。
首先要做的是添加rest-client-driver依赖项:
<dependency><groupId>com.github.rest-driver<groupId><artifactId>rest-client-driver<artifactId><version>1.1.27<version><scope>test<scope><dependency>
下一步,我们将创建一个非常简单的Jersey应用程序,该应用程序仅对所需的URI调用get方法。
public class GithubClient {private static final int HTTP_STATUS_CODE_OK = 200;private String githubBaseUri;public GithubClient(String githubBaseUri) {this.githubBaseUri = githubBaseUri;}public String invokeGetMethod(String resourceName) {Client client = Client.create();WebResource webResource = client.resource(githubBaseUri+resourceName);ClientResponse response = webResource.type('applicationjson').accept('applicationjson').get(ClientResponse.class);int statusCode = response.getStatus();if(statusCode != HTTP_STATUS_CODE_OK) {throw new IllegalStateException('Error code '+statusCode);}return response.getEntity(String.class);}}
现在我们要测试一下invokeGetMethod是否确实获得了所需的资源。 让我们假设生产代码中的此方法将负责从github上注册的项目中获取所有问题名称。
现在我们可以开始编写测试了:
@Rulepublic ClientDriverRule driver = new ClientDriverRule();@Testpublic void issues_from_project_should_be_retrieved() {driver.addExpectation(onRequestTo('reposlordofthejarsnosqlunitissues').withMethod(Method.GET), giveResponse(GET_RESPONSE));GithubClient githubClient = new GithubClient(driver.getBaseUrl());String issues = githubClient.invokeGetMethod('reposlordofthejarsnosqlunitissues');assertThat(issues, is(GET_RESPONSE)); }
- 我们使用ClientDriverRule @Rule批注将客户端驱动程序添加到测试中。
- 然后使用RestClientDriver类提供的方法记录期望值。
- 了解我们如何使用driver.getBaseUrl()设置基本URL
使用rest-client-driver,我们还可以使用GiveEmptyResponse方法记录http状态响应:
@Test(expected=IllegalStateException.class)public void http_errors_should_throw_an_exception() {driver.addExpectation(onRequestTo('reposlordofthejarsnosqlunitissues').withMethod(Method.GET), giveEmptyResponse().withStatus(401));GithubClient githubClient = new GithubClient(driver.getBaseUrl());githubClient.invokeGetMethod('reposlordofthejarsnosqlunitissues');}
很明显,我们可以记录一个推杆动作:
driver.addExpectation(onRequestTo('reposlordofthejarsnosqlunitissues')..withMethod(Method.PUT).withBody(PUT_MESSAGE, 'applicationjson'), giveEmptyResponse().withStatus(204));
请注意,在此示例中,我们设置请求应包含给定的消息正文以响应204状态码。
这是一个非常简单的示例,但请记住,该示例也可用于gson或jackson之类的库。 rest-driver项目还附带一个模块,该模块可用于断言服务器响应(如REST保证的项目),但本主题将在另一篇文章中解决。
参考:在One Jar To Rule Them All博客上测试我们的JCG合作伙伴 Alex Soto 的RESTful服务的客户端 。
翻译自: https://www.javacodegeeks.com/2012/09/testing-client-side-of-restful-services.html
测试RESTful服务的客户端相关推荐
- restful服务端客户端_测试RESTful服务的客户端
restful服务端客户端 开发使用RESTful Web API的应用程序可能意味着开发服务器和客户端. 为服务器端编写集成测试可以像使用Arquillian启动服务器一样容易,并且可以通过REST ...
- 【REST】基于RESTful服务端的客户端实现(HttpClient、RestTemplate、HttpURLConnection)
最近一直在做针对webservice的接口协议对接,总结了一下基于restful服务端的客户端的实现方式,有以下三种: HTTPClient RestTemplate HttpURLConnectio ...
- java maven restful_使用 maven 生成一个支持端到端自动测试的 RESTful 服务项目脚手架...
额外的话: 我会非常感激如果您在读本文的时候 Follow 文中的操作步骤在你的环境中实践本文所讲内容, 我保证这个过程不会非常复杂, 即便加上你研究代码的时间也不需要超过 15 分钟 和传统后端页面 ...
- REST,Web 服务,REST-ful 服务
from: https://www.ibm.com/developerworks/cn/webservices/ws-RESTservices/ 介绍 REpresentational State T ...
- restful rest_HATEOAS的RESTful服务。 REST:刷新器
restful rest 在这篇文章中,我们将介绍有关HATEOAS的RESTful服务的综合文章. REST:刷新器. 1.简介 "不好了! 请,不要再发表有关REST的文章!" ...
- vert.x_使用vert.x 2.0,RxJava和mongoDB创建simpe RESTful服务
vert.x 中断了将近半年后发表了一篇新文章. 在本文中,我们将快速了解如何开始使用vert.x,更有趣的是,如何使用RxJava简化异步系统的编程. 我们将涵盖以下主题: 使用Maven创建一个空 ...
- 使用vert.x 2.0,RxJava和mongoDB创建simpe RESTful服务
中断了将近半年后发表了一篇新文章. 在本文中,我们将快速了解如何开始使用vert.x,更有趣的是,如何使用RxJava简化异步系统的编程. 我们将涵盖以下主题: 使用Maven创建一个空的vert.x ...
- 使用Spring Security对RESTful服务进行身份验证
1.概述 本文重点介绍如何针对提供安全服务的安全REST API进行身份验证 -主要是RESTful用户帐户和身份验证服务. 2.目标 首先,让我们看一下参与者-典型的启用了Spring Securi ...
- SpringCloud OpenFeign服务调用客户端介绍及配置使用
一.OpenFeign介绍 OpenFeign是Netfix开发的一款声明式,模板化的Http服务调用客户端.使用在服务调用者工程端.OpenFeign的负载均衡也为客户端负载均衡.一下简称Feign ...
最新文章
- 【转】工厂模式面向接口编程
- VTK:Math之NormalizeVector
- __str__是什么函数_PHP str_shuffle()函数与示例
- python中通过pip安装套件
- qt建立c++工程导入项目_工程项目经理A、B、C、D四个等级的区别,你知道吗?
- wdatepicker 设置只显示时分_液晶显示多功能电力仪表EX8-33
- iOS UITabBarController
- 台大matlab教程笔记
- PHP函数array_intersect_ukey
- Excel 函数公式大全
- WPS JS 宏搜索带颜色的字的笔记
- 物联网卡可以一次性买很多吗?从哪可以购买物联网卡
- mysql怎么解析json字符串_mysql解析json字符串
- 从零起步做到Linux运维经理, 你必须管好的23个细节
- vue.js 知乎_zhihu每日水疗中心与vue.js
- 解析XML文档之一:使用SAX解析
- 机器阅读理解 | (1) 智能问答概述
- 静态时序分析—串扰延迟分析(Crosstalk Delay Analysis)
- [IPTV]华为悦盒EC6108V9A刷机
- http://www.bubuko.com/infodetail-2274185.html
热门文章
- 局域网物理机怎么访问虚拟机
- adf开发_如何在ADF中将参数传递给ActionListener
- 创建react应用程序_使用SpringWebFlux的React式Web应用程序
- compareto 和_清洁责任–摆脱均等,compareTo和toString
- 字符串url获取参数_如何从URL查询字符串获取示例参数或将其附加到URL查询字符串(示例)?...
- maven将第三方依赖_如何将商业第三方文物整合到您的Maven版本中
- 使用Maven进行增量构建
- Picocli 2.0:事半功倍
- java调用怎么调用方法区_Java中的方法调用有多昂贵
- guava 并发同步_Google Guava –与Monitor同步