aix pax_通过Pax考试对JBoss Fuse 6.x进行集成测试,第一部分
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进行集成测试,第一部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 佐良娜的训练安卓破解版下载(佐良娜的训练
- 下一篇: ddos攻击怎么找攻击人(ddos攻击怎