SlideShare ist ein Scribd-Unternehmen logo
1 von 20
Wir unternehmen IT.
Citrus
Automatisierte
Integrationstests
22. Juni 2015
Seite
Mission: Integrationstest
www.consol.de2
App BApp A
Schnittstelle / Vertrag
SOAP / WSDL
Seite
Mission: Integrationstest
www.consol.de3
App BApp A
Schnittstelle / Vertrag
SOAP / WSDL
Simulator ?
Mock ?
Seite
Mission: Integrationstest
www.consol.de4
App A
Schnittstelle / Vertrag
SOAP / WSDL
Seite
Mission: Integrationstest
www.consol.de5
System
Under Test
Webclient
Kunde
Agent / Techniker
Mobile, PDA
Verträge
Stammdaten
Dienstleister
Shipping
Seite
Dienstleister
Stammdaten
Agent / Techniker
Mission: Integrationstest
www.consol.de6
System
Under Test
Kunde
Seite
Build Lifecycle
www.consol.de7
Build-Lifecycle
Checkout &
Compile
Code
Änderung
Citrus
Integration
Tests
Unit
Tests
Package &
Deploy
Build-Tool (Maven)
Unit Test Framework
Citrus Test Framework
JUnit TestNG
Surefire Plugin
Test Execution
Seite
Testumgebung
www.consol.de8
Call Interfaces
Verify results
Code Versionierung (Git)
Application Server
(System Under Test)
Citrus Projekt
Build-Tool (Maven)
Continuous Build (Jenkins)
Test Reporting
Checkout Sources
Compile
Package
Deploy
Execute
Tests
Create
Reports
DBMS
Save
Update
Delete
Trigger Build
9Seite
Citrus Testfall
•  XML Testfallbeschreibung
www.consol.de
<testcase name="FirstSampleITest">
<meta-info>
<author>Christoph Deppisch</author>
<creationdate>2014-11-06</creationdate>
<status>DRAFT</status>
<last-updated-by>Christoph Deppisch</last-updated-by>
<last-updated-on>2013-11-14T00:00:00</last-updated-on>
</meta-info>
<description>This is a sample test case</description>
<actions>
<echo>
<message>TODO: Code the test!</message>
</echo>
<!-- Test actions go in here -->
[...]
</actions>
</testcase>
10Seite
Testaktionen
•  Testfall besteht aus 1-n Testaktionen
•  Erweiterbarkeit um eigene Testaktionen!
www.consol.de
Name Beschreibung Name Beschreibung
send Versenden einer Nachricht sql SQL Abfragen ausführen
receive Empfang einer Nachricht sleep Zeitspanne warten
echo Text ausgeben create-varaibles Testvariable(n) erstellen
java Java Code ausführen iterate Schleife
groovy Groovy Code ausführen repeat-until-true Schleife mit Bedingung
input Benutzereingabe repeat-onerror-until-true Fehlerschleife
assert Ausnahme erwarten parallel Parallele Ausführung
catch Ausnahme abfangen sequential Sequentielle Ausführung
ant ANT Skript ausführen conditional Bedingte Ausführung
11Seite
Nachrichten senden
•  Payload und Header werden definiert
•  Vordefinierten Endpoint wird referenziert
www.consol.de
<send endpoint="helloRequestJmsEndpoint">
<message>
<data>
<![CDATA[
<HelloRequest xmlns="http://consol.de/schemas/HelloService.xsd">
<MessageId>123456789</MessageId>
<CorrelationId>1020304050</CorrelationId>
<User>Christoph</User>
<Text>Hello Citrus</Text>
</HelloRequest>
]]>
</data>
</message>
<header>
<element name="Operation" value="sayHello"/>
<element name="CorrelationId" value=“1020304050"/>
</header>
</send>
12Seite
Nachrichten empfangen
•  Erwartete Payload und Header werden definiert
•  Vordefinierter Endpoint wird referenziert
www.consol.de
<receive endpoint="helloResponseJmsEndpoint">
<message>
<data>
<![CDATA[
<HelloResponse xmlns="http://consol.de/schemas/HelloService.xsd">
<MessageId>9988776655</MessageId>
<CorrelationId>1020304050</CorrelationId>
<User>Citrus</User>
<Text>Hello User</Text>
</HelloResponse>
]]>
</data>
</message>
<header>
<element name="Operation" value="sayHello"/>
<element name="CorrelationId" value=“1020304050"/>
</header>
</receive>
13Seite
Endpoints
•  Fertige Komponenten - nur Konfiguration notwendig!
–  citrus-jms, citrus-http, citrus-ws, citrus-ssh, citrus-ftp, citrus-mail,
citrus-camel, citrus-vertx, ...
www.consol.de
<!– HelloService JMS endpoints -->
<citrus-jms:endpoint id="helloRequestJmsEndpoint"
destination-name="JMS.HelloService.Request.Queue"/>
<citrus-jms:endpoint id="helloResponseJmsEndpoint"
destination-name="JMS.HelloService.Response.Queue"/>
<!-- SOAP web service client -->
<citrus-ws:client id="helloSoapClient"
request-url="http://localhost:8080/test"/>
<!– SOAP web server -->
<citrus-http:server id="helloSoapServer"
port="18080"
auto-start="true"
resource-base="src/citrus/resources"/>
14Seite
Test Variablen
www.consol.de
<send endpoint="helloRequestJmsEndpoint">
<message>
<data>
<![CDATA[
<HelloRequest xmlns="http://consol.de/schemas/HelloService.xsd">
<MessageId>${messageId}</MessageId>
<CorrelationId>${correlationId}</CorrelationId>
<User>${user}</User>
<Text>Hello Citrus</Text>
</HelloRequest>
]]>
</data>
</message>
<header>
<element name="Operation" value="sayHello"/>
<element name="CorrelationId" value="${correlationId}"/>
</header>
</send>
<variables>
<variable name="messageId" value="citrus:randomString(10)"/>
<variable name="correlationId" value="citrus:currentDate()"/>
<variable name="user" value="Christoph"/>
</variables>
15Seite
Java DSL
•  @CitrusTest Java Annotation
www.consol.de
import org.testng.annotations.Test;
import com.consol.citrus.dsl.TestNGCitrusTestBuilder;
public class MyFirstTest extends TestNGCitrusTestBuilder {
@CitrusTest(name="JavaDslTest")
public void test() {
description("This is a Test");
variable("text", "Hello World!");
echo("Hello Citrus!");
echo("${text}");
}
Seite
Zusammenfassung
•  Schnittstellen & Integration Tests
–  Automatisiert, Versioniert, Wiederholbar, Zuverlässig
•  Ein Framework testet alle Schnittstellen
–  Client + Server
–  SOAP Http, JMS, FTP, REST, SSH, TCP/IP, XML, JSON, CSV, ...
–  Kompletter UseCase (1-n Schnittstellen) in einem Testfall
•  Standards verwenden
–  Continuous Integration: Jenkins, Hudson, TeamCity, ...
–  Unit Test Frameworks: JUnit / TestNG
–  Build Lifecylce: Maven, ANT, Gradle
www.consol.de16
Seite
Zusammenfassung
•  Fertige Komponenten
•  Nachrichten Senden und Empfangen
•  Validieren und Verifizieren
•  Keine Simulatoren, keine Mocks notwendig
•  Keine verteilte Logik
•  Keine verteilte Dokumentation
•  Keine aufwändige Fehlersuche
•  Hohe Erweiterbarkeit
–  Eigene Testaktionen erstellen
–  Eigene Adapter (proprietäre Schnittstellen)
–  Eigene Validator Implementierungen (z.B. Excel, EDIFACT)
www.consol.de17
18Seite
Informationen
•  Homepage
• http://citrusframework.org
•  Tutorials
• http://citrusframework.org/tutorials.html
•  User Guide
• http://citrusframework.org/reference/html/index.html
•  Mailing List
• user@citrusframework.org
•  Twitter
• @citrus_test
•  Blog
• http://labs.consol.de/tags/citrus/
www.consol.de
Seite 19 www.consol.de
Fragen ?
Seite 20 www.consol.de
ConSol* Software GmbH
Franziskanerstraße 38
D-81669 München
Tel: +49-89-45841-100
Fax: +49-89-45841-111
info@consol.de
www.consol.de

Weitere ähnliche Inhalte

Ähnlich wie Citrus Agile Testing Meetup (german)

Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?GFU Cyrus AG
 
Wieviel client braucht das web
Wieviel client braucht das webWieviel client braucht das web
Wieviel client braucht das webgedoplan
 
Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010Patrick Lauke
 
IBM Chat/Sametime Migration (CCTY 2016 Munich)
IBM Chat/Sametime Migration (CCTY 2016 Munich)IBM Chat/Sametime Migration (CCTY 2016 Munich)
IBM Chat/Sametime Migration (CCTY 2016 Munich)Novakenstein
 
Back to the Frontend – aber nun mit Microservices
Back to the Frontend – aber nun mit MicroservicesBack to the Frontend – aber nun mit Microservices
Back to the Frontend – aber nun mit MicroservicesAndré Fleischer
 
Ionic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenIonic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenHendrik Lösch
 
Creasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform AppsCreasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform AppsCreasoft AG
 
Lasttest auf Zuruf CloudTest on Demand webinar presentation
Lasttest auf Zuruf CloudTest on Demand webinar presentationLasttest auf Zuruf CloudTest on Demand webinar presentation
Lasttest auf Zuruf CloudTest on Demand webinar presentationSOASTA
 
Wieviel Client braucht das Web?
Wieviel Client braucht das Web?Wieviel Client braucht das Web?
Wieviel Client braucht das Web?gedoplan
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenMayflower GmbH
 
Oracle WebLogic for DevOps
Oracle WebLogic for DevOpsOracle WebLogic for DevOps
Oracle WebLogic for DevOpsAndreas Koop
 
OSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware Monitoring
OSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware MonitoringOSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware Monitoring
OSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware MonitoringNETWAYS
 
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-MonitoringsOSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-MonitoringsNETWAYS
 
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...Marc Müller
 
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im VergleichWie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleichgedoplan
 
3) TRANSCONNECT®-Webschnittstellen für die Cloud, IoT & Co. - TRANSCONNECT-Ta...
3) TRANSCONNECT®-Webschnittstellen für die Cloud, IoT & Co. - TRANSCONNECT-Ta...3) TRANSCONNECT®-Webschnittstellen für die Cloud, IoT & Co. - TRANSCONNECT-Ta...
3) TRANSCONNECT®-Webschnittstellen für die Cloud, IoT & Co. - TRANSCONNECT-Ta...SQL Projekt AG
 

