通过Pax考试对JBoss Fuse 6.x进行集成测试,第一部分

JBoss Fuse是一个功能强大的分布式集成平台,具有内置功能,用于集中集成的微服务部署的集中式配置管理,服务发现,版本控制,API网关,负载平衡,故障转移等。 JBoss Fuse 6.x构建在Fabric8 1.x开源项目之上。 当在JBoss Fuse之上构建集成微服务时,该博客是有关集成测试的两部分系列的第一部分。 鲍勃

老实说,这些天,当人们问到他们正在编写的软件/服务的测试策略的细节时,我感到非常惊喜。 我认为每个人都同意测试很重要,但实际上没有人这样做。 我与使用JBoss Fuse编写其集成服务的客户进行了大量合作,经常被问到如何最好地测试这些服务。

JBoss Fuse使用Apache Camel作为其路由和中介引擎,您最终使用Camel编写了大部分集成逻辑。 对于测试骆驼路线,我强烈建议使用骆驼随附的内置测试框架 。 此外,我不仅建议您使用内置的测试套件,还强烈建议您使用它来构建大部分测试。 能够在容器外部运行骆驼及其相关测试是与其他集成解决方案的非常重要的区别,测试应充分利用这一事实。

但是,如果您拥有良好的骆驼路线测试覆盖率,而现在又想进一步采取行动,该怎么办? 您想将路由/应用程序部署到JBoss Fuse容器中,并验证一切是否正确接线,是否正确包含了OSGI导入/导出/元数据,附加到HTTP服务的服务等。这些是要部署到的合法理由。一个容器,但是手动执行此操作容易出错且速度很慢。 那么有什么选项可以自动执行此操作?

我已经遇到了几种不同的方法来做到这一点:使用Arquillian ,它是最初为JBoss Application Server / Wilfly / EAP开发的与容器无关的集成测试框架。 有一些很好的模块可以集成测试OSGI部署 。 但是,一旦尝试进行更多的“黑匣子”集成测试,Arquillian目前还不够强大,无法进行JBoss Fuse测试。 为此,我建议使用Pax Exam项目。 Pax Exam已经存在了很长一段时间,并且已经被用来测试ServiceMix / Karaf的各种衍生产品,这些衍生产品与JBoss Fuse足够相似以进行测试。

因此,为了不仅帮助其他想要开始使用Pax Exam进行集成测试JBoss Fuse 6.x的人,我整理了一个入门入门书……而且更自私地……以便我记下这些笔记,以便我可以回到他们身边; 因为我已经做了足够多次,却忘记了现在该写下来了。

Itests

我通常会在要称为子项目itests的子模块中构建自动集成测试以及要测试的项目。 您可以随意进行相同的操作,也可以将集成测试放在单独的项目中。 在本指南中,我将集成测试构建到Rider Auto OSGI示例项目中,该项目改编自Claus Ibsen和Jon Anstey的书Camel in Action 。 随意浏览该项目,以了解模块的功能。

首先,我强烈建议您浏览Pax考试文档,然后将头戳到名为FuseTestSupport的文件中。 在其中,您将看到为OSGI容器提供@Configuration的方法:

// note, for this to work, you must download and put fuse in the location// specified by the maven coordinates herepublic static final String GROUP_ID = "org.jboss.fuse";public static final String ARTIFACT_ID = "jboss-fuse-minimal";public static final String VERSION = "6.1.0.redhat-379";    public static Option[] container() {return new Option[]{karafDistributionConfiguration().frameworkUrl(maven().groupId(GROUP_ID).artifactId(ARTIFACT_ID).version(VERSION).type("zip")).karafVersion("2.3.0").useDeployFolder(false).name("JBoss Fuse").unpackDirectory(new File("target/paxexam/unpack")),configureConsole().ignoreLocalConsole(),editConfigurationFilePut("etc/config.properties", "karaf.startup.message", "Loading Fabric from: ${karaf.home}"),editConfigurationFilePut("etc/org.ops4j.pax.web.cfg", "org.osgi.service.http.port", HTTP_PORT),editConfigurationFilePut("etc/org.apache.karaf.management.cfg", "rmiRegistryPort", RMI_REG_PORT),editConfigurationFilePut("etc/org.apache.karaf.management.cfg", "rmiServerPort", RMI_SERVER_PORT),editConfigurationFilePut("etc/users.properties", "admin", "admin,admin"),// this is the key... we can install features, bundles, etc. using these pax-exam optionsfeatures(maven().groupId("org.fusesource.examples").artifactId("rider-auto-common").versionAsInProject().classifier("features").type("xml"),"rider-auto-osgi"),logLevel(LogLevelOption.LogLevel.INFO),// enable this if you want to keep the exploded directories of fuse after the tests are run
//                keepRuntimeFolder(),};};

