在Eclipse中高效运行HTTP / REST集成测试

最近,我有机会使用由我亲爱的Holger Staudacher编写的OSGi-JAX-RS-Connector库。 通过连接器,您可以通过将@Path注释的类型注册为OSGi服务来轻松发布资源-实际上,它工作得很好。

对于我来说,使用普通的JUnit测试编写驱动的服务类测试是很自然的事,但提供附加的集成测试也很重要。 这些测试允许检查此类服务的运行时可用性和功能。 为了提供后者,我使用了Holger编写的另一个小助手– restfuse ,它是用于自动HTTP / REST测试的JUnit扩展。

该场景看起来像这样:

服务

@Path( '/message' )
public class SampleService {@GET@Produces( MediaType.TEXT_PLAIN )public String getMessage() {return 'Hello World';}
}

一个JUnit测试用例

public class SampleServiceTest {@Testpublic void testGetMessage() {SampleService service = new SampleService();String message = service.getMessage();assertEquals( 'Hello World', message );}
}

服务注册

<?xml version='1.0' encoding='UTF-8'?>
<scr:componentxmlns:scr='http://www.osgi.org/xmlns/scr/v1.1.0'name='SampleService'><implementation class='sample.SampleService'/><service><provide interface='sample.SampleService'/></service>
</scr:component>

Restfuse集成测试

@RunWith( HttpJUnitRunner.class )
public class SampleServiceHttpTest {@Rulepublic Destination destination= new Destination( 'http://localhost:9092' );@Contextprivate Response response;@HttpTest( method = Method.GET, path = '/services/message' )public void checkMessage() {String body = response.getBody( String.class );assertOk( response );assertEquals( MediaType.TEXT_PLAIN, response.getType() );assertEquals( 'HelloWorld', body );}
}

正在运行的服务

尽管所有这些工作都非常简单,但是它以某种方式使我感到困惑,即在我能够执行集成测试之前,首先要在本地运行集成测试才能启动服务器。 由于忙于手头的任务,我经常忘记启动服务器,遇到连接超时等问题。

但是我通过使用PDE JUnit启动配置找到了解决方案,因为可以在运行测试的过程中将这样的配置设置为启动服务器。

为此,创建并选择一个包含所有要运行1的集成测试的测试套件。

…之后切换到主标签并选择无头模式...

…最后但并非最不重要的一点是配置服务器使用的程序参数,在我们的案例中,该参数主要涉及端口定义。

“插件”选项卡中的捆绑软件选择包含与用于独立运行服务器的osgi启动配置相同的捆绑软件,以及JUnit,PDE JUnit,restfuse捆绑软件及其依赖项。 所选的测试套件可能如下所示:

@RunWith( Suite.class )
@SuiteClasses( {SampleServiceHttpTest.class
} )
public class AllRestApiIntegrationTestSuite {public static String BASE_URL= 'http://localhost:'+ System.getProperty( 'org.osgi.service.http.port' );
}

唯一不寻常的是BASE_URL常量定义。 如上所述,测试运行的服务器端口在启动配置中指定为程序参数。 但是Restfuse测试需要在目标规则定义期间提供端口。 使用上述方法可以在不影响测试的情况下更改配置中的端口。 只需将常量用作定义中的参数,如下面的代码段2 3所示

@Rulepublic Destination destination= new Destination( BASE_URL );

这个简单的设置效果很好,并改善了我在本地运行集成测试的工作流程。 将启动配置保存在共享项目中后,您的团队成员就可以轻松地重用启动配置。

今天就这样,反馈一如既往地受到高度赞赏。 顺便说一句,霍尔格答应我写一篇文章,介绍如何将上述内容集成到基于Maven / tycho的版本4中 -请继续关注

  1. 当然,您也可以使用运行选定项目,程序包或源文件夹的所有测试的可能性,但是出于我们的目的,使用套件方法并运行单个测试用例是可以的
  2. 在现实世界中,您可能会为常量定义提供一个单独的类,以避免将测试耦合到套件。 为了简化起见,我在这里略过。
  3. 请注意,使用静态导入包含BASE_URL,以提高代码段的可读性
  4. Holger信守诺言,请参阅: http : //eclipsesource.com/blogs/2012/09/11/running-httprest-integration-tests-in-an-eclipse-tycho-build/