Ähnlich wie Citrus Agile Testing Meetup (german) (20)

Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?
 
check_sap_health
check_sap_healthcheck_sap_health
check_sap_health
 
Wieviel client braucht das web
Wieviel client braucht das webWieviel client braucht das web
Wieviel client braucht das web
 
Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010Die Zukunft der Webstandards - Webinale 31.05.2010
Die Zukunft der Webstandards - Webinale 31.05.2010
 
IBM Chat/Sametime Migration (CCTY 2016 Munich)
IBM Chat/Sametime Migration (CCTY 2016 Munich)IBM Chat/Sametime Migration (CCTY 2016 Munich)
IBM Chat/Sametime Migration (CCTY 2016 Munich)
 
Back to the Frontend – aber nun mit Microservices
Back to the Frontend – aber nun mit MicroservicesBack to the Frontend – aber nun mit Microservices
Back to the Frontend – aber nun mit Microservices
 
Ionic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenIonic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf Steroiden
 
Creasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform AppsCreasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform Apps
 
Cloud – Intune
Cloud – IntuneCloud – Intune
Cloud – Intune
 
Lasttest auf Zuruf CloudTest on Demand webinar presentation
Lasttest auf Zuruf CloudTest on Demand webinar presentationLasttest auf Zuruf CloudTest on Demand webinar presentation
Lasttest auf Zuruf CloudTest on Demand webinar presentation
 
