Framework for automated integration tests with focus on messaging integration

Overview

Citrus Integration Testing Logo

Maven Central build <Sonarcloud quality gate> Javadocs Licensed under Apache License version 2.0 Chat on Zulip

Welcome to Citrus

Citrus is a test framework written in Java that is able to create fully automated end-to-end use case tests for enterprise SOA applications. Citrus simulates surrounding interface partners supporting a huge set of different transports and protocols like Http, JMS, TCP/IP, FTP, SOAP, XML and JSON.

Visit our official website at 'https://citrusframework.org' for more information and a detailed documentation.

Preconditions

You need following software on your machine in order to use the Citrus framework:

  • Java 11 or higher Installed JDK plus JAVA_HOME environment variable set up and pointing to your Java installation directory

  • Java IDE (optional) A Java IDE will help you to manage your Citrus project (e.g. creating and executing test cases). You can use the Java IDE that you like best like Eclipse or IntelliJ IDEA.

  • Maven 3.0.x or higher (optional) Citrus projects will fit best with Maven (https://maven.apache.org). However it is not required to use Maven. You can also run tests using ANT (https://ant.apache.org/) for instance.

Installation

  • Download the latest Citrus release archive

  • Extract the archive into an appropriate location on your local storage

  • Use the ANT tutorial in our tutorials section to find out how to run tests using ANT.

  • Read the Maven tutorial to find out how to integrate the Citrus tests into the Maven build lifecycle

Release Notes

Each release comes with a complete reference documentation. At the beginning of the reference you will find a section about the changes and notes for this release. For detailed description of changed packages and classes do also consult the provided javadoc.

Resources

  • Citrus's source repository is hosted on github.com. You can clone the repository with git://github.com/citrusframework/citrus.git as URL

  • Find our blog and more interesting articles around Citrus on https://labs.consol.de and checkout the various post categories for selecting a specific topic.

  • https://citrusframework.org offers tutorials and more information about Citrus framework.

Samples

Our sample section is still growing. Nevertheless you can find a sample project called 'FlightBookingService' in our distribution. To build and run the sample applications go to the 'samples' directory and run 'build.xml' script with ANT (ant -p).

Licensing

Copyright 2006-2018 ConSol Software GmbH.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Consulting

Just in case you need professional support for Citrus have a look at 'https://citrusframework.org/docs/consulting/'. Contact [email protected] directly for any request or questions (or use the contact form at 'https://www.consol.com/contact/')

Bugs

Please report any bugs and/or feature requests directly to https://github.com/citrusframework/citrus/issues

Information

For more information on Citrus see citrusframework.org, including a complete reference manual.

Comments
  • "Reply channel not set up yet" when 2 HTTP Citrus actions happen in parallel

    Citrus Version 2.7.8

    Expected behavior Test passes

    Actual behavior Test fails

    Test case description 2 logically identical async blocks with different test data, pseudo code:

    async().actions(
      insert data 1 into DB,
      behaviour with HTTP receive() and respond() with HTTP 200 OK,
      DB check that a record with status "SUCCESS" exists for the test data 1
    );
    
    async().actions(
      insert data 2 into DB,
      behaviour with HTTP receive() and respond() with HTTP 200 OK,
      DB check that a record with status "SUCCESS" exists for the test data 2
    );
    

    SUT behavior:

    • SUT has a background job which is triggered every 5 sec (on TEST env)
    • The background job scans DB for new entries and starts processing them
    • SUT then does HTTP POST with this new data as payload to an external system (Citrus HTTP mock server)
    • The external system responds with some additional data (the mock replies with HTTP 200 OK)
    • When SUT receives this data, the processing is finished and SUT then stores a record with status SUCCESS into DB (Citrus checks that DB has this entry at the end of the async blocks)

    Note: one async block alone works but 2 blocks cause a failure:

    12:57:06,068 DEBUG on.DefaultCorrelationManager| Finding correlated object for 'citrus_message_id = '9a369286-4824-4d6c-9eac-0bb12308d19a''
    12:57:06,068 DEBUG           citrus.RetryLogger| Reply channel not set up yet - retrying in 500ms
    

    It seems that Citrus cannot find the right HTTP channel for sending a response.

    Type: Feature Prio: Medium 
    opened by progaddict 23
  • Issue/821/access variable by xpath json

    Issue/821/access variable by xpath json

    Added the feature requested with issue #821.

    I have implemented the feature into the changes of #820.

    The code got more complex than I thought it would get. The reason is the separation of JsonPath/Xpath functionality into different modules. So I wasn't able to access the JSonPath/Xpath utillities from the api-module that hosts the TestContext. I had to decouple the extraction mechanism for JsonPath and Xpath into the modules. Although there is a bunch of new files, the implemented approach pretty much follows the decoupling mechanisms already used thought the framework.

    There is one toDo in com.consol.citrus.xml.XpathSegmentVariableExtractor for which I request advice from you @christophd.

    opened by tschlat 16
  • java.lang.NoSuchMethodError: com.google.common.util.concurrent.SimpleTimeLimiter.create()

    java.lang.NoSuchMethodError: com.google.common.util.concurrent.SimpleTimeLimiter.create()

    When i execute the sample Selenium scripts without using selenium:stop/ or seleniumBrowser.stop() command there is no failure and when i include this i get Error. Below is the stack trace of the execution log.

    15:13:52,002 INFO  tContextBootstrapper| Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@10b48321, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@6b67034, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@16267862, org.springframework.test.context.support.DirtiesContextTestExecutionListener@453da22c]
    15:13:52,111 INFO  icApplicationContext| Refreshing org.springframework.context.support.GenericApplicationContext@6156496: startup date [Wed Oct 11 15:13:52 IST 2017]; root of context hierarchy
    15:13:52,189 INFO         citrus.Citrus| Unable to locate Citrus application properties
    15:13:52,204 INFO  BeanDefinitionReader| Loading XML bean definitions from URL [file:/C:/Users/venkatrao.veginati/citrus-samples-master/sample-xml/target/test-classes/citrus-context.xml]
    15:13:52,456 DEBUG BeanDefinitionReader| Loaded 8 bean definitions from location pattern [classpath*:citrus-context.xml]
    15:13:52,674 DEBUG .XsdSchemaRepository| Loading XSD schema resource citrus-http-message.xsd
    15:13:52,862 INFO  oint.SeleniumBrowser| Download storage location is: C:\Users\VENKAT~1.VEG\AppData\Local\Temp\selenium8684686586694778750
    15:13:52,877 INFO         citrus.Citrus| 
    15:13:52,877 INFO         citrus.Citrus| ------------------------------------------------------------------------
    15:13:52,877 INFO         citrus.Citrus|        .__  __                       
    15:13:52,877 INFO         citrus.Citrus|   ____ |__|/  |________ __ __  ______
    15:13:52,877 INFO         citrus.Citrus| _/ ___\|  \   __\_  __ \  |  \/  ___/
    15:13:52,877 INFO         citrus.Citrus| \  \___|  ||  |  |  | \/  |  /\___ \ 
    15:13:52,877 INFO         citrus.Citrus|  \___  >__||__|  |__|  |____//____  >
    15:13:52,877 INFO         citrus.Citrus|      \/                           \/
    15:13:52,877 INFO         citrus.Citrus| 
    15:13:52,877 INFO         citrus.Citrus| C I T R U S  T E S T S  2.7.2
    15:13:52,877 INFO         citrus.Citrus| 
    15:13:52,877 INFO         citrus.Citrus| ------------------------------------------------------------------------
    15:13:52,877 DEBUG        citrus.Citrus| BEFORE TEST SUITE
    15:13:52,877 INFO         citrus.Citrus| 
    15:13:52,877 INFO         citrus.Citrus| 
    15:13:52,877 INFO         citrus.Citrus| BEFORE TEST SUITE: SUCCESS
    15:13:52,877 INFO         citrus.Citrus| ------------------------------------------------------------------------
    15:13:52,877 INFO         citrus.Citrus| 
    15:13:52,893 DEBUG t.TestContextFactory| Created new test context - using global variables: '{}'
    15:13:52,893 INFO  mlApplicationContext| Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@3234f74e: startup date [Wed Oct 11 15:13:52 IST 2017]; parent: org.springframework.context.support.GenericApplicationContext@6156496
    15:13:52,893 INFO  BeanDefinitionReader| Loading XML bean definitions from class path resource [com/consol/citrus/samples/todolist/MyFirstTest.xml]
    15:13:52,940 INFO  BeanDefinitionReader| Loading XML bean definitions from class path resource [com/consol/citrus/spring/annotation-config-ctx.xml]
    15:13:53,002 INFO         citrus.Citrus| 
    15:13:53,002 INFO         citrus.Citrus| ------------------------------------------------------------------------
    15:13:53,002 DEBUG        citrus.Citrus| STARTING TEST MyFirstTest <com.consol.citrus.samples.todolist>
    15:13:53,002 INFO         citrus.Citrus| 
    15:13:53,002 DEBUG      citrus.TestCase| Initializing test case
    15:13:53,002 DEBUG  context.TestContext| Setting variable: citrus.test.name with value: 'MyFirstTest'
    15:13:53,002 DEBUG  context.TestContext| Setting variable: citrus.test.package with value: 'com.consol.citrus.samples.todolist'
    15:13:53,002 INFO         citrus.Citrus| 
    15:13:53,002 DEBUG        citrus.Citrus| TEST STEP 1/5: selenium:start
    15:13:53,002 DEBUG s.StartBrowserAction| Executing Selenium browser command 'selenium:start'
    15:13:53,002 INFO  s.StartBrowserAction| Opening browser of type firefox
    1507715033345	geckodriver	INFO	Listening on 127.0.0.1:24433
    1507715033946	mozprofile::profile	INFO	Using profile path C:\Users\VENKAT~1.VEG\AppData\Local\Temp\rust_mozprofile.n3CGbTSaUUPI
    1507715033946	geckodriver::marionette	INFO	Starting browser C:\Program Files (x86)\Mozilla Firefox\firefox.exe with args []
    1507715033962	geckodriver::marionette	INFO	Connecting to Marionette on localhost:52642
    1507715034172	addons.manager	DEBUG	Application has been upgraded
    1507715034336	addons.manager	DEBUG	Loaded provider scope for resource://gre/modules/addons/XPIProvider.jsm: ["XPIProvider"]
    1507715034341	addons.manager	DEBUG	Loaded provider scope for resource://gre/modules/LightweightThemeManager.jsm: ["LightweightThemeManager"]
    1507715034352	addons.manager	DEBUG	Loaded provider scope for resource://gre/modules/addons/GMPProvider.jsm
    1507715034356	addons.manager	DEBUG	Loaded provider scope for resource://gre/modules/addons/PluginProvider.jsm
    1507715034358	addons.manager	DEBUG	Starting provider: XPIProvider
    1507715034359	addons.xpi	DEBUG	startup
    1507715034361	addons.xpi	INFO	SystemAddonInstallLocation directory is missing
    1507715034363	addons.xpi	INFO	Mapping [email protected] to C:\Program Files (x86)\Mozilla Firefox\browser\features\[email protected]
    1507715034364	addons.xpi	INFO	Mapping [email protected] to C:\Program Files (x86)\Mozilla Firefox\browser\features\[email protected]
    1507715034365	addons.xpi	INFO	Mapping [email protected] to C:\Program Files (x86)\Mozilla Firefox\browser\features\[email protected]
    1507715034366	addons.xpi	INFO	Mapping [email protected] to C:\Program Files (x86)\Mozilla Firefox\browser\features\[email protected]
    1507715034368	addons.xpi	INFO	Mapping {972ce4c6-7e08-4474-a285-3208198ce6fd} to C:\Program Files (x86)\Mozilla Firefox\browser\extensions\{972ce4c6-7e08-4474-a285-3208198ce6fd}.xpi
    1507715034369	addons.xpi	DEBUG	checkForChanges
    1507715034370	addons.xpi	DEBUG	Loaded add-on state from prefs: {}
    1507715034370	addons.xpi	DEBUG	New add-on [email protected] in app-system-defaults
    1507715034370	addons.xpi	DEBUG	getModTime: Recursive scan of [email protected]
    1507715034371	addons.xpi	DEBUG	New add-on [email protected] in app-system-defaults
    1507715034371	addons.xpi	DEBUG	getModTime: Recursive scan of [email protected]
    1507715034371	addons.xpi	DEBUG	New add-on [email protected] in app-system-defaults
    1507715034371	addons.xpi	DEBUG	getModTime: Recursive scan of [email protected]
    1507715034372	addons.xpi	DEBUG	New add-on [email protected] in app-system-defaults
    1507715034372	addons.xpi	DEBUG	getModTime: Recursive scan of [email protected]
    1507715034372	addons.xpi	DEBUG	New add-on {972ce4c6-7e08-4474-a285-3208198ce6fd} in app-global
    1507715034372	addons.xpi	DEBUG	getModTime: Recursive scan of {972ce4c6-7e08-4474-a285-3208198ce6fd}
    1507715034372	addons.xpi	DEBUG	getInstallState changed: true, state: {"app-system-defaults":{"[email protected]":{"d":"C:\\Program Files (x86)\\Mozilla Firefox\\browser\\features\\[email protected]","st":1501594952333},"[email protected]":{"d":"C:\\Program Files (x86)\\Mozilla Firefox\\browser\\features\\[email protected]","st":1501594952332},"[email protected]":{"d":"C:\\Program Files (x86)\\Mozilla Firefox\\browser\\features\\[email protected]","st":1501594952286},"[email protected]":{"d":"C:\\Program Files (x86)\\Mozilla Firefox\\browser\\features\\[email protected]","st":1501594952164}},"app-global":{"{972ce4c6-7e08-4474-a285-3208198ce6fd}":{"d":"C:\\Program Files (x86)\\Mozilla Firefox\\browser\\extensions\\{972ce4c6-7e08-4474-a285-3208198ce6fd}.xpi","st":1501594952342}}}
    1507715034380	addons.xpi-utils	DEBUG	Opening XPI database C:\Users\VENKAT~1.VEG\AppData\Local\Temp\rust_mozprofile.n3CGbTSaUUPI\extensions.json
    1507715034384	addons.xpi-utils	DEBUG	New add-on [email protected] installed in app-system-defaults
    *** Blocklist::_loadBlocklistFromFile: blocklist is disabled
    1507715034391	DeferredSave.extensions.json	DEBUG	Save changes
    1507715034391	addons.xpi-utils	DEBUG	New add-on [email protected] installed in app-system-defaults
    1507715034394	DeferredSave.extensions.json	DEBUG	Starting timer
    1507715034395	DeferredSave.extensions.json	DEBUG	Save changes
    1507715034395	addons.xpi-utils	DEBUG	New add-on [email protected] installed in app-system-defaults
    1507715034399	DeferredSave.extensions.json	DEBUG	Save changes
    1507715034399	addons.xpi-utils	DEBUG	New add-on [email protected] installed in app-system-defaults
    1507715034402	DeferredSave.extensions.json	DEBUG	Save changes
    1507715034402	addons.xpi-utils	DEBUG	New add-on {972ce4c6-7e08-4474-a285-3208198ce6fd} installed in app-global
    1507715034404	DeferredSave.extensions.json	DEBUG	Save changes
    1507715034405	addons.xpi-utils	INFO	Hiding the updated system add-ons.
    1507715034409	addons.xpi	DEBUG	Loading bootstrap scope from C:\Program Files (x86)\Mozilla Firefox\browser\features\[email protected]
    1507715034416	addons.xpi	DEBUG	Calling bootstrap method install on [email protected] version 1.0
    1507715034416	addons.xpi-utils	DEBUG	Make addon app-system-defaults:[email protected] visible
    1507715034416	DeferredSave.extensions.json	DEBUG	Save changes
    1507715034417	addons.xpi	DEBUG	Loading bootstrap scope from C:\Program Files (x86)\Mozilla Firefox\browser\features\[email protected]
    1507715034419	addons.xpi	DEBUG	Calling bootstrap method install on [email protected] version 1.0.2
    1507715034419	addons.xpi-utils	DEBUG	Make addon app-system-defaults:[email protected] visible
    1507715034420	DeferredSave.extensions.json	DEBUG	Save changes
    1507715034420	addons.xpi	DEBUG	Loading bootstrap scope from C:\Program Files (x86)\Mozilla Firefox\browser\features\[email protected]
    1507715034424	addons.xpi	DEBUG	Calling bootstrap method install on [email protected] version 1.3.2
    1507715034424	addons.xpi-utils	DEBUG	Make addon app-system-defaults:[email protected] visible
    1507715034424	DeferredSave.extensions.json	DEBUG	Save changes
    1507715034424	addons.xpi	DEBUG	Loading bootstrap scope from C:\Program Files (x86)\Mozilla Firefox\browser\features\[email protected]
    1507715034426	addons.xpi	DEBUG	Calling bootstrap method install on [email protected] version 1.0
    1507715034426	addons.xpi-utils	DEBUG	Make addon app-system-defaults:[email protected] visible
    1507715034426	DeferredSave.extensions.json	DEBUG	Save changes
    1507715034427	addons.xpi-utils	DEBUG	Make addon app-global:{972ce4c6-7e08-4474-a285-3208198ce6fd} visible
    1507715034427	DeferredSave.extensions.json	DEBUG	Save changes
    1507715034427	addons.xpi	DEBUG	Updating XPIState for {"id":"[email protected]","syncGUID":"a-6W6mL1d7QY","location":"app-system-defaults","version":"1.0","type":"extension","internalName":null,"updateURL":null,"updateKey":null,"optionsURL":null,"optionsType":null,"aboutURL":null,"icons":{},"iconURL":null,"icon64URL":null,"defaultLocale":{"name":"Multi-process staged rollout","description":"Staged rollout of Firefox multi-process feature.","creator":null,"homepageURL":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"descriptor":"C:\\Program Files (x86)\\Mozilla Firefox\\browser\\features\\[email protected]","installDate":1501594952333,"updateDate":1501594952333,"applyBackgroundUpdates":1,"bootstrap":true,"skinnable":false,"size":4584,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"hasBinaryComponents":false,"strictCompatibility":false,"locales":[],"targetApplications":[{"id":"{ec8030f7-c20a-464f-9b0e-13a3a9e97384}","minVersion":"47.0.2","maxVersion":"47.0.2"}],"targetPlatforms":[],"multiprocessCompatible":false,"seen":true}
    1507715034427	addons.xpi	DEBUG	getModTime: Recursive scan of [email protected]
    1507715034427	addons.xpi	DEBUG	Updating XPIState for {"id":"[email protected]","syncGUID":"IZ3LjmoODnxd","location":"app-system-defaults","version":"1.0.2","type":"extension","internalName":null,"updateURL":null,"updateKey":null,"optionsURL":null,"optionsType":null,"aboutURL":null,"icons":{},"iconURL":null,"icon64URL":null,"defaultLocale":{"name":"Pocket","description":"When you find something you want to view later, put it in Pocket.","creator":null,"homepageURL":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"descriptor":"C:\\Program Files (x86)\\Mozilla Firefox\\browser\\features\\[email protected]","installDate":1501594952332,"updateDate":1501594952332,"applyBackgroundUpdates":1,"bootstrap":true,"skinnable":false,"size":894477,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"hasBinaryComponents":false,"strictCompatibility":false,"locales":[],"targetApplications":[{"id":"{ec8030f7-c20a-464f-9b0e-13a3a9e97384}","minVersion":"47.0.2","maxVersion":"47.0.2"}],"targetPlatforms":[],"multiprocessCompatible":false,"seen":true}
    1507715034427	addons.xpi	DEBUG	getModTime: Recursive scan of [email protected]
    1507715034428	addons.xpi	DEBUG	Updating XPIState for {"id":"[email protected]","syncGUID":"rM7CG_mZjub9","location":"app-system-defaults","version":"1.3.2","type":"extension","internalName":null,"updateURL":null,"updateKey":null,"optionsURL":null,"optionsType":null,"aboutURL":null,"icons":{},"iconURL":null,"icon64URL":null,"defaultLocale":{"name":"Firefox Hello","description":"Web sharing for Firefox","creator":"Mozilla","homepageURL":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"descriptor":"C:\\Program Files (x86)\\Mozilla Firefox\\browser\\features\\[email protected]","installDate":1501594952286,"updateDate":1501594952286,"applyBackgroundUpdates":1,"bootstrap":true,"skinnable":false,"size":4239168,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"hasBinaryComponents":false,"strictCompatibility":false,"locales":[],"targetApplications":[{"id":"{ec8030f7-c20a-464f-9b0e-13a3a9e97384}","minVersion":"46.0a1","maxVersion":"47.*"},{"id":"[email protected]","minVersion":"0","maxVersion":"10"}],"targetPlatforms":[],"multiprocessCompatible":false,"seen":true}
    1507715034428	addons.xpi	DEBUG	getModTime: Recursive scan of [email protected]
    1507715034428	addons.xpi	DEBUG	Updating XPIState for {"id":"[email protected]","syncGUID":"pdMRM1GHZj3F","location":"app-system-defaults","version":"1.0","type":"extension","internalName":null,"updateURL":null,"updateKey":null,"optionsURL":null,"optionsType":null,"aboutURL":null,"icons":{},"iconURL":null,"icon64URL":null,"defaultLocale":{"name":"Websense Helper","description":"Checks for the non-presence of Websense to allow updates to happen.","creator":null,"homepageURL":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"descriptor":"C:\\Program Files (x86)\\Mozilla Firefox\\browser\\features\\[email protected]","installDate":1501594952164,"updateDate":1501594952164,"applyBackgroundUpdates":1,"bootstrap":true,"skinnable":false,"size":3110,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"hasBinaryComponents":false,"strictCompatibility":false,"locales":[],"targetApplications":[{"id":"{ec8030f7-c20a-464f-9b0e-13a3a9e97384}","minVersion":"47.0.2","maxVersion":"47.*"}],"targetPlatforms":[],"multiprocessCompatible":false,"seen":true}
    1507715034428	addons.xpi	DEBUG	getModTime: Recursive scan of [email protected]
    1507715034428	addons.xpi	DEBUG	Updating XPIState for {"id":"{972ce4c6-7e08-4474-a285-3208198ce6fd}","syncGUID":"s7qro6OMIc-A","location":"app-global","version":"47.0.2","type":"theme","internalName":"classic/1.0","updateURL":null,"updateKey":null,"optionsURL":null,"optionsType":null,"aboutURL":null,"icons":{"32":"icon.png","48":"icon.png"},"iconURL":null,"icon64URL":null,"defaultLocale":{"name":"Default","description":"The default theme.","creator":"Mozilla","homepageURL":null,"contributors":["Mozilla Contributors"]},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"descriptor":"C:\\Program Files (x86)\\Mozilla Firefox\\browser\\extensions\\{972ce4c6-7e08-4474-a285-3208198ce6fd}.xpi","installDate":1501594952342,"updateDate":1501594952342,"applyBackgroundUpdates":1,"skinnable":true,"size":22012,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"hasBinaryComponents":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"{ec8030f7-c20a-464f-9b0e-13a3a9e97384}","minVersion":"47.0.2","maxVersion":"47.0.2"}],"targetPlatforms":[],"seen":true}
    1507715034428	addons.xpi	DEBUG	getModTime: Recursive scan of {972ce4c6-7e08-4474-a285-3208198ce6fd}
    1507715034429	DeferredSave.extensions.json	DEBUG	Save changes
    1507715034429	addons.xpi	DEBUG	Updating database with changes to installed add-ons
    1507715034429	addons.xpi-utils	DEBUG	Updating add-on states
    1507715034431	addons.xpi-utils	DEBUG	Writing add-ons list
    1507715034436	addons.xpi	DEBUG	Registering manifest for C:\Program Files (x86)\Mozilla Firefox\browser\features\[email protected]
    1507715034436	addons.xpi	DEBUG	Calling bootstrap method startup on [email protected] version 1.0
    1507715034436	addons.xpi	DEBUG	Registering manifest for C:\Program Files (x86)\Mozilla Firefox\browser\features\[email protected]
    1507715034437	addons.xpi	DEBUG	Calling bootstrap method startup on [email protected] version 1.0.2
    1507715034437	addons.xpi	DEBUG	Registering manifest for C:\Program Files (x86)\Mozilla Firefox\browser\features\[email protected]
    1507715034438	addons.xpi	DEBUG	Calling bootstrap method startup on [email protected] version 1.3.2
    1507715034451	addons.xpi	DEBUG	Registering manifest for C:\Program Files (x86)\Mozilla Firefox\browser\features\[email protected]
    1507715034451	addons.xpi	DEBUG	Calling bootstrap method startup on [email protected] version 1.0
    1507715034453	addons.manager	DEBUG	Registering shutdown blocker for XPIProvider
    1507715034454	addons.manager	DEBUG	Provider finished startup: XPIProvider
    1507715034454	addons.manager	DEBUG	Starting provider: LightweightThemeManager
    1507715034454	addons.manager	DEBUG	Registering shutdown blocker for LightweightThemeManager
    1507715034454	addons.manager	DEBUG	Provider finished startup: LightweightThemeManager
    1507715034454	addons.manager	DEBUG	Starting provider: GMPProvider
    1507715034462	addons.manager	DEBUG	Registering shutdown blocker for GMPProvider
    1507715034463	addons.manager	DEBUG	Provider finished startup: GMPProvider
    1507715034463	addons.manager	DEBUG	Starting provider: PluginProvider
    1507715034463	addons.manager	DEBUG	Registering shutdown blocker for PluginProvider
    1507715034463	addons.manager	DEBUG	Provider finished startup: PluginProvider
    1507715034463	addons.manager	DEBUG	Completed startup sequence
    1507715035064	Marionette	INFO	Listening on port 52642
    1507715035956	addons.manager	DEBUG	Starting provider: <unnamed-provider>
    1507715035956	addons.manager	DEBUG	Registering shutdown blocker for <unnamed-provider>
    1507715035956	addons.manager	DEBUG	Provider finished startup: <unnamed-provider>
    1507715035977	addons.manager	DEBUG	Starting provider: PreviousExperimentProvider
    1507715035978	addons.manager	DEBUG	Registering shutdown blocker for PreviousExperimentProvider
    1507715035978	addons.manager	DEBUG	Provider finished startup: PreviousExperimentProvider
    1507715035979	DeferredSave.extensions.json	DEBUG	Starting write
    1507715036295	DeferredSave.extensions.json	DEBUG	Write succeeded
    1507715036296	addons.xpi-utils	DEBUG	XPI Database saved, setting schema version preference to 17
    Oct 11, 2017 3:13:57 PM org.openqa.selenium.remote.ProtocolHandshake createSession
    INFO: Detected dialect: W3C
    15:13:58,079 DEBUG  context.TestContext| Setting variable: selenium_browser with value: 'seleniumBrowser'
    15:13:58,080 INFO  s.StartBrowserAction| Selenium browser command execution successful: 'selenium:start'
    15:13:58,080 INFO         citrus.Citrus| 
    15:13:58,080 DEBUG        citrus.Citrus| TEST STEP 1/5 SUCCESS
    15:13:58,080 INFO         citrus.Citrus| 
    15:13:58,080 DEBUG        citrus.Citrus| TEST STEP 2/5: selenium:navigate
    15:13:58,080 DEBUG tions.NavigateAction| Executing Selenium browser command 'selenium:navigate'
    15:13:58,272 INFO  tions.NavigateAction| Selenium browser command execution successful: 'selenium:navigate'
    15:13:58,272 INFO         citrus.Citrus| 
    15:13:58,272 DEBUG        citrus.Citrus| TEST STEP 2/5 SUCCESS
    15:13:58,272 INFO         citrus.Citrus| 
    15:13:58,272 DEBUG        citrus.Citrus| TEST STEP 3/5: selenium:find
    15:13:58,272 DEBUG ns.FindElementAction| Executing Selenium browser command 'selenium:find'
    15:13:58,691 DEBUG  context.TestContext| Setting variable: h1 with value: '[[FirefoxDriver: Firefox on XP (21faee62-8f91-4e78-93f8-43b811ac669b)] -> tag name: h1]'
    15:13:58,691 INFO  ns.FindElementAction| Selenium browser command execution successful: 'selenium:find'
    15:13:58,691 INFO         citrus.Citrus| 
    15:13:58,691 DEBUG        citrus.Citrus| TEST STEP 3/5 SUCCESS
    15:13:58,691 INFO         citrus.Citrus| 
    15:13:58,691 DEBUG        citrus.Citrus| TEST STEP 4/5: selenium:click
    15:13:58,691 DEBUG  actions.ClickAction| Executing Selenium browser command 'selenium:click'
    15:13:58,834 DEBUG  context.TestContext| Setting variable: a with value: '[[FirefoxDriver: Firefox on XP (21faee62-8f91-4e78-93f8-43b811ac669b)] -> xpath: //a[@href='/todolist']]'
    15:13:58,869 INFO   actions.ClickAction| Selenium browser command execution successful: 'selenium:click'
    15:13:58,870 INFO         citrus.Citrus| 
    15:13:58,870 DEBUG        citrus.Citrus| TEST STEP 4/5 SUCCESS
    15:13:58,870 INFO         citrus.Citrus| 
    15:13:58,870 DEBUG        citrus.Citrus| TEST STEP 5/5: selenium:stop
    15:13:58,870 DEBUG ns.StopBrowserAction| Executing Selenium browser command 'selenium:stop'
    15:13:58,870 INFO  ns.StopBrowserAction| Stopping browser of type firefox
    15:13:58,882 INFO  oint.SeleniumBrowser| Stopping browser http://localhost:8080/
    15:13:58,882 INFO  oint.SeleniumBrowser| Trying to close the browser FirefoxDriver: Firefox on XP (21faee62-8f91-4e78-93f8-43b811ac669b) ...
    1507715038920	addons.xpi	DEBUG	Calling bootstrap method shutdown on [email protected] version 1.0
    1507715038920	addons.xpi	DEBUG	Calling bootstrap method shutdown on [email protected] version 1.0.2
    1507715038921	addons.xpi	DEBUG	Calling bootstrap method shutdown on [email protected] version 1.3.2
    1507715038923	addons.xpi	DEBUG	Calling bootstrap method shutdown on [email protected] version 1.0
    15:13:59,113 INFO         citrus.Citrus| 
    15:13:59,113 INFO         citrus.Citrus| TEST SUCCESS MyFirstTest (com.consol.citrus.samples.todolist)
    15:13:59,113 INFO         citrus.Citrus| ------------------------------------------------------------------------
    15:13:59,113 INFO         citrus.Citrus| 
    FAILED: SeleniumCommandIT
    java.lang.NoSuchMethodError: com.google.common.util.concurrent.SimpleTimeLimiter.create(Ljava/util/concurrent/ExecutorService;)Lcom/google/common/util/concurrent/SimpleTimeLimiter;
    	at org.openqa.selenium.net.UrlChecker.<init>(UrlChecker.java:62)
    	at org.openqa.selenium.remote.service.DriverService.stop(DriverService.java:213)
    	at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:95)
    	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:586)
    	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:643)
    	at org.openqa.selenium.remote.RemoteWebDriver.quit(RemoteWebDriver.java:482)
    	at com.consol.citrus.selenium.endpoint.SeleniumBrowser.stop(SeleniumBrowser.java:129)
    	at com.consol.citrus.selenium.actions.StopBrowserAction.execute(StopBrowserAction.java:39)
    	at com.consol.citrus.selenium.actions.AbstractSeleniumAction.doExecute(AbstractSeleniumAction.java:58)
    	at com.consol.citrus.actions.AbstractTestAction.execute(AbstractTestAction.java:42)
    	at com.consol.citrus.TestCase.executeAction(TestCase.java:229)
    	at com.consol.citrus.TestCase.doExecute(TestCase.java:145)
    	at com.consol.citrus.actions.AbstractTestAction.execute(AbstractTestAction.java:42)
    	at com.consol.citrus.Citrus.run(Citrus.java:281)
    	at com.consol.citrus.testng.AbstractTestNGCitrusTest.run(AbstractTestNGCitrusTest.java:112)
    	at com.consol.citrus.testng.AbstractTestNGCitrusTest.run(AbstractTestNGCitrusTest.java:69)
    	at org.testng.internal.MethodInvocationHelper.invokeHookable(MethodInvocationHelper.java:221)
    	at org.testng.internal.Invoker.invokeMethod(Invoker.java:657)
    	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:869)
    	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1193)
    	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
    	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
    	at org.testng.TestRunner.privateRun(TestRunner.java:744)
    	at org.testng.TestRunner.run(TestRunner.java:602)
    	at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
    	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
    	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
    	at org.testng.SuiteRunner.run(SuiteRunner.java:289)
    	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
    	at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
    	at org.testng.TestNG.runSuites(TestNG.java:1144)
    	at org.testng.TestNG.run(TestNG.java:1115)
    	at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
    	at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:236)
    	at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:81)
    
    
    ===============================================
        Default test
        Tests run: 1, Failures: 1, Skips: 0
    ===============================================
    
    15:13:59,128 INFO         citrus.Citrus| 
    15:13:59,128 INFO         citrus.Citrus| ------------------------------------------------------------------------
    15:13:59,128 DEBUG        citrus.Citrus| AFTER TEST SUITE
    15:13:59,128 INFO         citrus.Citrus| 
    15:13:59,128 INFO         citrus.Citrus| 
    15:13:59,128 INFO         citrus.Citrus| AFTER TEST SUITE: SUCCESS
    15:13:59,128 INFO         citrus.Citrus| ------------------------------------------------------------------------
    15:13:59,128 INFO         citrus.Citrus| 
    15:13:59,128 INFO         citrus.Citrus| ------------------------------------------------------------------------
    15:13:59,128 INFO         citrus.Citrus| 
    15:13:59,128 INFO         citrus.Citrus| CITRUS TEST RESULTS
    15:13:59,144 INFO         citrus.Citrus| 
    15:13:59,144 INFO         citrus.Citrus|  MyFirstTest .................................................... SUCCESS
    15:13:59,144 INFO         citrus.Citrus| 
    15:13:59,144 INFO         citrus.Citrus| TOTAL:	1
    15:13:59,144 DEBUG        citrus.Citrus| SKIPPED:	0 (0.0%)
    15:13:59,144 INFO         citrus.Citrus| FAILED:	0 (0.0%)
    15:13:59,144 INFO         citrus.Citrus| SUCCESS:	1 (100.0%)
    15:13:59,144 INFO         citrus.Citrus| 
    15:13:59,144 INFO         citrus.Citrus| ------------------------------------------------------------------------
    15:13:59,144 DEBUG  report.HtmlReporter| Generating HTML test report
    15:13:59,144 DEBUG       util.FileUtils| Reading file resource: 'test-detail.html' (encoding is 'windows-1252')
    15:13:59,144 DEBUG       util.FileUtils| Reading file resource: 'test-report.html' (encoding is 'windows-1252')
    15:13:59,159 INFO   report.HtmlReporter| Generated HTML test report
    
    ===============================================
    Default suite
    Total tests run: 1, Failures: 1, Skips: 0
    ===============================================
    
    15:13:59,222 INFO  icApplicationContext| Closing org.springframework.context.support.GenericApplicationContext@6156496: startup date [Wed Oct 11 15:13:52 IST 2017]; root of context hierarchy
    
    Type: Enhancement 
    opened by venkat-in 16
  • 529: Fixed conversion from byte array to String

    529: Fixed conversion from byte array to String

    Arrays.toString converts the byte array into a String containing the numeric representation of each byte, e.g. [10, 29, 15]. What we actually want is a conversion into the characters, which the bytes represent.

    This prevents a correct conversion of the payload from jms messages.

    opened by lmeyer4 15
  • Selenium Screenshot not working in Page Objects

    Selenium Screenshot not working in Page Objects

    Citrus Version 2.7.6

    Question I have a Page Object (LoginPage) in a different package, than the test class. LoginPage is a Spring Bean and autowired in the test class. selenium(action -> action.browser(browser).screenshot("test-output/Screenshots")); in LoginPage throws Null Pointer Exception at public TestAction selenium(BuilderSupport configurer) { return testRunner.selenium(configurer); }

    What I've tried so far Tried to see if browser.getWebDriver() has any methods to take screenshot from LoginPage. Also, tried selenium(builder -> builder.browser(browser).screenshot("test-output/Screenshots")) No LUCK!

    Additional information

    Type: Question 
    opened by SajanaKrishnan 15
  • Problems with extracting from payload by xpath.

    Problems with extracting from payload by xpath.

    Citrus Version 2.7.6 Hi! I can`t extract from the html page value:

    form name="subscr" method="post" action="/subscr/fotoflirt"
       input type="hidden" name="pp-token" value="Z61f3sAQqxDXigo271CqjmMgpF4sjalnZCK0HQ5lUME="
       input type="hidden" id="sign" name="sign" value="undefined"><a href="javascript: document.subscr.submit();" class="lp-button price5" target="_self" style=""></a>
    </form
    

    I need the pp-token value. I use this code : http().client(todoclient).receive().response().status(HttpStatus.OK).messageType(MessageType.XHTML).extractFromPayload("//html[1]/body/div[1]/div[2]/div[1]/div[1]/div[1]/form[1]/input[1]/@value","ppTOKEN");

    And in logs I see :

    2018-09-24 16:10:35,939 DEBUG [main] ? (?:?) - Found DOMImplementationLS: org.apache.xerces.impl.xs.XSImplementationImpl@69e308c6 2018-09-24 16:10:35,939 DEBUG [main] ? (?:?) - Using DOMImplementationLS: org.apache.xerces.dom.CoreDOMImplementationImpl 2018-09-24 16:10:35,939 DEBUG [main] ? (?:?) - Evaluating XPath expression: //input[@name=pp-token and contains (@value,1)] Its cant stop.

    Type: Question 
    opened by NShpakov 15
  • Can variables be used in send action.payload() and query action.statement()?

    Can variables be used in send action.payload() and query action.statement()?

    Citrus Version 2.7.8

    Question Can variables be used in send action.payload() and query action.statement()?

    What I've tried so far In my Citrus Framework test cases it was recommended to me that I should try and read resource file path strings and SQL select statement strings as properties use them in variables instead of hard coding the stings in my test cases.

    So I am trying to use a property file to populate Citrus global variables with resource file paths and SQL select statements. The properties (resource file path and SQL select statement strings) get loaded into the Text Context global variables just fine.

    However when the file path string gets passed to FileUtils it is the variable name that gets passed instead of the string inside the variable.

    Reading file resource: '${0150reqpath}' (encoding is 'windows-1252') => Failed to read payload resource

    And when the SQL select string gets passed to validateSqlStatement again it is the variable name that gets passed instead of the string inside the variable.

    Missing keyword SELECT in statement: ${stage8sql}

    I've tried variable names with ${} around them and without I've tried no quotes around the stings in the property file and "" around the strings in the property file.

    Additional information citrus-context.xml exerpt

      <context:property-placeholder location="classpath:rfsstest.properties"/>
      
      <citrus:global-variables>
      	<citrus:file path="classpath:rfsstest.properties"/>
      </citrus:global-variables>
    

    rfsstest.properties

    0150reqpath="C:\Users\BAEIV5T\git\TSSVCitrus\TSSVCitrus\src\test\resources\ATLAS_HHHKACS_SchM_0150_Req.xml"
    stage8sql="select * from MSG_MNTR_TRNSACTN_DATA_SGMT, MSG_MNTR_TRNSACTN_HDR where MSG_MNTR_TRNSACTN_DATA_SGMT.NTRNL_TRNSACTN_ID_NBR=MSG_MNTR_TRNSACTN_HDR.NTRNL_TRNSACTN_ID_NBR and CNFRMTN_NBR='TC00420190424R01' and MSG_PRCSG_STG_CD='08'"
    stage10sql="select * from MSG_MNTR_TRNSACTN_DATA_SGMT, MSG_MNTR_TRNSACTN_HDR where MSG_MNTR_TRNSACTN_DATA_SGMT.NTRNL_TRNSACTN_ID_NBR=MSG_MNTR_TRNSACTN_HDR.NTRNL_TRNSACTN_ID_NBR and CNFRMTN_NBR='TC00420190424R01' and MSG_PRCSG_STG_CD='10'"
    

    RFSStest0150prop.java

    package tssv.pipeline.citrus;
    
    import org.testng.annotations.Test;
    import org.apache.commons.dbcp2.BasicDataSource;
    
    import com.consol.citrus.annotations.CitrusTest;
    import com.consol.citrus.dsl.testng.TestNGCitrusTestRunner;
    import org.testng.Reporter;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.core.io.FileSystemResource;
    
    @Test
    public class RFSStest0150prop extends TestNGCitrusTestRunner{
    	@Autowired
    	private BasicDataSource dataSource;
    	
      @CitrusTest (name = "rfss0150dbp")      
      public void rfss0150dbp() {
    	  	
    		Boolean sent = false;
    		int tries = 0;
    		while ((sent == false) & (tries <= 5)){
    			try  
    			{  
    				send(action -> action.endpoint("rfss_request11")
    						.payload(new FileSystemResource("${0150reqpath}")));
    				sent = true;
    				tries = 5;
    				sleep(5000);
    			} catch (Exception e) {  
    				e.printStackTrace();
    				tries = tries + 1;
    				sent = false;
    			} 
    		}
    			
    		sequential().actions( 
    			repeatOnError().until("i = 5").index("i").autoSleep(1000).actions(
    					query(action -> action.dataSource(dataSource)
    							.statement("${stage8sql}")
    							.validate("INBUND_OTBUND_CD", "F"))
    					),
    			repeatOnError().until("i = 5").index("i").autoSleep(1000).actions(
    					query(action -> action.dataSource(dataSource)
    							.statement("${stage10sql}")
    							.validate("INBUND_OTBUND_CD", "O"))
    					)
    			);
    
    		Reporter.log("RFSS Organization detailed response and final found in database");
    
      }
    	
    
    }
    
    09:47:34,757 INFO  BeanDefinitionReader| Loading XML bean definitions from URL [file:/C:/Users/BAEIV5T/git/TSSVCitrus/TSSVCitrus/target/test-classes/citrus-context.xml]
    09:47:35,055 DEBUG BeanDefinitionReader| Loaded 19 bean definitions from location pattern [classpath*:citrus-context.xml]
    09:47:35.825 [main] DEBUG com.consol.citrus.variable.GlobalVariablesPropertyLoader - Reading property file rfsstest.properties
    09:47:35.829 [main] DEBUG com.consol.citrus.variable.GlobalVariablesPropertyLoader - Property line [ 0150reqpath="C:\Users\BAEIV5T\git\TSSVCitrus\TSSVCitrus\src\test\resources\ATLAS_HHHKACS_SchM_0150_Req.xml" ]
    09:47:35.831 [main] DEBUG com.consol.citrus.variable.GlobalVariablesPropertyLoader - Property value replace dynamic content [ "C:\Users\BAEIV5T\git\TSSVCitrus\TSSVCitrus\src\test\resources\ATLAS_HHHKACS_SchM_0150_Req.xml" ]
    09:47:35.832 [main] DEBUG com.consol.citrus.variable.GlobalVariablesPropertyLoader - Loading property: 0150reqpath="C:\Users\BAEIV5T\git\TSSVCitrus\TSSVCitrus\src\test\resources\ATLAS_HHHKACS_SchM_0150_Req.xml" into default variables
    09:47:35.833 [main] DEBUG com.consol.citrus.context.TestContext - Setting variable: 0150reqpath with value: '"C:\Users\BAEIV5T\git\TSSVCitrus\TSSVCitrus\src\test\resources\ATLAS_HHHKACS_SchM_0150_Req.xml"'
    09:47:35.833 [main] DEBUG com.consol.citrus.variable.GlobalVariablesPropertyLoader - Property line [ stage8sql="select * from MSG_MNTR_TRNSACTN_DATA_SGMT, MSG_MNTR_TRNSACTN_HDR where MSG_MNTR_TRNSACTN_DATA_SGMT.NTRNL_TRNSACTN_ID_NBR=MSG_MNTR_TRNSACTN_HDR.NTRNL_TRNSACTN_ID_NBR and CNFRMTN_NBR='TC00420190424R01' and MSG_PRCSG_STG_CD='08'" ]
    09:47:35.833 [main] DEBUG com.consol.citrus.variable.GlobalVariablesPropertyLoader - Property value replace dynamic content [ "select * from MSG_MNTR_TRNSACTN_DATA_SGMT, MSG_MNTR_TRNSACTN_HDR where MSG_MNTR_TRNSACTN_DATA_SGMT.NTRNL_TRNSACTN_ID_NBR=MSG_MNTR_TRNSACTN_HDR.NTRNL_TRNSACTN_ID_NBR and CNFRMTN_NBR='TC00420190424R01' and MSG_PRCSG_STG_CD='08'" ]
    09:47:35.833 [main] DEBUG com.consol.citrus.variable.GlobalVariablesPropertyLoader - Loading property: stage8sql="select * from MSG_MNTR_TRNSACTN_DATA_SGMT, MSG_MNTR_TRNSACTN_HDR where MSG_MNTR_TRNSACTN_DATA_SGMT.NTRNL_TRNSACTN_ID_NBR=MSG_MNTR_TRNSACTN_HDR.NTRNL_TRNSACTN_ID_NBR and CNFRMTN_NBR='TC00420190424R01' and MSG_PRCSG_STG_CD='08'" into default variables
    09:47:35.833 [main] DEBUG com.consol.citrus.context.TestContext - Setting variable: stage8sql with value: '"select * from MSG_MNTR_TRNSACTN_DATA_SGMT, MSG_MNTR_TRNSACTN_HDR where MSG_MNTR_TRNSACTN_DATA_SGMT.NTRNL_TRNSACTN_ID_NBR=MSG_MNTR_TRNSACTN_HDR.NTRNL_TRNSACTN_ID_NBR and CNFRMTN_NBR='TC00420190424R01' and MSG_PRCSG_STG_CD='08'"'
    09:47:35.833 [main] DEBUG com.consol.citrus.variable.GlobalVariablesPropertyLoader - Property line [ stage10sql="select * from MSG_MNTR_TRNSACTN_DATA_SGMT, MSG_MNTR_TRNSACTN_HDR where MSG_MNTR_TRNSACTN_DATA_SGMT.NTRNL_TRNSACTN_ID_NBR=MSG_MNTR_TRNSACTN_HDR.NTRNL_TRNSACTN_ID_NBR and CNFRMTN_NBR='TC00420190424R01' and MSG_PRCSG_STG_CD='10'" ]
    09:47:35.833 [main] DEBUG com.consol.citrus.variable.GlobalVariablesPropertyLoader - Property value replace dynamic content [ "select * from MSG_MNTR_TRNSACTN_DATA_SGMT, MSG_MNTR_TRNSACTN_HDR where MSG_MNTR_TRNSACTN_DATA_SGMT.NTRNL_TRNSACTN_ID_NBR=MSG_MNTR_TRNSACTN_HDR.NTRNL_TRNSACTN_ID_NBR and CNFRMTN_NBR='TC00420190424R01' and MSG_PRCSG_STG_CD='10'" ]
    09:47:35.833 [main] DEBUG com.consol.citrus.variable.GlobalVariablesPropertyLoader - Loading property: stage10sql="select * from MSG_MNTR_TRNSACTN_DATA_SGMT, MSG_MNTR_TRNSACTN_HDR where MSG_MNTR_TRNSACTN_DATA_SGMT.NTRNL_TRNSACTN_ID_NBR=MSG_MNTR_TRNSACTN_HDR.NTRNL_TRNSACTN_ID_NBR and CNFRMTN_NBR='TC00420190424R01' and MSG_PRCSG_STG_CD='10'" into default variables
    09:47:35.833 [main] DEBUG com.consol.citrus.context.TestContext - Setting variable: stage10sql with value: '"select * from MSG_MNTR_TRNSACTN_DATA_SGMT, MSG_MNTR_TRNSACTN_HDR where MSG_MNTR_TRNSACTN_DATA_SGMT.NTRNL_TRNSACTN_ID_NBR=MSG_MNTR_TRNSACTN_HDR.NTRNL_TRNSACTN_ID_NBR and CNFRMTN_NBR='TC00420190424R01' and MSG_PRCSG_STG_CD='10'"'
    09:47:35.833 [main] INFO com.consol.citrus.variable.GlobalVariablesPropertyLoader - Loaded property file rfsstest.properties
    
    09:47:36.458 [main] DEBUG com.consol.citrus.TestCase - Initializing test case
    09:47:36.458 [main] DEBUG com.consol.citrus.TestCase - Global variables:
    09:47:36.458 [main] DEBUG com.consol.citrus.TestCase - stage8sql = "select * from MSG_MNTR_TRNSACTN_DATA_SGMT, MSG_MNTR_TRNSACTN_HDR where MSG_MNTR_TRNSACTN_DATA_SGMT.NTRNL_TRNSACTN_ID_NBR=MSG_MNTR_TRNSACTN_HDR.NTRNL_TRNSACTN_ID_NBR and CNFRMTN_NBR='TC00420190424R01' and MSG_PRCSG_STG_CD='08'"
    09:47:36.458 [main] DEBUG com.consol.citrus.TestCase - stage10sql = "select * from MSG_MNTR_TRNSACTN_DATA_SGMT, MSG_MNTR_TRNSACTN_HDR where MSG_MNTR_TRNSACTN_DATA_SGMT.NTRNL_TRNSACTN_ID_NBR=MSG_MNTR_TRNSACTN_HDR.NTRNL_TRNSACTN_ID_NBR and CNFRMTN_NBR='TC00420190424R01' and MSG_PRCSG_STG_CD='10'"
    09:47:36.458 [main] DEBUG com.consol.citrus.TestCase - 0150reqpath = "C:\Users\BAEIV5T\git\TSSVCitrus\TSSVCitrus\src\test\resources\ATLAS_HHHKACS_SchM_0150_Req.xml"
    09:47:36.458 [main] DEBUG com.consol.citrus.context.TestContext - Setting variable: citrus.test.name with value: 'rfss0150dbp'
    09:47:36.458 [main] DEBUG com.consol.citrus.context.TestContext - Setting variable: citrus.test.package with value: 'tssv.pipeline.citrus'
    09:47:36.458 [main] DEBUG com.consol.citrus.TestCase - Test variables:
    09:47:36.458 [main] DEBUG com.consol.citrus.TestCase - stage8sql = "select * from MSG_MNTR_TRNSACTN_DATA_SGMT, MSG_MNTR_TRNSACTN_HDR where MSG_MNTR_TRNSACTN_DATA_SGMT.NTRNL_TRNSACTN_ID_NBR=MSG_MNTR_TRNSACTN_HDR.NTRNL_TRNSACTN_ID_NBR and CNFRMTN_NBR='TC00420190424R01' and MSG_PRCSG_STG_CD='08'"
    09:47:36.458 [main] DEBUG com.consol.citrus.TestCase - stage10sql = "select * from MSG_MNTR_TRNSACTN_DATA_SGMT, MSG_MNTR_TRNSACTN_HDR where MSG_MNTR_TRNSACTN_DATA_SGMT.NTRNL_TRNSACTN_ID_NBR=MSG_MNTR_TRNSACTN_HDR.NTRNL_TRNSACTN_ID_NBR and CNFRMTN_NBR='TC00420190424R01' and MSG_PRCSG_STG_CD='10'"
    09:47:36.458 [main] DEBUG com.consol.citrus.TestCase - citrus.test.package = tssv.pipeline.citrus
    09:47:36.458 [main] DEBUG com.consol.citrus.TestCase - 0150reqpath = "C:\Users\BAEIV5T\git\TSSVCitrus\TSSVCitrus\src\test\resources\ATLAS_HHHKACS_SchM_0150_Req.xml"
    09:47:36.458 [main] DEBUG com.consol.citrus.TestCase - citrus.test.name = rfss0150dbp
    09:47:36.466 [main] DEBUG com.consol.citrus.util.FileUtils - Reading file resource: '${0150reqpath}' (encoding is 'windows-1252')
    com.consol.citrus.exceptions.CitrusRuntimeException: Failed to read payload resource
    09:47:36.469 [main] DEBUG com.consol.citrus.util.FileUtils - Reading file resource: '${0150reqpath}' (encoding is 'windows-1252')
    	at com.consol.citrus.dsl.builder.SendMessageBuilder.payload(SendMessageBuilder.java:197)
    	at com.consol.citrus.dsl.builder.SendMessageBuilder.payload(SendMessageBuilder.java:184)
    	at tssv.pipeline.citrus.RFSStest0150prop.lambda$0(RFSStest0150prop.java:27)
    	at com.consol.citrus.dsl.runner.DefaultTestRunner.send(DefaultTestRunner.java:316)
    	at com.consol.citrus.dsl.testng.TestNGCitrusTestRunner.send(TestNGCitrusTestRunner.java:214)
    	at tssv.pipeline.citrus.RFSStest0150prop.rfss0150dbp(RFSStest0150prop.java:26)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:223)
    	at com.consol.citrus.dsl.testng.TestNGCitrusTest.invokeTestMethod(TestNGCitrusTest.java:128)
    	at com.consol.citrus.dsl.testng.TestNGCitrusTest.run(TestNGCitrusTest.java:110)
    	at com.consol.citrus.dsl.testng.TestNGCitrusTest.run(TestNGCitrusTest.java:56)
    	at org.testng.internal.MethodInvocationHelper.invokeHookable(MethodInvocationHelper.java:242)
    	at org.testng.internal.Invoker.invokeMethod(Invoker.java:576)
    	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:716)
    	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:988)
    	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
    	at org.testng.TestRunner.privateRun(TestRunner.java:648)
    	at org.testng.TestRunner.run(TestRunner.java:505)
    	at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
    	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
    	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
    	at org.testng.SuiteRunner.run(SuiteRunner.java:364)
    	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
    	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
    	at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
    	at org.testng.TestNG.runSuites(TestNG.java:1049)
    	at org.testng.TestNG.run(TestNG.java:1017)
    	at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
    	at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    	at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
    Caused by: java.io.FileNotFoundException: ${0150reqpath}
    	at org.springframework.core.io.FileSystemResource.getInputStream(FileSystemResource.java:129)
    	at com.consol.citrus.util.FileUtils.readToString(FileUtils.java:115)
    	at com.consol.citrus.dsl.builder.SendMessageBuilder.payload(SendMessageBuilder.java:195)
    	... 34 more
    
    09:47:36.491 [main] DEBUG com.consol.citrus.report.LoggingReporter - TEST ACTION CONTAINER with 2 embedded actions
    09:47:36.492 [main] DEBUG com.consol.citrus.util.BooleanExpressionParser - Boolean expression 1 = 5 evaluates to false
    09:47:36.492 [main] DEBUG com.consol.citrus.context.TestContext - Setting variable: i with value: '1'
    09:47:36.492 [main] INFO com.consol.citrus.container.RepeatOnErrorUntilTrue - Caught exception of type com.consol.citrus.exceptions.CitrusRuntimeException 'Missing keyword SELECT in statement: ${stage8sql}' - performing retry #1
    09:47:36.492 [main] INFO com.consol.citrus.container.RepeatOnErrorUntilTrue - Sleeping 1000 milliseconds
    09:47:37.492 [main] INFO com.consol.citrus.container.RepeatOnErrorUntilTrue - Returning after 1000 milliseconds
    09:47:37.492 [main] DEBUG com.consol.citrus.util.BooleanExpressionParser - Boolean expression 2 = 5 evaluates to false
    09:47:37.492 [main] DEBUG com.consol.citrus.context.TestContext - Setting variable: i with value: '2'
    09:47:37.492 [main] INFO com.consol.citrus.container.RepeatOnErrorUntilTrue - Caught exception of type com.consol.citrus.exceptions.CitrusRuntimeException 'Missing keyword SELECT in statement: ${stage8sql}' - performing retry #2
    09:47:37.492 [main] INFO com.consol.citrus.container.RepeatOnErrorUntilTrue - Sleeping 1000 milliseconds
    09:47:38.493 [main] INFO com.consol.citrus.container.RepeatOnErrorUntilTrue - Returning after 1000 milliseconds
    
    09:47:40.495 [main] DEBUG com.consol.citrus.util.BooleanExpressionParser - Boolean expression 5 = 5 evaluates to true
    09:47:40.495 [main] INFO com.consol.citrus.container.RepeatOnErrorUntilTrue - All retries failed - raising exception com.consol.citrus.exceptions.CitrusRuntimeException
    09:47:40.502 [main] INFO com.consol.citrus.report.LoggingReporter - 
    09:47:40.511 [main] ERROR com.consol.citrus.report.LoggingReporter - TEST FAILED rfss0150dbp <tssv.pipeline.citrus> Nested exception is: 
    com.consol.citrus.exceptions.TestCaseFailedException: Missing keyword SELECT in statement: ${stage8sql}
    	at com.consol.citrus.TestCase.executeAction(TestCase.java:227)
    	at com.consol.citrus.dsl.runner.DefaultTestRunner.run(DefaultTestRunner.java:188)
    	at com.consol.citrus.dsl.builder.AbstractTestContainerBuilder.actions(AbstractTestContainerBuilder.java:94)
    	at tssv.pipeline.citrus.RFSStest0150prop.rfss0150dbp(RFSStest0150prop.java:38)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:223)
    	at com.consol.citrus.dsl.testng.TestNGCitrusTest.invokeTestMethod(TestNGCitrusTest.java:128)
    	at com.consol.citrus.dsl.testng.TestNGCitrusTest.run(TestNGCitrusTest.java:110)
    	at com.consol.citrus.dsl.testng.TestNGCitrusTest.run(TestNGCitrusTest.java:56)
    	at org.testng.internal.MethodInvocationHelper.invokeHookable(MethodInvocationHelper.java:242)
    	at org.testng.internal.Invoker.invokeMethod(Invoker.java:576)
    	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:716)
    	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:988)
    	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
    	at org.testng.TestRunner.privateRun(TestRunner.java:648)
    	at org.testng.TestRunner.run(TestRunner.java:505)
    	at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
    	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
    	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
    	at org.testng.SuiteRunner.run(SuiteRunner.java:364)
    	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
    	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
    	at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
    	at org.testng.TestNG.runSuites(TestNG.java:1049)
    	at org.testng.TestNG.run(TestNG.java:1017)
    	at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
    	at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    	at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
    Caused by: com.consol.citrus.exceptions.CitrusRuntimeException: Missing keyword SELECT in statement: ${stage8sql}
    	at com.consol.citrus.actions.ExecuteSQLQueryAction.validateSqlStatement(ExecuteSQLQueryAction.java:293)
    	at com.consol.citrus.actions.ExecuteSQLQueryAction.executeStatements(ExecuteSQLQueryAction.java:120)
    	at com.consol.citrus.actions.ExecuteSQLQueryAction.doExecute(ExecuteSQLQueryAction.java:98)
    	at com.consol.citrus.actions.AbstractDatabaseConnectingTestAction.execute(AbstractDatabaseConnectingTestAction.java:69)
    	at com.consol.citrus.container.AbstractIteratingActionContainer.executeActions(AbstractIteratingActionContainer.java:68)
    	at com.consol.citrus.container.RepeatOnErrorUntilTrue.executeIteration(RepeatOnErrorUntilTrue.java:61)
    	at com.consol.citrus.container.AbstractIteratingActionContainer.doExecute(AbstractIteratingActionContainer.java:50)
    	at com.consol.citrus.actions.AbstractTestAction.execute(AbstractTestAction.java:42)
    	at com.consol.citrus.container.Sequence.doExecute(Sequence.java:47)
    	at com.consol.citrus.actions.AbstractTestAction.execute(AbstractTestAction.java:42)
    	at com.consol.citrus.TestCase.executeAction(TestCase.java:220)
    	... 32 common frames omitted
    
    Type: Bug Prio: Low good first issue 
    opened by johnshirey 14
  • Initial local build failing in citrus-arquillian

    Initial local build failing in citrus-arquillian

    Citrus Version v2.7.7

    Expected behavior Initial local build with empty Maven repository (~/.m2/repository) should be successful

    Actual behavior Build fails with citrus-arquillian module because of missing dependency for 'org.yaml.snakeyaml'

    Test case sample Build Citrus with empty Maven repository

    Type: Bug Prio: Low 
    opened by christophd 14
  • Support Cucumber Version >= 4.0.0

    Support Cucumber Version >= 4.0.0

    Extracted from #537

    User story As a Citrus user, I would like to use cucumber version >= 4.0.0 with my citrus tests, so that I can use the 4.x.x features of cucumber.

    Additional information

    • 2.7.x of citrus supports Cucumber 2.x
    • 2.8.x of citrus supports Cucumber 3.x
    Type: Maintenance Prio: Medium 
    opened by svettwer 13
  • WaitConditionBuilder constructor never sets the condition in the builder despite taking it as an argument

    WaitConditionBuilder constructor never sets the condition in the builder despite taking it as an argument

    Citrus Version 3.2.1

    Expected behavior The constructor should set the condition in the underlying builder.

    Actual behavior The constructor does not set the condition in the underlying builder, it has to be set manually.

    Test case sample

    Wait.Builder builder = new Wait.Builder()
            .time(timeout);
    WaitActionConditionBuilder waitActionConditionBuilder = new WaitActionConditionBuilder(condition, builder);
    

    does not work. The condition will never actually be set. Instead,

    Wait.Builder builder = new Wait.Builder()
            .time(timeout)
            .condition(condition);
    
    WaitActionConditionBuilder waitActionConditionBuilder = new WaitActionConditionBuilder(condition, waitBuilder);
    

    has to be performed. This makes the argument condition in the WaitActionConditionBuilder useless. I'd propose to add a line builder.condition(condition) in the constructor of WaitConditionBuilder.

    Type: Bug Prio: Medium good first issue 
    opened by he-ritter 12
  • begin to use citrus with existing cucumber test cases

    begin to use citrus with existing cucumber test cases

    Question I already have some cucumber + Junit test cases without using citrus. Now I want to introduce citrus to my test suite for all new added test cases in the future. But I cannot config correctly with new added citrus jar deps and cucumber.properties so old and new test cases could co-exist.


    Citrus Version 3 testCompile with following dependencies in build.gradle file: citrus-core, citrus-java-dsl, citrus-cucumber with version 2.7.8



    What I've tried so far Previously my testCompile includes io.cucumber:cucumber-java and cucumber-junit, the test could try without problem: launch gradle clean test and output is build successful and test reports are generated. (to make test quicker I use dryRun as true)

    1. But as soon as I added citrus-cucumber (also with citrus-core and citrus-java-dsl) into my build.gradle file as testCompile deps, the error happens as following.
    com.mycompany.RunTest > initializationError FAILED
        cucumber.runtime.CucumberException: 
               java.lang.NoSuchMethodException: 
                   cucumber.runtime.java.CitrusBackend.<init>(cucumber.runtime.io.ResourceLoader, io.cucumber.stepexpression.TypeRegistry)
    
            Caused by:
            java.lang.NoSuchMethodException: cucumber.runtime.java.CitrusBackend.<init>(cucumber.runtime.io.ResourceLoader, io.cucumber.stepexpression.TypeRegistry)
    
    1. Then I added the the file src/test/resources/cucumber.properties and launch gradle clean test -i again, Same error msg as above.
    cucumber.api.java.ObjectFactory=cucumber.runtime.java.CitrusObjectFactory
    
    1. I added cucumber glue options into my RunTest.java file as following and launch gradle cmd again. Same error msg as above.
    @RunWith(Cucumber.class)
    @CucumberOptions(
        plugin = { "pretty", 
            "html:build/reports/cucumber", 
            "json:build/test-results/cucumber/cucumber.json" }, 
        monochrome = true, 
        glue = { "com.mycompany", "com.consol.citrus.cucumber.step.runner.core" }, 
        dryRun=true)
    public class RunTest {
    }
    

    **Additional information** No Type: Question 
    opened by wushuzh 12
  • [Spring - JUnit5] Cannot run test with the JUnit life circle TestInstance.Lifecycle.PER_CLASS

    [Spring - JUnit5] Cannot run test with the JUnit life circle TestInstance.Lifecycle.PER_CLASS

    Citrus Version 3.3.0

    Question I'm using Spring and JUnit5. I would like to add the org.junit.jupiter.api.AfterAll annotation so that, I put the TestInstance.Lifecycle.PER_CLASS in the test class. But when I execute the test, It show error:

    com.consol.citrus.exceptions.CitrusRuntimeException: Missing Citrus instance in JUnit5 extension context
    
    	at com.consol.citrus.junit.jupiter.CitrusExtensionHelper.getCitrus(CitrusExtensionHelper.java:219)
    	at com.consol.citrus.junit.jupiter.CitrusExtension.postProcessTestInstance(CitrusExtension.java:158)
    	at com.consol.citrus.junit.jupiter.spring.CitrusSpringExtension.postProcessTestInstance(CitrusSpringExtension.java:102)
    	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$8(ClassBasedTestDescriptor.java:363)
    	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:368)
    	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$9(ClassBasedTestDescriptor.java:363)
    	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
    	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
    	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
    	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    	at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310)
    	at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735)
    	at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
    	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:362)
    	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:283)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:282)
    	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:272)
    	at java.base/java.util.Optional.orElseGet(Optional.java:364)
    	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:271)
    	at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31)
    	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$before$2(ClassBasedTestDescriptor.java:197)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:196)
    	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:80)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:148)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
    	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
    	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
    	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
    	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
    	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
    	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
    	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
    	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107)
    	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
    	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
    	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
    	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
    	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
    	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
    	at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
    	at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
    	at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57)
    	at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
    	at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
    	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
    	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
    	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54
    

    my AferAll is very simple

        @AfterAll
        public void clean() {
            log.info("Clean after test");
    
        }
    

    Without TestInstance.Lifecycle.PER_CLASS annotation and the @AfterAll , the test work correctly. => Do you have any suggestions for this case? Regards,

    opened by hvhai 0
  • spring 6.0.0 compatibility

    spring 6.0.0 compatibility

    tracking issue, so "the world" knows that I am working on making citrus (and -simulator later on) sprint 6.0.0 compatible.

    branch: https://github.com/citrusframework/citrus/blob/feature/spring-600-upgrade/pom.xml#L204.

    Type: Enhancement Type: Maintenance Prio: Medium Type: Dependencies State: WIP 
    opened by bbortt 0
  • RepeatOnErrorUntilTrue Enhancement for Exceptions different from Citrus Exception

    RepeatOnErrorUntilTrue Enhancement for Exceptions different from Citrus Exception

    User story

    As a user, i want to repeat on error so that an action failed by any reason would be repeated It would be nice to have an option inside RepeatOnErrorUntilTrue to set wether or not all exceptions should be repeated.

    Additional context

    I've implemented a combination of RepeatOnErrorUntilTrue and Catch using Catch.Builder.catchException().exception((String) null). This way i tell the catch action that it should catch no exception. The Catch Action will throw a CItrus Exception immediatly on any type of causing excpetion. This way the RepeatOnErrorUntilTrue executes the repeat logic.

    Beste Grüße,

    Stefan

    opened by StefanFellinger 0
  • chore(deps): Bump commons-net from 3.8.0 to 3.9.0

    chore(deps): Bump commons-net from 3.8.0 to 3.9.0

    Bumps commons-net from 3.8.0 to 3.9.0.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    Type: Dependencies 
    opened by dependabot[bot] 0
Releases(v3.3.0)
Owner
Citrus Framework
Juicy automated messaging integration test framework
Citrus Framework
Docker-compose-integration-tstst - An exploration of how to run integration tests against an application that has inconvenient external dependencies (e.g. a SQL database).

Tstst? it was supposed to be docker-compose-integration-tests but i was too lazy to fix it at the outset, and now im trying to convince myself its fun

null 1 Jan 4, 2022
This project is a simple messaging application made using React-Native framework, Gifted-Chat library and Firebase database

This project is a simple messaging application made using React-Native framework, Gifted-Chat library and Firebase database. The example that will be shown here focuses on the ability of two people to message each other in a chat room.

null 3 Jan 30, 2022
Tuya 37 Dec 26, 2022
Create your Java crypto trading bot in minutes. Our Spring boot starter takes care of exchange connections, accounts, orders, trades, and positions so you can focus on building your strategies.

Quick Start | Documentation | Discord | Twitter Create and run your java crypto trading bot in minutes Our Spring boot starter takes care of exchange

Cassandre 442 Jan 3, 2023
OpenAPI JSON Schema Generator allows auto-generation of API client libraries with a focus on JSON schema given an OpenAPI Spec

OpenAPI JSON Schema Generator IMPORTANT: before the first release, one will need to build the project locally to use the enhancements, bug fixes in th

OpenAPI Tools 5 Dec 31, 2022
My first proper GitHub project, I guess. Basically an automated version of the "Battle Royale" short series on Geo Facts' YouTube channel.

State-Royale Made by Pixer415, with some help from ThatOneCalculator This project needs your contributions. New modes/new features/typo fixes/suggesti

null 2 Jun 27, 2022
Spring Boot Migrator (SBM) - a tool for automated code migrations to upgrade or migrate to Spring Boot

Spring Boot Migrator uses and is compatible to OpenRewrite, a powerful mass refactoring ecosystem for Java and other source code.

Spring Projects Experimental 231 Jan 2, 2023
Automated health check for Zeebe cluster

cluster-healthcheck Automated health check for Camunda Cloud clusters. See HealthCheck for usage. This project is in very very early stages of develop

Peter Ihme 2 Oct 16, 2021
A lightweight messaging library that simplifies the development and usage of RabbitMQ with the AMQP protocol.

kryo-messaging This library contains a simple MessagingService which simplifies the setup and work with RabbitMQ and the AMQP protocol. Usage Gradle r

Kryonite Labs 3 Jan 10, 2022
🕊️ The world's most advanced open source instant messaging engine for 100K~10M concurrent users https://turms-im.github.io/docs

简体中文 What is Turms Turms is the most advanced open-source instant messaging engine for 100K~10M concurrent users in the world. Please refer to Turms D

null 1.2k Dec 27, 2022
OwlGram is an unofficial messaging app that uses Telegram's API.

?? OwlGram OwlGram is an unofficial messaging app that uses Telegram's API. ?? About Reproducible Builds To reproduce the build of OwlGram is only nee

OwlGram Dev 193 Dec 31, 2022
💡极致性能的企业级Java服务器框架,RPC,游戏服务器框架,web应用服务器框架。(Extreme fast enterprise Java server framework, can be RPC, game server framework, web server framework.)

?? 为性能而生的万能服务器框架 ?? Ⅰ. zfoo简介 ?? 性能炸裂,天生异步,Actor设计思想,无锁化设计,基于Spring的MVC式用法的万能RPC框架 极致序列化,原生集成的目前二进制序列化和反序列化速度最快的 zfoo protocol 作为网络通讯协议 高可拓展性,单台服务器部署,

null 1k Jan 1, 2023
Integration Test Framework for Paper!

MiniTestFramework Integration Test Framework for Paper! Usage Install plugin Create Test Structure /test create <filename.testname> [width] Build cont

MiniDigger | Martin 12 Nov 25, 2022
This repository includes selenium web driver tests examples using spring boot application.

Selenium Web Driver Tests This repository includes selenium tests examples using custom spring boot application. Overview Run tests Additional Informa

Denys Vozniuk 4 Nov 27, 2022
🖥 CRUD Angular + Spring demonstrating Has-Many relationship, including tests for the back-end and front-end

REST API with Spring Boot and Angular CRUD Angular + Spring demonstrating Has-Many relationship, with tests. ?? Tecnologies Java 17 Spring Boot 3 JPA

Loiane Groner 53 Dec 28, 2022
Lattice is a powerful, lightweight business extension invoke framework. By using the Lattice framework, complex business customization can be efficiently organized and managed.

Lattice Framework Introduction Lattice is a powerful, lightweight business extension invoke framework. By using the Lattice framework, complex busines

null 41 Dec 30, 2022
An integration solution for Spring Cloud and Tencent middleware - Spring Cloud和腾讯中间件的集成方案

Spring Cloud Tencent English | 简体中文 Introduction Spring Cloud Tencent contains components distributed micro-service applications need during developin

Tencent 2.6k Dec 29, 2022
Project developed for MB Talk - App Center integration on React Native

App Center Setup Download APK Click here Requirements React Native CLI Yarn Sign Up on App Center and create a new App. How to use this repo Clone thi

André Angeloni 2 Oct 31, 2022
Movecraft & CoreProtect Integration

Movecraft CoreProtect Addon Home of the code for the following features: CoreProtect logging support Version support The main branch is coded for 1.14

TylerS1066 2 Jul 24, 2022