开发使用RESTful Web API的应用程序可能意味着开发服务器和客户端。 为服务器端编写集成测试可以像使用Arquillian来启动服务器一样容易,并且可以通过REST确保测试服务是否按预期工作。 问题是如何测试客户端。 在本文中,我们将了解如何使用模拟来测试客户端。

简要描述一下,为了测试客户端,我们需要一个本地服务器,该服务器可以返回记录的JSON响应。 rest-client-driver是一个模拟RESTful服务的库。 您可以对测试期间希望接收的HTTP请求设置期望值。 因此,这正是我们Java客户端所需的。 请注意,当我们开发RESTful Web客户端以连接到第三方开发的服务(例如Flickr Rest APIJira Rest APIGithub …)时,该项目对于编写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状态码。
这是一个非常简单的示例,但请记住,该示例也可用于gsonjackson之类的库。 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服务的客户端相关推荐

  1. restful服务端客户端_测试RESTful服务的客户端

    restful服务端客户端 开发使用RESTful Web API的应用程序可能意味着开发服务器和客户端. 为服务器端编写集成测试可以像使用Arquillian启动服务器一样容易,并且可以通过REST ...

  2. 【REST】基于RESTful服务端的客户端实现(HttpClient、RestTemplate、HttpURLConnection)

    最近一直在做针对webservice的接口协议对接,总结了一下基于restful服务端的客户端的实现方式,有以下三种: HTTPClient RestTemplate HttpURLConnectio ...

  3. java maven restful_使用 maven 生成一个支持端到端自动测试的 RESTful 服务项目脚手架...

    额外的话: 我会非常感激如果您在读本文的时候 Follow 文中的操作步骤在你的环境中实践本文所讲内容, 我保证这个过程不会非常复杂, 即便加上你研究代码的时间也不需要超过 15 分钟 和传统后端页面 ...

  4. REST,Web 服务,REST-ful 服务

    from: https://www.ibm.com/developerworks/cn/webservices/ws-RESTservices/ 介绍 REpresentational State T ...

  5. restful rest_HATEOAS的RESTful服务。 REST:刷新器

    restful rest 在这篇文章中,我们将介绍有关HATEOAS的RESTful服务的综合文章. REST:刷新器. 1.简介 "不好了! 请,不要再发表有关REST的文章!" ...

  6. vert.x_使用vert.x 2.0,RxJava和mongoDB创建simpe RESTful服务

    vert.x 中断了将近半年后发表了一篇新文章. 在本文中,我们将快速了解如何开始使用vert.x,更有趣的是,如何使用RxJava简化异步系统的编程. 我们将涵盖以下主题: 使用Maven创建一个空 ...

  7. 使用vert.x 2.0,RxJava和mongoDB创建simpe RESTful服务

    中断了将近半年后发表了一篇新文章. 在本文中,我们将快速了解如何开始使用vert.x,更有趣的是,如何使用RxJava简化异步系统的编程. 我们将涵盖以下主题: 使用Maven创建一个空的vert.x ...

  8. 使用Spring Security对RESTful服务进行身份验证

    1.概述 本文重点介绍如何针对提供安全服务的安全REST API进行身份验证 -主要是RESTful用户帐户和身份验证服务. 2.目标 首先,让我们看一下参与者-典型的启用了Spring Securi ...

  9. SpringCloud OpenFeign服务调用客户端介绍及配置使用

    一.OpenFeign介绍 OpenFeign是Netfix开发的一款声明式,模板化的Http服务调用客户端.使用在服务调用者工程端.OpenFeign的负载均衡也为客户端负载均衡.一下简称Feign ...

最新文章

  1. 【转】工厂模式面向接口编程
  2. VTK:Math之NormalizeVector
  3. __str__是什么函数_PHP str_shuffle()函数与示例
  4. python中通过pip安装套件
  5. qt建立c++工程导入项目_工程项目经理A、B、C、D四个等级的区别,你知道吗?
  6. wdatepicker 设置只显示时分_液晶显示多功能电力仪表EX8-33
  7. iOS UITabBarController
  8. 台大matlab教程笔记
  9. PHP函数array_intersect_ukey
  10. Excel 函数公式大全
  11. WPS JS 宏搜索带颜色的字的笔记
  12. 物联网卡可以一次性买很多吗?从哪可以购买物联网卡
  13. mysql怎么解析json字符串_mysql解析json字符串
  14. 从零起步做到Linux运维经理, 你必须管好的23个细节
  15. vue.js 知乎_zhihu每日水疗中心与vue.js
  16. 解析XML文档之一:使用SAX解析
  17. 机器阅读理解 | (1) 智能问答概述
  18. 静态时序分析—串扰延迟分析(Crosstalk Delay Analysis)
  19. [IPTV]华为悦盒EC6108V9A刷机
  20. http://www.bubuko.com/infodetail-2274185.html

热门文章

  1. 局域网物理机怎么访问虚拟机
  2. adf开发_如何在ADF中将参数传递给ActionListener
  3. 创建react应用程序_使用SpringWebFlux的React式Web应用程序
  4. compareto 和_清洁责任–摆脱均等,compareTo和toString
  5. 字符串url获取参数_如何从URL查询字符串获取示例参数或将其附加到URL查询字符串(示例)?...
  6. maven将第三方依赖_如何将商业第三方文物整合到您的Maven版本中
  7. 使用Maven进行增量构建
  8. Picocli 2.0:事半功倍
  9. java调用怎么调用方法区_Java中的方法调用有多昂贵
  10. guava 并发同步_Google Guava –与Monitor同步