Wieviel Client braucht das Web?
Wieviel Client braucht das Web?Wieviel Client braucht das Web?
Wieviel Client braucht das Web?
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js Grundlagen
 
Oracle WebLogic for DevOps
Oracle WebLogic for DevOpsOracle WebLogic for DevOps
Oracle WebLogic for DevOps
 
Oracle WebLogic for DevOps
Oracle WebLogic for DevOpsOracle WebLogic for DevOps
Oracle WebLogic for DevOps
 
OSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware Monitoring
OSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware MonitoringOSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware Monitoring
OSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware Monitoring
 
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-MonitoringsOSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
 
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
 
Web 2.0 revisited
Web 2.0 revisitedWeb 2.0 revisited
Web 2.0 revisited
 
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im VergleichWie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
Wie viel Client braucht das Web?JSF, Vaadin und AngularJS im Vergleich
 
3) TRANSCONNECT®-Webschnittstellen für die Cloud, IoT & Co. - TRANSCONNECT-Ta...
3) TRANSCONNECT®-Webschnittstellen für die Cloud, IoT & Co. - TRANSCONNECT-Ta...3) TRANSCONNECT®-Webschnittstellen für die Cloud, IoT & Co. - TRANSCONNECT-Ta...
3) TRANSCONNECT®-Webschnittstellen für die Cloud, IoT & Co. - TRANSCONNECT-Ta...
 

