aix pax

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足够相似以进行测试。

因此,为了不仅帮助其他想要入门的人进行集成测试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 ExamReact器之一]来做到这一点:

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();}};}

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

@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

aix pax

aix pax_通过Pax考试对JBoss Fuse 6.x进行集成测试,第一部分相关推荐

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

    JBoss Fuse是一个功能强大的分布式集成平台,具有内置功能,用于集中集成的微服务部署的集中式配置管理,服务发现,版本控制,API网关,负载平衡,故障转移等. JBoss Fuse 6.x构建在F ...

  2. jboss fuse 教程_JBoss Fuse –使用MVEL将您的静态配置转换为动态模板

    jboss fuse 教程 最近,我重新发现了我已经忘记的JBoss Fuse功能,并且我认为其他人可能会从此提醒中受益 . 这篇文章将重点放在JBoss Fuse和Fabric8上,但所有正在寻找最 ...

  3. jenkins jboss_与JBoss Fuse,Jenkins和Nexus的持续集成

    jenkins jboss 最近,我正在整理一个快速启动的Maven项目,以展示组织JBoss Fuse项目的可能方法. 该项目可以在Github上找到: https : //github.com/p ...

  4. 与JBoss Fuse,Jenkins和Nexus的持续集成

    最近,我正在整理一个快速启动的Maven项目,以展示一种组织JBoss Fuse项目的可行方法. 该项目可在Github上找到: https : //github.com/paoloantinori/ ...

  5. jboss fuse 教程_JBoss Fuse:使用JEXL的动态蓝图文件

    jboss fuse 教程 在本文中,我将展示如何在Apache Aries Blueprint xml文件中添加一些内联脚本. 我不一定会称其为最佳实践,但我一直有这样的想法:这种能力可能有用. 可 ...

  6. jboss fuse 教程_使用JBoss Fuse和OpenShift进行Cloud Native Camel骑行

    jboss fuse 教程 红帽公司最近发布了一个微服务集成工具包,用于在OpenShift v3的Docker和Kubernetes环境中运行我们的微服务. 为了帮助人们更好地理解这一点,我将Rid ...

  7. jboss fuse 教程_JBoss Fuse –一些鲜为人知的技巧

    jboss fuse 教程 TL; DR 将Java静态调用公开为Karaf Shell本机命令 在部署时覆盖OSGi标头 在使用OSGi片段部署时间后覆盖OSGi标头 将Java静态调用公开为Kar ...

  8. jboss fuse 教程_IDC关于使用JBoss Fuse的商业价值的报告(与Apache Camel一起使用)

    jboss fuse 教程 这只是一篇博客文章,具有更多的商业性质,但是您不能一无所有. 实际上,这也是使Apache Camel保持活力并保持良好状态的原因,这还归功于其商业上的成功. 希望从JBo ...

  9. jboss fuse 教程_在JBoss Fuse / Fabric8 / Karaf中使用Byteman

    jboss fuse 教程 您是否曾经尝试了解一些简单的东西不起作用的过程? 您正在任何众所周知的上下文中编写代码,无论出于何种原因它都无法正常工作. 而且您信任您的平台,因此您认真阅读了所有日志. ...

最新文章

  1. arch Linux 安装完,无法通过 SSH 远程连接 root 用户问题
  2. 长文 | 从发展轨迹、社会变迁和人口数据变化来看工具类产品的发展出路有哪些(1)
  3. respect labor
  4. wxWidgets:wxColourPickerEvent类用法
  5. Windows 8 IIS中配置PHP运行环境的方法
  6. es6语法-对象拓展运算符
  7. Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
  8. 黑魔法(method-swizzling)解决第三方库引发的问题
  9. 2018数据技术嘉年华-金融峰会·重庆站6.29相约相聚!
  10. 计算机应用基础模块2客观题答案 文档,卓顶精文2019计算机应用基础网上形考答案模块2 Word 2010 文字处理系统客观题答案...
  11. 电信业务分类目录2019_2019年7月国内增值电信业务许可情况分析报告:本期重点介绍内容分发网络业务...
  12. 数据库之互联网常用架构方案一览
  13. Node.js 下载安装教程
  14. 芯海科技2022数字芯片笔试题
  15. c语言float代码,[求助]float
  16. Reactor响应式编程系列(二)- 背压策略BackPressure
  17. 2021年华为c++面试题及答案
  18. 中国农历的Java实现
  19. 为什么量子力学和相对论有矛盾?超弦理论或将统一物理学
  20. Auto CAD2010下载地址及图文安装教程(带注册机)

热门文章

  1. YbtOJ#573-后缀表达【二分图匹配】
  2. P2519-[HAOI2011]problem a【dp】
  3. 牛客小白月赛17-记录(附题解)
  4. P2014-选课【树形dp,背包】
  5. ssl初一组周六模拟赛【2018.3.10】
  6. codeforces Balanced Substring
  7. 2017西安交大ACM小学期数论 [完全平方数]
  8. 自然语言处理中的Attention Model:是什么以及为什么[二]
  9. 最通俗易懂的乐观锁与悲观锁原理及实现
  10. 小白学数据:教你用Python实现简单监督学习算法