-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
426 lines (383 loc) · 18.1 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>Citrus Framework</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="Citrus 4.5.2">
<meta name="description" content="Citrus Framework Website"/>
<meta name="author" content="ConSol Software GmbH"/>
<link type="application/atom+xml" rel="alternate" href="http://0.0.0.0:4000/feed.xml" title="Citrus Integration Tests" />
<link rel="alternate" type="application/atom+xml" title="Recent commits to Citrus master branch" href="https://github.com/citrusframework/citrus/commits/master.atom">
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic,900">
<link rel="stylesheet" href="/css/screen.css">
<link rel="icon" type="image/x-icon" href="/favicon.ico">
<!--[if lt IE 9]>
<script src="/js/html5shiv.min.js"></script>
<script src="/js/respond.min.js"></script>
<![endif]-->
</head>
<body class="wrap">
<header role="banner">
<nav class="mobile-nav show-on-mobiles">
<ul>
<li class="hide-on-mobiles">
<img src="/img/brand-logo.png" alt="Citrus"><span class="brand">Citrus</span>
</li>
<li class="current">
<a href="/"><i class="fa fa-home"></i></a>
</li>
<li class="">
<a href="/projects/">Projects</a>
</li>
<li class="">
<a href="/endpoints/">Endpoints</a>
</li>
<li class="">
<a href="/runtimes/">Runtimes</a>
</li>
<li class="">
<a href="/docs/documentation/">Doc<span class="hide-on-mobiles">umentation</span><span class="show-on-mobiles">s</span></a>
</li>
<li class="">
<a href="/samples/">Samples</a>
</li>
<li class="">
<a href="/news/">News<span class="hide-on-mobiles"> & Blog</span></a>
</li>
<li class="">
<a href="/help/"><span class="show-on-mobiles"><i class="fa fa-help"></i></span><span class="hide-on-mobiles">Help</span></a>
</li>
<li class="hide-on-mobiles">
<a href="https://github.com/citrusframework/citrus" target="_blank"><i class="fa fa-github"></i> GitHub</a>
</li>
</ul>
</nav>
<div class="grid">
<nav class="main-nav whole hide-on-mobiles">
<ul>
<li class="hide-on-mobiles">
<img src="/img/brand-logo.png" alt="Citrus"><span class="brand">Citrus</span>
</li>
<li class="current">
<a href="/"><i class="fa fa-home"></i></a>
</li>
<li class="">
<a href="/projects/">Projects</a>
</li>
<li class="">
<a href="/endpoints/">Endpoints</a>
</li>
<li class="">
<a href="/runtimes/">Runtimes</a>
</li>
<li class="">
<a href="/docs/documentation/">Doc<span class="hide-on-mobiles">umentation</span><span class="show-on-mobiles">s</span></a>
</li>
<li class="">
<a href="/samples/">Samples</a>
</li>
<li class="">
<a href="/news/">News<span class="hide-on-mobiles"> & Blog</span></a>
</li>
<li class="">
<a href="/help/"><span class="show-on-mobiles"><i class="fa fa-help"></i></span><span class="hide-on-mobiles">Help</span></a>
</li>
<li class="hide-on-mobiles">
<a href="https://github.com/citrusframework/citrus" target="_blank"><i class="fa fa-github"></i> GitHub</a>
</li>
</ul>
</nav>
</div>
</header>
<section class="intro">
<div class="grid jumbo">
<div class="unit whole align-center">
<p class="first">Citrus <img src="/img/citrus.png" alt="Citrus" width="80/"></p>
<h1>Fresh Integration Testing</h1>
<br>
<p>Test framework with focus on messaging applications and Microservices.<br>
Automated integration tests with a wide range of messaging protocols and data formats!</p>
<a href="/docs/download" class="btn btn-release"><i class="fa fa-download"></i> Download v4.5.2</a>
</div>
</div>
</section>
<section class="intro">
<div class="grid">
<div class="unit whole align-center">
<h1>Features</h1>
<h2><small>Many benefits to discover. What is in the box?</small></h2>
</div>
<div class="unit one-third">
<h2>
<i class="fa fa-endpoints"></i> Endpoints</h2>
<p>Many ready-to-use client and server components and endpoints that you can use in a test to simulate service interfaces and 3rd party applications.<br>
<a class="prominent" href="/endpoints/">→ Endpoints</a></p>
</div>
<div class="unit one-third">
<h2>
<i class="fa fa-connect"></i> Connect</h2>
<p>Choose and combine many different message protocols HTTP REST, Kafka, JMS, TCP/IP, SOAP, FTP and many more.<br>
<a class="prominent" href="/endpoints/">→ Examples</a></p>
</div>
<div class="unit one-third">
<h2>
<i class="fa fa-verify"></i> Verify</h2>
<p>Powerful message validators that verify message header and body content for different data formats such as XML, Json, YAML, plaintext.<br>
<a class="prominent" href="/validators/">→ Validators</a></p>
</div>
<div class="unit one-third">
<h2>
<i class="fa fa-run"></i> Runtimes</h2>
<p>Run Citrus with JUnit Jupiter, Quarkus, SpringBoot or Cucumber in a Maven or Gradle project.<br>
<a class="prominent" href="/runtimes/">→ Runtimes</a></p>
</div>
<div class="unit one-third">
<h2>
<i class="fa fa-code"></i> Polyglot</h2>
<p>You can choose from a set of domain specific languages to write a Citrus test in Java, XML, YAML or as a Cucumber BDD feature.</p>
</div>
<div class="unit one-third">
<h2>
<img src="/img/icons/jbang.png"> Try with JBang!</h2>
<p>Get started with Citrus JBang and run your 1st integration test in minutes without any project setup.<br>
<a class="prominent" href="/samples/jbang/">→ JBang example</a></p>
</div>
<div class="clear"></div>
</div>
<hr>
</section>
<section class="intro">
<div class="grid">
<div class="unit whole align-center">
<h1>Messaging integration challenge</h1>
<h2><small>How Citrus helps with automated integration tests</small></h2>
<p>In a typical test scenario the system under test, for instance a Quarkus Microservices application, runs on a test infrastructure.
Citrus interacts with the exposed services over various messaging transports in an automated test.
Citrus is able to act both as producer and consumer during the test in order to exchange real request/response messages with the application.</p>
<img src="/img/test-scenario.png" alt="Citrus solution">
<p>With each test step you can validate the exchanged messages with expected control data including message headers, attachments and body content (e.g. XML, Json, YAML, ...).
The test provides a Java fluent API to specify the test logic and is fully automated. The repeatable test is nothing but a normal JUnit Jupiter test that can easily run
as part of a Maven build or in a CI/CD pipeline.</p>
</div>
</div>
<hr>
</section>
<section class="intro">
<div class="grid">
<div class="unit whole align-center">
<h1>Runtimes</h1>
<h2><small>Combine Citrus with many frameworks and libraries</small></h2>
</div>
<div class="unit one-third">
<h2>
<img src="/img/icons/quarkus.png"> Quarkus</h2>
<p>You can easily use Citrus as part of your QuarkusTest annotated test.<br>
<a class="prominent" href="/samples/quarkus/">→ Quarkus example</a></p>
</div>
<div class="unit one-third">
<h2>
<img src="/img/icons/spring.png"> Spring Boot</h2>
<p>Use Citrus with Spring bean autowiring and combine Citrus with Spring Boot tests.</p>
</div>
<div class="unit one-third">
<h2>
<img src="/img/icons/cucumber.png"> Cucumber</h2>
<p>Citrus provides ready-to-use Cucumber steps that you can directly use in your Gherkin <i>Given-When-Then</i> feature files.<br>
<a class="prominent" href="/samples/cucumber/">→ Cucumber BDD example</a></p>
</div>
<div class="unit one-third">
<h2>
<img src="/img/icons/camel.png"> Apache Camel</h2>
<p>Manage Apache Camel routes and use one of the 300+ Camel components to exchange messages and transform data.<br>
<a class="prominent" href="/samples/camel-context/">→ Apache Camel example</a></p>
</div>
<div class="unit one-third">
<h2>
<img src="/img/icons/testcontainers.png"> Testcontainers</h2>
<p>Prepare test infrastructure as part of the test using Testcontainers modules.</p>
</div>
<div class="unit one-third">
<h2>
<img src="/img/icons/selenium.png"> Selenium</h2>
<p>Easily use Selenium in Citrus to simulate user interactions in a browser.<br>
<a class="prominent" href="/samples/selenium/">→ Selenium example</a></p>
</div>
<div class="clear"></div>
</div>
<hr>
</section>
<section class="intro">
<div class="grid">
<div class="unit whole align-center">
<h1>Testing Kamelets - Verify event sources and sinks with YAKS</h1>
<h2><small>Presentation from ApacheCon 2021</small></h2>
<iframe width="560" height="315" src="https://www.youtube.com/embed/mIfmMFOgdbI" frameborder="0" allowfullscreen></iframe>
<p>Kamelets represent Camel K route snippets that act as standardized event sources and sinks in an event driven architecture. Kamelets provide a simple interface that hides the individual
implementation details and allows the user to connect to external systems with simply providing some required properties. YAKS is a test automation tool that provides special support for
Camel K, Kamelets and other technologies such as Knative, Apache Kafka, OpenAPI 3, Http REST, JMS, and many more. The presentation shows how to write automated integration tests for Kamelets
with YAKS in order to run those tests as part of Kubernetes. The talk begins with a short introduction into the framework concepts and illustrates the general test automation for event sources
and sinks in the form of examples and live demos. In the end the audience should be able to accomplish automated integration tests for custom Kamelets that bind to messaging technologies such
as Knative, Http, and Apache Kafka.</p>
</div>
</div>
<hr>
</section>
<section class="intro">
<div class="grid">
<div class="unit whole align-center">
<h1>Testing Camel K integrations with Cloud Native BDD</h1>
<h2><small>Presentation from ApacheCon 2020</small></h2>
<iframe width="560" height="315" src="https://www.youtube.com/embed/aYLLtj6TdjM" frameborder="0" allowfullscreen></iframe>
<p>Apache Camel K is a lightweight integration platform built from Apache Camel. Integrations built with Camel K run natively on Kubernetes and are specifically designed for serverless architectures.
With the declarative nature in Camel K users can instantly run integration code written in Camel DSL on their preferred cloud. The presentation outlines typical integration scenarios with Camel K
and shows how to write automated tests for these enterprise integrations. The session covers classical service provider/consumer scenarios with common messaging protocols (e.g. REST, JMS, Kafka) as
well as more complex integrations with data access and 3rd party Saas services included. The tests itself will also be Cloud Native citizens and make use of Behavior Driven Development concepts.</p>
</div>
</div>
<hr>
</section>
<section class="intro">
<div class="grid">
<div class="unit whole align-center">
<h1>BDD Integration with Citrus & Cucumber</h1>
<h2><small>Citrus "Tools in action" session <a href="https://github.com/DevoxxBE" class="user-mention">@DevoxxBE</a> 2017</small></h2>
<iframe width="560" height="315" src="https://www.youtube.com/embed/X76Wz0MNdrc" frameborder="0" allowfullscreen></iframe>
<p>The concept of behavior driven development (BDD) is quite simple. Business analysts and domain experts describe how the application should behave using Gherkin (given-when-then) feature stories.
Developers glue those specifications to automated tests. Can we use this approach when testing the integration of services, too? The talk gives answers with a combination of the frameworks Cucumber and Citrus.
After a short introduction to both frameworks we discuss the concepts and see some code examples that demonstrate how the behavior driven approach fits to testing the messaging integration with Http REST, JMS and mail communication.
At the end we will have an automated integration test with BDD and almost no glue code to write manually.</p>
</div>
</div>
<hr>
</section>
<section class="intro">
<div class="grid">
<div class="unit whole align-center">
<h1>Citrus & Cucumber BDD</h1>
<h2><small>Citrus "Tools in action" session <a href="https://github.com/DevoxxUS" class="user-mention">@DevoxxUS</a> 2017</small></h2>
<iframe width="560" height="315" src="https://www.youtube.com/embed/jNgROZjI98Y" frameborder="0" allowfullscreen></iframe>
<p>The concept of behavior driven development (BDD) is quite simple. Business analysts and domain experts describe how the application
should behave using Gherkin (given-when-then) feature stories. Developers glue those specifications to automated tests. The talk
combines the frameworks Cucumber and Citrus and gives some code examples that demonstrate how the behavior driven approach fits to
testing the messaging integration with Http REST, JMS and mail.</p>
</div>
</div>
<hr>
</section>
<section class="intro">
<div class="grid">
<div class="unit whole align-center">
<h1>Testing Microservices</h1>
<h2><small>Citrus "Tools in action" session <a href="https://github.com/DevoxxBE" class="user-mention">@DevoxxBE</a> 2015</small></h2>
<iframe width="560" height="315" src="https://www.youtube.com/embed/FPgXJveaLTo" frameborder="0" allowfullscreen></iframe>
<p>Citrus integrates with frameworks like Apache Camel, Arquillian, Kubernetes and Docker in order to provide
automated integration testing of Microservice applications. The tools in action session gives a brief introduction
to the Citrus framework and shows code samples for a complete integration test scenario in a Microservices environment.</p>
</div>
</div>
</section>
<section class="features">
<div class="grid">
<div class="unit one-third">
<h2>Community</h2>
<p>Citrus is Open Source!<br>Please get involved and help!</p>
<p>Add comments, open new issues or pull requests with your changes on the <br> <i class="fa fa-github"></i> <a href="http://github.com/citrusframework/citrus">Citrus code repository</a></p>
</div>
<div class="unit one-third">
<h2>Documentation</h2>
<ul>
<li><a href="/docs/documentation/">Reference guide</a></li>
<li><a href="/news">Blog</a></li>
<li><a href="https://github.com/citrusframework/citrus-samples" target="_blank">Examples</a></li>
<li><a href="https://github.com/citrusframework/citrus" target="_blank">Demos</a></li>
<li><a href="/docs/media/">Media</a></li>
</ul>
<p><strong>Latest stable release:</strong><br>
Version 4.5.2: <a href="/reference/html/index.html" target="_blank">HTML</a> | <a href="/citrus/reference/4.5.2/pdf/citrus-reference-4.5.2.pdf" target="_blank">PDF</a>
</p>
</div>
<div class="unit one-third">
<h2>Blog</h2>
<ul>
<li class="">
<a href="/news/2023/10/25/release-4.0.0/">Citrus 4.0.0</a>
</li>
<li class="">
<a href="/news/2023/01/30/camel-k-yaks/">Testing Camel K with YAKS</a>
</li>
<li class="">
<a href="/news/2021/08/30/introducing-yaks/">Cloud-native BDD testing with YAKS</a>
</li>
<li class="">
<a href="/news/2021/08/25/new-camel-support/">Apache Camel support in Citrus 3</a>
</li>
<li class="">
<a href="/news/2021/08/16/citrus-3.0/">YAY, Citrus 3.0 is here!</a>
</li>
</ul>
</div>
<div class="clear"></div>
</div>
</section>
<footer role="contentinfo">
<div class="grid">
<div class="unit one-third center-on-mobiles">
<p>Citrus is open source and licensed under <br><a href="https://www.apache.org/licenses/LICENSE-2.0.html">Apache License 2.0</a>.</p>
<p>This website is licensed under <br><a href="https://github.com/citrusframework/citrus/blob/master/LICENSE">MIT License</a>.</p>
<br>
<p>© 2025 ConSol Software GmbH</p>
</div>
<div class="unit one-third align-center center-on-mobiles">
<p>
<img src="/img/bmi_logo_eng.png" alt="Federal Ministry for Economic Affairs and Energy">
</p>
</div>
<div class="unit one-third align-right center-on-mobiles">
<p>
Hosted by<br>
<a href="http://www.consol.de">
<img src="/img/sponsor-logo.png" alt="ConSol">
</a>
</p>
<p> </p>
<br>
<br>
<p>
<a href="http://www.consol.com/legal-notice/">Legal notice</a> | <a href="https://www.consol.com/data-privacy/">Data privacy</a>
</p>
</div>
</div>
</footer>
<script>
var anchorForId = function (id) {
var anchor = document.createElement("a");
anchor.className = "header-link";
anchor.href = "#" + id;
anchor.innerHTML = "<span class=\"sr-only\">Permalink</span><i class=\"fa fa-link\"></i>";
anchor.title = "Permalink";
return anchor;
};
var linkifyAnchors = function (level, containingElement) {
var headers = containingElement.getElementsByTagName("h" + level);
for (var h = 0; h < headers.length; h++) {
var header = headers[h];
if (typeof header.id !== "undefined" && header.id !== "") {
header.appendChild(anchorForId(header.id));
}
}
};
document.onreadystatechange = function () {
if (this.readyState === "complete") {
var contentBlock = document.getElementsByClassName("docs")[0] || document.getElementsByClassName("samples")[0] || document.getElementsByClassName("news")[0];
if (!contentBlock) {
return;
}
for (var level = 1; level <= 6; level++) {
linkifyAnchors(level, contentBlock);
}
}
};
</script>
</body>
</html>