参考:来自JCG合作伙伴 Frank Appel的Code Affine博客在Eclipse中有效地运行HTTP / REST集成测试 。

翻译自: https://www.javacodegeeks.com/2012/11/running-httprest-integration-tests-efficiently-in-eclipse.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Eclipse安装TestNG插件

Eclipse安装TestNG插件 TestNG是什么? TestNG按照其文档的定义是&#xff1a; TestNG是一个测试框架&#xff0c;其灵感来自JUnit和NUnit的&#xff0c;但引入了一些新的功能&#xff0c;使其功能更强大&#xff0c;使用更方便。 TestNG是一个开源自动化测试框架;TestNG表示下…

basicdatasourcefactory mysql_Java基础-DBCP连接池(BasicDataSource类)详解

Java基础-DBCP连接池(BasicDataSource类)详解作者&#xff1a;尹正杰版权声明&#xff1a;原创作品&#xff0c;谢绝转载&#xff01;否则将追究法律责任。实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程&#xff0c;为了解决此类性能问题&#xff0c;通常…

生物神经网络衍生出的算法

一个生物神经网络的基本结构&#xff1a; 生物神经网络由大量神经元组成&#xff0c;这些神经元之间通过突触相互连接。神经元可以接收来自其他神经元的信号&#xff0c;并根据信号的强度和类型来调整自己的输出信号。这种神经元之间的相互连接和信号传递形成了生物神经网络的基…

echart实例数据 本地加载_JVM 类加载概述

来源&#xff1a;SegmentFault 思否社区作者&#xff1a;又坏又迷人JVM简介JVM是Java Virtual Machine(Java虚拟机)的缩写&#xff0c;JVM是一种用于计算设备的规范&#xff0c;它是一个虚构出来的计算机&#xff0c;是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Ja…

高可用集群搭建

高可用集群搭建  创建hadoop账户 创建hadoop账户&#xff08;#注意&#xff0c;接下来的操作均在hadoop账户下运行&#xff09; # useradd hadoop # passwd hadoopsu - hadoopmkdir soft disk1 disk2mkdir -p disk{1,2}/dfs/{dn,nn}mkdir -p disk{1,2}/nodemgr/local 将本地目…

scrt如何切换成英文版_英文版SecureCRT显示乱码解决

英文版SecureCRT显示乱码解决系统环境&#xff1a;CentOS&#xff15;.&#xff16;以前Linux都是默认安装在英文环境下&#xff0c;用英文版的SecureCRT查看系统内容输出的也都是英文的&#xff0c;不会出现乱码问题。今天同事在服务器安装时默认选择了简体中文&#xff0c;这…

java try catch_Java捕获异常

大家好&#xff0c;欢迎来到乐字节小乐的Java技术分享园地在Java中&#xff0c;凡是可能抛出异常的语句&#xff0c;都可以用try ... catch捕获。把可能发生异常的语句放在try { ... }中&#xff0c;然后使用catch捕获对应的Exception及其子类。多catch语句可以使用多个catch语…

多语言持久性:带有MongoDB和Derby的EclipseLink

从现在开始&#xff0c;多语种持久性一直是新闻。 从2011年底开始&#xff0c;在著名的Fowler帖子的推动下&#xff0c;我看到了更多更好的主意。 最新的一个是公司内部的学生项目&#xff0c;我们在其中使用Scala作为后端数据&#xff0c;将数据持久存储到MongoDB&#xff0c;…

web前端开发最佳实践--(笔记之JavaScript最佳实践)

如何避免全局变量污染&#xff1f; 避免定义全局变量或全局函数用一个变量进行封装&#xff0c;并返回外部需要访问的接口如何写出高维护的js代码 配置数据和代码逻辑分离 如&#xff1a; 改成&#xff1a; ---用js模板mustachehandlebarsjsMVC的数据模式 model&#xff1a;数据…