请注意,我们使用的是JBoss Fuse的实际发行版,而不是某些hacked-0together版本。 为此,您需要访问JBoss.org 网站 ,下载Fuse,然后将其安装到与上述代码段中指定的坐标相对应的maven存储库中,如下所示:

~/.m2/repository/org/jboss/fuse/jboss-fuse-minimal/6.1.0.redhat-379/<put distro here>

现在,当测试运行时,它将找到Fuse disto。

您还可以查看配置选项,包括编辑一些现成的配置选项,添加功能,更改日志级别等。您可以查看KarafDistributionOption文档或CoreOptions ,其中详细介绍了所有可用选项。

这部分相当简单。 这是在该配置之上构建的简单测试的示例:

@Inject@Filter("(camel.context.name=rider-auto-backend)")protected CamelContext camelContext;@Testpublic void testBootstrap() {assertNotNull(camelContext);ActiveMQComponent component = camelContext.getComponent("activemq", ActiveMQComponent.class);assertNotNull(component);String brokerUrl = ((ActiveMQConfiguration)component.getConfiguration()).getBrokerURL();// make sure configuration was set up correctlyassertEquals("tcp://localhost:61616", brokerUrl);// further validate that all of the camel contexts were installed correctlyString contextList = executeCommand("camel:context-list");assertTrue(contextList.contains("rider-auto-backend"));assertTrue(contextList.contains("rider-auto-file-poller"));assertTrue(contextList.contains("rider-auto-normalizer"));}

该测试实际上已注入到容器中(有关更多信息,请参见pax考试文档),并且可以访问容器的内部(例如,依赖项注入)并根据部署的内部运行一些断言。

黑匣子测试

能够以完全访问您的部署和容器运行时的方式来运行自动化集成测试非常好。 您可以进行复杂的测试,以确保所有内容都正确部署,以您认为的方式应用了配置,并且可以检索所需的所有服务。 但是另一种类型的测试非常有用:能够部署集成服务并远程(在容器外部)执行该功能,而无需了解太多细节。 因此,例如,与集成服务公开的接口(如JMS,文件系统,REST / SOAP端点等)进行交互。您可以使用标准库来访问这些接口。 但是,对于这种类型的测试,如何将保险丝容器暴露为黑匣子呢? 答案是Pax Exam允许您在“服务器”模式下运行容器 。 不幸的是,它是作为API公开的,可用于编排“服务器”模式容器。 但是,如果您是maven用户,则更好的方法是附加到集成测试生命周期,并让maven启动和关闭服务器。

幸运的是,Pax Exam 项目还包括一个maven插件,可以插入到maven生命周期集成测试阶段。

例如,将其包含在pom.xml中 :

<plugin><groupId>org.ops4j.pax.exam</groupId><artifactId>exam-maven-plugin</artifactId><version>${pax.exam.version}</version><configuration><configClass>org.jboss.fuse.example.server.ServerConfiguration</configClass></configuration><executions><execution><goals><goal>start-container</goal><goal>stop-container</goal></goals></execution></executions></plugin>

请查看整个pom.xml ,其中显示了如何将它们分解为Maven配置文件并附加到Maven故障安全插件以进行集成测试。

配套服务

到目前为止,Pax Exam为使用JBoss Fuse运行我们的自动化集成测试做了大量工作。 但是,如果我们想将其他服务附加到容器的引导程序,该怎么办? 也许我们想在容器启动之前启动ActiveMQ的实例(因为也许我们有需要附加到外部ActiveMQ的服务……然后我们可以使用队列/ DLQ中的消息结果来断言行为,等等) ,并确保在测试结束时将其拆除。 您可以[扩展不同的Pax Exam反应器之一]来做到这一点:

public class ActiveMQPerClass extends PerClass {protected BrokerService brokerService = null;@Overridepublic StagedExamReactor create(List<TestContainer> containers, List<TestProbeBuilder> mProbes) {return new EagerSingleStagedReactor(containers, mProbes){@Overridepublic void beforeClass() {bootStrapActiveMQ();super.beforeClass();}@Overridepublic void afterClass() {teardownActiveMQ();super.afterClass();}};}

然后在测试中,当您指定要使用的反应堆策略时,请使用我们的自定义策略:

@RunWith(PaxExam.class)
@ExamReactorStrategy(ActiveMQPerClass.class)
public class BootstrapIT extends FuseTestSupport {@Inject@Filter("(camel.context.name=rider-auto-backend)")protected CamelContext camelContext;@Testpublic void testBootstrap() {.....

熔丝面料

这篇文章涵盖了针对独立版本的Fuse编写集成测试。 许多相同的机制也将用于针对Fuse Fabric / Fabric8部署创建集成测试。 这将在本文的第二部分中介绍。 敬请关注! 也可以在Twitter @christianposta上关注我,了解有关Fuse / Fabric8 / Microservices / DevOps等的推文,以及有关新博客文章的更新!

翻译自: https://www.javacodegeeks.com/2015/04/integration-testing-jboss-fuse-6-x-with-pax-exam-part-i.html

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

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

相关文章

【APICloud系列|3】开发APP对UI的一般性要求

以前用APICloud平台开发过一款APP&#xff0c;已经上线&#xff0c;现在担任CTO对UI普及一下常识。 总结 UI图&#xff1a;640*960、1280*720 图标大小&#xff1a;200*200、64*64 图片的格式&#xff1a;png 底部导航栏&#xff1a;两种图片不同颜色。 说明&#xff1a;

浙江大学计算机研究生分数线初试单科学科,计算机考研|这两所自划线,单科没过线也能复试?!...

东南、浙大&#xff01;单科没过线也能复试&#xff01;1.东南大学&#xff1a;统考考生(不含报考苏州联合研究生院考生和管理类联考考生)总分超过报考专业复试线20分以上&#xff0c;单科(限一门)可降2分。2.浙江大学&#xff1a;分数线(管理类联考除外)满足以下情况视同上线&…

量子计算机专业大学排名,世界十大新科技排名,量子计算机排第一名(2)

4、从空气中收集净水详细介绍&#xff1a;这项科技对于缺少水资源的国家地区来说会有很大的帮助&#xff0c;而且不需要耗费过多的资源。来自MIT和加州大学伯克利分校的研究团队通过一类新型多孔晶体——金属有机骨架&#xff0c;在空气湿度低至20%的环境下成功收集净水&#x…

java 拉起服务_技术开发者应该如何构建小团队的微服务方案?

作者 | 徐鹏责编 | 刘静出品 | CSDN(ID&#xff1a;CSDNnews)我们的产品是Linkflow&#xff0c;企业运营人员使用的客户数据平台(CDP)。产品的一个重要部分类似企业版的”捷径”&#xff0c;让运营人员可以像搭乐高积木一样创建企业的自动化流程&#xff0c;无需编程即可让数据…

html排序按钮_插件分享 | 可进行排序扫描任务的Task Queue

前言&#xff1a;在以往hvv场景中使用Goby的过程总是存在一个痛点&#xff1a;时间短&#xff0c;目标多&#xff0c;只能盯着扫描进度结束后才能手动返回到初始界面开启下一个扫描任务(内心极度狂躁)。本次Goby更新后又开放了新的插件入口点以及API&#xff0c;使添加扫描任务…

RabbitMQ如何做到不丢不重

目录 MQTT协议 如何保证消息100%不丢失 生产端可靠性投递 ​编辑 RabbitMQ的Broker端投 &#xff08;1&#xff09;消息持久化 &#xff08;2&#xff09;设置集群镜像模式 &#xff08;3&#xff09;消息补偿机制 消费端 ACK机制改为手动 总结 MQTT协议 先来说下MQTT…

【LESS系列】简介和使用

LESS —— 一个CSS预编译框架&#xff0c;它在CSS的语法基础之上&#xff0c;引入了变量、Mixin&#xff08;混入&#xff09;、运算以及函数等功能&#xff0c;大大简化了CSS的编写&#xff0c;并且降低了CSS的维护成本&#xff0c;就像它的名称所说的那样&#xff0c;LESS可以…

掌握 React 与 React Native

今天面试被人问到React 与 React Native ,废话不多说,直接上干货。 React Native官网:https://reactnative.cn/ React Native App 页面布局直接通过 HTML 和 CSS 的前端基础技术进行布局与开发,大大降低了学习成本。 你如果早就在心里有开发一个自己 App 的想法,而刚…

cpu序列号唯一吗_怎么看电脑硬件是不是新的 有什么软件能检测吗?

怎么看电脑硬件是不是全新的很多人比较关心的问题&#xff0c;毕竟现在很多奸商为了最求利润什么招式都用的出来&#xff0c;其中依旧重新&#xff0c;依次充好是最常见的伎俩了。 怎么看电脑硬件是不是新的 有什么软件能检测吗&#xff1f;这个时候大家可能就会想了&#xff0…

扬州大学计算机考研难考吗,扬州大学(专业学位)计算机技术考研难吗

考研真题资料优惠价原价选择很多考生在准备扬州大学(专业学位)计算机技术考研难吗&#xff1f;是考研报考的时候都会产生这样的疑问&#xff1a;这个专业的研究生好吗&#xff1f;适合我吗&#xff1f;对我以后的人生和职业会有帮助吗&#xff1f;考生在准备扬州大学(专业学位)…

21世纪的设计模式:适配器模式

这是我的演讲“ 21世纪的设计模式”的第三部分。 适配器模式桥接世界。 在一个世界中&#xff0c;我们有一个概念的界面。 在另一个世界&#xff0c;我们有不同的界面。 这两个接口有不同的用途&#xff0c;但有时我们需要进行转移。 在一个编写良好的世界中&#xff0c;我们可…

在百度搜索页添加公司总部的客服电话

先看一下收录标准 1.登录百度数据开放平台:http://open.baidu.com/data/ms/nav/pc/ 注意事项: 2.进到信息提交的页面,先填写相应的资质,后提交信息即可,按照给出来的示例,去填写相对应的信息就可以了

理解Linux系统中的load average(图文版)

本文转自&#xff1a;http://heipark.iteye.com/blog/1340384 一、什么是load average&#xff1f; linux系统中的Load对当前CPU工作量的度量 (WikiPedia: the system load is a measure of the amount of work that a computer system is doing)。也有简单的说是进程队列的长度…

click点击后鼠标移去就失效怎么实现_鼠标右键失灵怎么办,你知道原因吗?

在上网时&#xff0c;有时会遇到按右键没有反应的情况。一开始还以为是中了病毒&#xff0c;但是重启之后&#xff0c;又恢复正常了&#xff0c;这到底是怎么回事呢&#xff1f;如果是在我电脑上操作电脑软件导致的鼠标右键失灵可能以下原因造成的。一&#xff1a;系统繁忙&…

计算机考研379分,考研379分报考南开大学被刷,是调剂还是二战?师姐建议非常肯定...

原标题&#xff1a;考研379分报考南开大学被刷&#xff0c;是调剂还是二战&#xff1f;师姐建议非常肯定随着考研国家线公布&#xff0c;34所自主划线的985大学也加快了复试的脚步&#xff0c;目前很多大学已经开始了复试工作&#xff0c;比如清华大学&#xff0c;南开大学等。…

微信小程序源码下载链接

参考链接备用&#xff1a;https://www.cnblogs.com/ytkah/p/9003620.html 微信小程序的火热程度大家都有所了解&#xff0c;也有很多牛人写了不错的小程序&#xff0c;今天ytkah就整理一些github上的小程序开源项目&#xff0c;源码可以直接下载来用&#xff0c;感兴趣的朋友赶…

开源源码合集

微信小程序的火热程度大家都有所了解&#xff0c;也有很多牛人写了不错的小程序&#xff0c;今天Benson就整理一些github上的小程序开源项目&#xff0c;源码可以直接下载来用&#xff0c;感兴趣的朋友赶紧去看看吧&#xff01;仿豆瓣电影微信小程序 https://github.com/zc…

2019广西对口计算机分数线,2019广西本科第一批投档分数线出炉,网友:我差一点考上清华大学...

2019广西本科第一批投档分数线出炉&#xff0c;网友&#xff1a;我差一点考上清华大学……就在昨天&#xff0c;7月13号&#xff0c;广西招生考试院公布了“2019年普通高校招生本科第一批最低投档分数线”。不知道&#xff0c;参加第一批志愿填报的考生们&#xff0c;你们过线了…

Android 4.4及以上系统下应用的状态栏颜色渐变效果的实现

上一篇转载的博文里讲到了怎么开启状态栏透明的效果&#xff0c;不过如果在有ActionBar的情况下&#xff0c;会出现状态栏透明而ActionBar横亘在状态栏和内容之间的丑陋情况&#xff0c;如下图&#xff1a; 通过百度之后&#xff0c;发现了GitHub上有个项目可以实现从ActionBar…

学习Spring-Cloud –基础结构和配置

我有机会与Spring-Cloud一起创建了一组云就绪微服务的样本集&#xff0c;Spring-Cloud如何使不同的基础架构组件和服务很好地协同工作给我留下了深刻的印象。 我习惯于基于基于Netflix OSS的堆栈创建微服务&#xff0c;通常在Netflix堆栈中&#xff0c; Eureka被认为是微服务进…