Citrus Agile Testing Meetup (german)

  • 2. Seite Mission: Integrationstest www.consol.de2 App BApp A Schnittstelle / Vertrag SOAP / WSDL
  • 3. Seite Mission: Integrationstest www.consol.de3 App BApp A Schnittstelle / Vertrag SOAP / WSDL Simulator ? Mock ?
  • 5. Seite Mission: Integrationstest www.consol.de5 System Under Test Webclient Kunde Agent / Techniker Mobile, PDA Verträge Stammdaten Dienstleister Shipping
  • 6. Seite Dienstleister Stammdaten Agent / Techniker Mission: Integrationstest www.consol.de6 System Under Test Kunde
  • 7. Seite Build Lifecycle www.consol.de7 Build-Lifecycle Checkout & Compile Code Änderung Citrus Integration Tests Unit Tests Package & Deploy Build-Tool (Maven) Unit Test Framework Citrus Test Framework JUnit TestNG Surefire Plugin Test Execution
  • 8. Seite Testumgebung www.consol.de8 Call Interfaces Verify results Code Versionierung (Git) Application Server (System Under Test) Citrus Projekt Build-Tool (Maven) Continuous Build (Jenkins) Test Reporting Checkout Sources Compile Package Deploy Execute Tests Create Reports DBMS Save Update Delete Trigger Build
  • 9. 9Seite Citrus Testfall •  XML Testfallbeschreibung www.consol.de <testcase name="FirstSampleITest"> <meta-info> <author>Christoph Deppisch</author> <creationdate>2014-11-06</creationdate> <status>DRAFT</status> <last-updated-by>Christoph Deppisch</last-updated-by> <last-updated-on>2013-11-14T00:00:00</last-updated-on> </meta-info> <description>This is a sample test case</description> <actions> <echo> <message>TODO: Code the test!</message> </echo> <!-- Test actions go in here --> [...] </actions> </testcase>
  • 10. 10Seite Testaktionen •  Testfall besteht aus 1-n Testaktionen •  Erweiterbarkeit um eigene Testaktionen! www.consol.de Name Beschreibung Name Beschreibung send Versenden einer Nachricht sql SQL Abfragen ausführen receive Empfang einer Nachricht sleep Zeitspanne warten echo Text ausgeben create-varaibles Testvariable(n) erstellen java Java Code ausführen iterate Schleife groovy Groovy Code ausführen repeat-until-true Schleife mit Bedingung input Benutzereingabe repeat-onerror-until-true Fehlerschleife assert Ausnahme erwarten parallel Parallele Ausführung catch Ausnahme abfangen sequential Sequentielle Ausführung ant ANT Skript ausführen conditional Bedingte Ausführung
  • 11. 11Seite Nachrichten senden •  Payload und Header werden definiert •  Vordefinierten Endpoint wird referenziert www.consol.de <send endpoint="helloRequestJmsEndpoint"> <message> <data> <![CDATA[ <HelloRequest xmlns="http://consol.de/schemas/HelloService.xsd"> <MessageId>123456789</MessageId> <CorrelationId>1020304050</CorrelationId> <User>Christoph</User> <Text>Hello Citrus</Text> </HelloRequest> ]]> </data> </message> <header> <element name="Operation" value="sayHello"/> <element name="CorrelationId" value=“1020304050"/> </header> </send>
  • 12. 12Seite Nachrichten empfangen •  Erwartete Payload und Header werden definiert •  Vordefinierter Endpoint wird referenziert www.consol.de <receive endpoint="helloResponseJmsEndpoint"> <message> <data> <![CDATA[ <HelloResponse xmlns="http://consol.de/schemas/HelloService.xsd"> <MessageId>9988776655</MessageId> <CorrelationId>1020304050</CorrelationId> <User>Citrus</User> <Text>Hello User</Text> </HelloResponse> ]]> </data> </message> <header> <element name="Operation" value="sayHello"/> <element name="CorrelationId" value=“1020304050"/> </header> </receive>
  • 13. 13Seite Endpoints •  Fertige Komponenten - nur Konfiguration notwendig! –  citrus-jms, citrus-http, citrus-ws, citrus-ssh, citrus-ftp, citrus-mail, citrus-camel, citrus-vertx, ... www.consol.de <!– HelloService JMS endpoints --> <citrus-jms:endpoint id="helloRequestJmsEndpoint" destination-name="JMS.HelloService.Request.Queue"/> <citrus-jms:endpoint id="helloResponseJmsEndpoint" destination-name="JMS.HelloService.Response.Queue"/> <!-- SOAP web service client --> <citrus-ws:client id="helloSoapClient" request-url="http://localhost:8080/test"/> <!– SOAP web server --> <citrus-http:server id="helloSoapServer" port="18080" auto-start="true" resource-base="src/citrus/resources"/>
  • 14. 14Seite Test Variablen www.consol.de <send endpoint="helloRequestJmsEndpoint"> <message> <data> <![CDATA[ <HelloRequest xmlns="http://consol.de/schemas/HelloService.xsd"> <MessageId>${messageId}</MessageId> <CorrelationId>${correlationId}</CorrelationId> <User>${user}</User> <Text>Hello Citrus</Text> </HelloRequest> ]]> </data> </message> <header> <element name="Operation" value="sayHello"/> <element name="CorrelationId" value="${correlationId}"/> </header> </send> <variables> <variable name="messageId" value="citrus:randomString(10)"/> <variable name="correlationId" value="citrus:currentDate()"/> <variable name="user" value="Christoph"/> </variables>
  • 15. 15Seite Java DSL •  @CitrusTest Java Annotation www.consol.de import org.testng.annotations.Test; import com.consol.citrus.dsl.TestNGCitrusTestBuilder; public class MyFirstTest extends TestNGCitrusTestBuilder { @CitrusTest(name="JavaDslTest") public void test() { description("This is a Test"); variable("text", "Hello World!"); echo("Hello Citrus!"); echo("${text}"); }
  • 16. Seite Zusammenfassung •  Schnittstellen & Integration Tests –  Automatisiert, Versioniert, Wiederholbar, Zuverlässig •  Ein Framework testet alle Schnittstellen –  Client + Server –  SOAP Http, JMS, FTP, REST, SSH, TCP/IP, XML, JSON, CSV, ... –  Kompletter UseCase (1-n Schnittstellen) in einem Testfall •  Standards verwenden –  Continuous Integration: Jenkins, Hudson, TeamCity, ... –  Unit Test Frameworks: JUnit / TestNG –  Build Lifecylce: Maven, ANT, Gradle www.consol.de16
  • 17. Seite Zusammenfassung •  Fertige Komponenten •  Nachrichten Senden und Empfangen •  Validieren und Verifizieren •  Keine Simulatoren, keine Mocks notwendig •  Keine verteilte Logik •  Keine verteilte Dokumentation •  Keine aufwändige Fehlersuche •  Hohe Erweiterbarkeit –  Eigene Testaktionen erstellen –  Eigene Adapter (proprietäre Schnittstellen) –  Eigene Validator Implementierungen (z.B. Excel, EDIFACT) www.consol.de17
  • 18. 18Seite Informationen •  Homepage • http://citrusframework.org •  Tutorials • http://citrusframework.org/tutorials.html •  User Guide • http://citrusframework.org/reference/html/index.html •  Mailing List • user@citrusframework.org •  Twitter • @citrus_test •  Blog • http://labs.consol.de/tags/citrus/ www.consol.de
  • 20. Seite 20 www.consol.de ConSol* Software GmbH Franziskanerstraße 38 D-81669 München Tel: +49-89-45841-100 Fax: +49-89-45841-111 info@consol.de www.consol.de