Python入门笔记

Python变量和数据类型 数据类型 print语句 注释 Python的注释以 # 开头&#xff0c;后面的文字直到行尾都算注释 # 这一行全部都是注释... print hello # 这也是注释 什么是变量 定义字符串 字符串可以用或者""括起来表示。 如果字符串本身包含怎么办&#xff1f;比如…

如何保证input的输入值不会随着提交 而变空_如何对web界面的应用进行测试?

一、输入框&#xff1a;1、字符型输入框&#xff1a;&#xff08;1&#xff09;字符型输入框&#xff1a;英文全角、英文半角、数字、空或者空格、特殊字符“~&#xff01;#&#xffe5;%……&*&#xff1f;[]{}”特别要注意单引号和&符号。禁止直接输入特殊字符时&…

CentOS6.x下,tomcat - web项目部署

1. 安装tomcat tomcat安装方法&#xff1a;http://www.cnblogs.com/vurtne-lu/p/6478440.html 2. 配置tomcat 修改server.xml文件 <!-- 使用 80 端口 (也可以使用其它端口)--> <Connector port"80" protocol"HTTP/1.1"connectionTimeout"200…

使用地图触发功能处理相干事件

本文介绍如何通过使用映射触发器来处理一致性事件。 基本上&#xff0c;建议使用Oracle Coherence中的分布式数据管理来研究Oracle Coherence API的基本配置和实现。 映射触发器是Oracle Coherence提供最高度定制的缓存管理系统的最重要功能之一。 MapTrigger代表一个功能代理…

阿里云服务器mysql莫名丢失_mysql数据库丢失

mysql数据库丢失云服务器(Elastic Compute Service&#xff0c;简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备&#xff0c;让您像使用水、电、天然气等公共资源一样便捷、高…

gitlab使用_使用 Docker 部署 Gitlab

GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的web服务&#xff0c;具有wiki和issue跟踪功能。GitLab是当前应用非常广泛的源代码管理系统。1. 安装docker引擎并启动2. 获取gitlab镜像包查看下载好的镜像3. 在…

druid连接池初始化慢_7、SpringBoot -连接池(Durid)

一导入相关核心包<dependencies>二 在application.ymlspring三、配置Druid Datasource(可选)Configuration五、监控访问 http://localhost:8080/druid&#xff0c; 使用上面配置的账号密码。四、自动配置原理源代码Configuration说明DataSourceProperties 配置相关 首先找…

使用工厂方法模式设计最佳实践

在前面的“设计模式”示例中&#xff0c;我们解释了当今常用的“工厂”模式。 在本节中&#xff0c;我们将了解具有更多抽象的更高级的解决方案。 该模式称为工厂方法设计模式。 定义&#xff1a; Factory方法模式提供了一种用于创建对象的方法&#xff0c;但是将对象创建委托…

qt绘制一圈圆_Qt绘制圆

最近开始折腾Qt了&#xff0c;手头上的一个项目需要用到Qt来绘制一些简单图像。记录下Qt绘制圆的过程&#xff1a;对于以A为圆心&#xff0c;半径为R的圆&#xff0c;外部有一个外切的正方形&#xff0c;正方形上有B点。如下图所示&#xff1a;对于void QPainter::drawArc(int …

前端基础之HTML

HTML介绍 Web服务本质 import socketsk socket.socket()sk.bind(("127.0.0.1", 8080)) sk.listen(5)while True:conn, addr sk.accept()data conn.recv(8096)conn.send(b"HTTP/1.1 200 OK\r\n\r\n")conn.secd(b"<h1>Hello world!</h1&g…

指令引用了 内存 该内存不能为read 一直弹窗_【翻译】使用Rust测试ARM和X86内存模型

原文标题: The Story of Tail Call Optimizations in Rust 原文标题: Examining ARM vs X86 Memory Models with Rust原文链接: https://www.nickwilcox.com/blog/arm_vs_x86_memory_model/公众号&#xff1a; Rust碎碎念苹果公司最近宣布&#xff0c;他们将要把笔记本和桌面电…