SlideShare a Scribd company logo
1 of 78
Integration Testing 
from the Trenches 
Nicolas Fränkel October 2014
Me, myself and I 
Developer & Architect as consultant 
Wide range of businesses & customers 
Teacher & Trainer 
Speaker 
Blogger 
http://blog.frankel.ch/ 
(http://morevaadin.com/) 
https://leanpub.com/integrationtest 2
Also an author 
https://leanpub.com/integrationtest 3
Plan 
Integration Testing 
What is that? 
Challenges 
Solution hints 
Testing with resource dependencies 
Database 
Web Services 
Testing In-container 
Spring & Spring MVC 
JavaEE 
https://leanpub.com/integrationtest 4
Basics
There are many different kinds of testing 
Unit Testing 
Mutation Testing 
Integration Testing 
GUI Testing 
Performance Testing 
Load Testing 
Stress Testing 
Endurance Testing 
Security Testing 
etc. 
https://leanpub.com/integrationtest 6
Unit Testing vs. Integration Testing 
Unit Testing 
Testing a unit (i.e. a class) in 
isolation 
Integration Testing 
Testing the collaboration of 
multiple units 
https://leanpub.com/integrationtest 7 
"Savate fouetté figure 1" by Daniel - Photo Daniel.
https://leanpub.com/integrationtest 8 
A concrete example 
Let’s take an example 
A prototype car 
"2011 Nissan Leaf WAS 2011 1040" by Mariordo Mario Roberto Duran Ortiz - Own work
Unit Testing 
Akin to testing each nut 
and bolt separately 
https://leanpub.com/integrationtest 9
Integration Testing 
Akin to going on a test 
drive 
https://leanpub.com/integrationtest 10 
"URE05e" by Marvin Raaijmakers - Own work.
Unit Testing + Integration Testing 
Approaches are not 
exclusive but 
complementary 
Would you take a prototype 
car on test drive without 
having tested only nuts and 
bolts? 
Would you manufacture a car 
from a prototype having only 
tested nuts and bolts but 
without having tested it on 
numerous test drives? 
https://leanpub.com/integrationtest 11
System Under Test 
The SUT is what get 
tested 
Techniques from Unit 
Testing can be re-used 
Dependency Injection 
Test doubles 
https://leanpub.com/integrationtest 12
Testing is about ROI 
The larger the SUT 
The more fragile the test 
The less maintainable the test 
The less the ROI 
Thus, tests have to be 
organized in a pyramidal 
way 
The bigger the SUT 
The less the number of tests 
Integration Testing 
Test standard cases 
Generally not error cases 
https://leanpub.com/integrationtest 13 
http://martinfowler.com/bliki/TestPyramid.html
Integration Testing Challenges 
Brittle 
Dependent on external 
resources 
 Database(s) 
 etc. 
Slow 
Dependent on external 
resources 
Hard to diagnose 
https://leanpub.com/integrationtest 14
How to cope 
Separate Integration 
Tests from Unit Tests 
Fake required 
infrastructure resources 
Test in-container 
https://leanpub.com/integrationtest 15
But IT are still slow?! 
Separating UT & IT 
doesn’t make IT run 
faster 
But you can uncover 
errors from UT faster 
Fail Fast 
It will speed testing 
https://leanpub.com/integrationtest 16 
"Gepardjagt2 (Acinonyx jubatus)" by Malene Thyssen - Own work.
Integration Testing and build 
Available tools 
Ant 
Maven 
Gradle 
etc. 
https://leanpub.com/integrationtest 17 
New Development Recently Finished on Bristol's City Centre by Brizzleboy
Maven lifecycle 
… 
compile 
… 
test 
… 
pre-integration-test 
integration-test 
post-integration-test 
verify 
… 
https://leanpub.com/integrationtest 18
Reminder on Surefire 
Bound to the test phase 
Runs by default 
*Test 
Test* 
*TestCase 
https://leanpub.com/integrationtest 19
Failsafe 
“Copy” of Surefire 
Different defaults 
*IT 
IT* 
*ITCase 
One goal per lifecycle 
phase 
pre-integration-test 
integration-test 
post-integration-test 
verify 
Must be bound explicitly 
https://leanpub.com/integrationtest 20
Binding Failsafe - sample 
<plugin> 
<artifactId>maven-failsafe-plugin</artifactId> 
<version>2.17</version> 
<executions> 
<execution> 
<id>integration-test</id> 
<goals> 
<goal>integration-test</goal> 
</goals> 
<phase>integration-test</phase> 
</execution> 
<execution> 
<id>verify</id> 
<goals> 
<goal>verify</goal> 
</goals> 
<phase>verify</phase> 
</execution> 
</executions> 
</plugin> 
https://leanpub.com/integrationtest 21
Continuous Integration 
Needs a build configured 
Suggestions 
Unit Tests run at each commit 
Integration Tests run “regularly” 
 Daily 
 Hourly 
 Depending on the context 
https://leanpub.com/integrationtest 22
Infrastructure dependencies
Infrastructure dependencies 
Database 
Filesystem 
Time 
Message Oriented 
Middleware 
Mail server 
FTP server 
etc. 
https://leanpub.com/integrationtest 24
Mocks and infrastructure dependencies 
To test your Service 
Mock your DAO/repository 
 Mockito 
To test your DAO/repository 
Mock your database??? 
https://leanpub.com/integrationtest 25
Simple database use-case 
Oracle database 
Use an in-memory datasource 
and hope for the best 
Use Oracle Express and hope 
for the best 
Use a dedicated remote 
schema for each developer 
 And your DBAs will hate you 
https://leanpub.com/integrationtest 26
Reducing database gap risk 
In-memory databases are easy to 
setup 
h2 is such a database 
(successor of HSQL) 
Compatibility modes for most 
widespread DB 
 jdbc:h2:mem:test;MODE=Oracle 
https://leanpub.com/integrationtest 27
Parameterizing properties 
Use properties for tests 
only 
db.url= 
db.driver= 
db.username= 
db.password= 
And use your favorite 
build tool 
Maven 
 Resource filtering 
Ant 
Gradle 
https://leanpub.com/integrationtest 28
Integration Testing with Web Services 
Web Services also are an 
infrastructure resource 
Hosted on-site 
Or outside 
Different Web Services 
types have different 
solutions 
RESTful 
SOAP 
https://leanpub.com/integrationtest 29
Faking RESTful WS 
Require an HTTP server 
Requirements 
Easy setup 
Standalone 
Embeddable in tests 
Spring MVC? 
Requires a servlet container 
 (Not with Spring Boot) 
Some code to write 
https://leanpub.com/integrationtest 30 
Author: Dwight Sipler from Stow, MA, USA
Spark to the rescue 
Micro web framework 
A la Sinatra 
http://www.sparkjava.com/ 
Very few lines of code 
Just wire to serve JSON files 
https://leanpub.com/integrationtest 31
Spark sample 
import static spark.Spark.*; 
import spark.*; 
public class SparkSample{ 
public static void main(String[] args) { 
setPort(5678); 
get("/hello", (request, response) -> { 
return "Hello World!"; 
}); 
get("/users/:name", (request, response) -> { 
return "User: " + request.params(":name"); 
}); 
get("/private", (request, response) -> { 
response.status(401); 
return "Go Away!!!"; 
}); 
} 
} 
https://leanpub.com/integrationtest 32
Faking SOAP web service 
Possible to use Spark for SOAP 
But unwieldy 
https://leanpub.com/integrationtest 33
SOAPUI 
SOAPUI is the framework to test SOAP WS 
Has a GUI 
Good documentation 
Understands 
 Authentication 
 Headers 
 Etc. 
Can be used to Fake SOAP WS 
https://leanpub.com/integrationtest 34
SOAPUI usage 
Get WSDL 
Either online 
Or from a file 
Create MockService 
Craft the adequate response 
Run the service 
Point the dependency to localhost 
https://leanpub.com/integrationtest 35
Challenges to the previous scenario 
Craft the adequate response? 
More likely get one from the real WS 
And tweak it 
Running in an automated way 
Save the project 
Get the SOAPUI jar 
Read the project and launch 
https://leanpub.com/integrationtest 37
SOAPUI automation 
WsdlProject project = new WsdlProject(); 
String wsdlFile = "file:src/test/resources/ip2geo.wsdl"; 
WsdlInterface wsdlInterface = 
importWsdl(project, wsdlFile, true)[0]; 
WsdlMockService fakeService = 
project.addNewMockService("fakeService"); 
WsdlOperation wsdlOp = 
wsdlInterface.getOperationByName("ResolveIP"); 
MockOperation fakeOp = 
fakeService.addNewMockOperation(wsdlOp); 
MockResponse fakeResponse = 
fakeOp.addNewMockResponse("fakeResponse"); 
fakeResponse.setResponseContent( 
"<soapenv:Envelope ...</soapenv:Envelope>"); 
runner = fakeService.start(); 
https://leanpub.com/integrationtest 38
Faking Web Service in real-life 
Use the same rules as for UT 
Keep validation simple 
Test one thing 
 One Assert 
 Or a set of related ones 
Keep setup simple 
Don’t put complex logic 
 Don’t put too much logic 
 Don’t put logic at all 
Duplicate setup in each test 
 Up to a point 
https://leanpub.com/integrationtest 39 
Author: I, rolf B
In-container Testing
Upping the ante 
Testing collaboration is nice 
Faking infrastructure dependencies is nice 
But didn’t we forget the most important 
dependency? 
https://leanpub.com/integrationtest 41
The container! 
“Proprietary” container 
Spring 
Application Server 
Tomcat 
JBoss 
<Place your favorite one here> 
https://leanpub.com/integrationtest 42
Spring 
So far, we can test: 
Beans which dependencies can be mocked (or not) 
 Service 
Beans that depend on fake resources 
 Datasource 
What about the configuration? 
In Unit Tests, we set dependencies 
 The real configuration is not used 
 Ergo, not tested! 
https://leanpub.com/integrationtest 43
Testing configuration 
Configuration cannot be monolithic 
Break down into fragments 
Each fragment contains a set of either 
 Real beans 
 Fake beans 
https://leanpub.com/integrationtest 44 
Rudston Monolith May 2013 by Angela Findlay
Data source configuration fragment management example 
Different configuration 
fragments 
Production JNDI fragment 
Test in-memory fragment 
https://leanpub.com/integrationtest 45
Data source configuration sample 
<beans ...> 
<jee:jndi-lookup id="ds" jndi-name="jdbc/MyDS" /> 
</beans> 
<beans ...> 
<bean id="ds" class="o.a.t.jdbc.pool.DataSource"> 
<property name="driverClassName” 
value="org.h2.Driver" /> 
<property name="url" value="jdbc:h2:~/test" /> 
<property name="username" value="sa" /> 
<property name="maxActive" value="1" /> 
</bean> 
</beans> 
https://leanpub.com/integrationtest 46
Fragment structure 
1. Main fragment 
Repository 
Service 
etc. 
2. Prod DB fragment 
3. Test DB fragment 
https://leanpub.com/integrationtest 47
Tips 
Prevent coupling 
No fragments reference in fragments 
Use top-level assembly instead 
 Tests 
 Application Context 
 Webapps 
Pool exhaustion check 
Set the maximum number of connections in the 
pool to 1 
Compile-time safety 
Use JavaConfig 
Not related to testing  
https://leanpub.com/integrationtest 48
And now, how to test? 
Get access to both 
The entry point 
And the “end” point 
Spring Test to the rescue 
Integration with common 
Testing frameworks 
 JUnit 
 TestNG 
https://leanpub.com/integrationtest 49 
St Louis Gateway Arch 1916" by Dirk Beyer - Own work.
Favor TestNG 
Extra grouping 
Per layer 
Per use-case 
Name your own 
Extra lifecycle hooks 
Better parameterization 
Data Provider 
Ordering of test methods 
https://leanpub.com/integrationtest 50
Spring TestNG integration 
AbstractTestNGSpringContextTests 
AbstractTransactionalTestNGSpringContextTests 
Configurable context fragments 
@ContextConfiguration 
Inject any bean in the test class 
If necessary, applicatonContext member from 
superclass 
https://leanpub.com/integrationtest 51
Sample TestNG test with Spring 
@ContextConfiguration( 
classes = { MainCfg.class, AnotherCfg.class }) 
public class OrderIT extends 
AbstractTestNGSpringContextTests { 
@Autowired 
private OrderService orderService; 
@Test 
public void should_do_this_and_that() { 
orderService.order(); 
Assert.assertThat(...) 
} 
https://leanpub.com/integrationtest 52 
}
Testing with the DB (or other transactional resources) 
Transactions 
Bound to business 
functionality 
Implemented on Service layer 
With DAO 
Use explicit transaction 
management 
@Transactional 
https://leanpub.com/integrationtest 53
Transaction management tip 
Tests fail… sometimes 
How to audit state? 
By default, Spring rollbacks 
transactions 
General configuration 
@TransactionConfiguration( 
defaultRollback = false 
) 
Can be overridden on a per-method 
basis 
 @Rollback(true) 
https://leanpub.com/integrationtest 54
Sample Transaction management 
@ContextConfiguration 
@TransactionConfiguration(defaultRollback = false) 
public class OverrideDefaultRollbackSpringTest extends 
AbstractTransactionalTestNGSpringContextTests { 
@Test 
@Rollback(true) 
public void transaction_will_be_rollbacked() { ... } 
@Test 
public void transaction_wont_be_rollbacked() { 
... 
} 
} 
https://leanpub.com/integrationtest 55
Spring MVC webapps Testing 
Require a context hierachy 
Parent as main context 
Child as webapp context 
@ContextHierarchy 
Require a webapp configuration 
@WebAppConfiguration 
https://leanpub.com/integrationtest 56
Spring MVC test sample 
@WebAppConfiguration 
@ContextHierarchy({ 
@ContextConfiguration(classes = MainConfig.class), 
@ContextConfiguration(classes = WebConfig.class) 
}) 
public class SpringWebApplicationTest 
extends AbstractTestNGSpringContextTests { 
... 
} 
https://leanpub.com/integrationtest 57
Entry points for testing Spring webapps 
At the HTML level 
At the HTTP level 
At the Controller level 
Like standard Java testing 
https://leanpub.com/integrationtest 58 
"Lahntunnel Weilburg" by rupp.de - Own work.
Tools for testing webapps 
HTML testing tools 
Interact with HTML/CSS 
 Fill this field 
 Click on that button 
HTTP testing tools 
 Send HTTP requests 
 Get HTTP responses 
https://leanpub.com/integrationtest 59
Drawback of previous approaches 
Very low-level 
Fragile! 
Remember that testing is 
about ROI 
 Breaking tests with every 
HTML/CSS change is the worst 
way to have positive ROI 
 (There are mitigation 
techniques  out of scope) 
https://leanpub.com/integrationtest 60 
Attribution: © Milan Nykodym, Czech Republic
Drawback of Testing with controllers as entry point 
Bypass many URL-related 
features 
Interceptors 
Spring Security 
etc. 
https://leanpub.com/integrationtest 61 
Controller SCSI.JPG by Rosco
Spring Test to the rescue 
Spring Test has a large 
chunk dedicated to MVC 
Since 3.2 
Can test with URL as 
entry-points 
Fluent API with static 
imports 
https://leanpub.com/integrationtest 62 
Coastguard Helicopter (8016050677)" by Paul Lucas from Leicestershire, UK - Coastguard Helicopter
Spring MVC Test overview 
https://leanpub.com/integrationtest 63
MockMvc class responsibilities 
Request builder 
Configures the Fake request 
Request matcher 
Misc. assertions 
Request handler 
Do something 
 OOB logger 
https://leanpub.com/integrationtest 64
Available configuration on Request Builder 
HTTP method 
GET 
POST 
etc. 
HTTP related stuff 
Headers 
Parameters 
Content 
JavaEE related stuff 
Request attributes 
Session 
etc. 
https://leanpub.com/integrationtest 65
Request Builder sample 
MockHttpServletRequestBuilder builder = 
get("/customer/{id}", 1234L) 
.accept("text/html") 
.param("lang", "en") 
.secure(true); 
GET /customer/1234?lang=en HTTP/1.1 
Accept: text/html 
https://leanpub.com/integrationtest 66
You can use constants in your @RequestMapping 
@Controller 
public class MyController { 
public static final String PATH = "/customer/{id}"; 
@RequestMapping(PATH) 
public String showCustomer() { ... } 
https://leanpub.com/integrationtest 67 
} 
MockHttpServletRequestBuilder builder = get(PATH, 1L);
Some matchers 
Checks result is a 
Forward 
 Either exact 
 Or regexp 
Redirect 
 Either exact 
 Or regexp 
JSON payload 
https://leanpub.com/integrationtest 68 
a safety wax match box and matches by Aathavan jaffna
Some other matchers 
Request class 
Handler class 
Controller 
Content class 
Cookie class 
Status class 
HTTP code 
Flash class 
(Attributes, not the techno) 
View class 
Model class 
https://leanpub.com/integrationtest 69 
"Ovejas en Patagonia - Argentina" by writtecarlosantonio
Spring Pet Clinic 
https://leanpub.com/integrationtest 70
Integration Testing on Spring Pet Clinic 
@WebAppConfiguration 
@ContextHierarchy({ 
@ContextConfiguration("classpath:spring/business-config.xml"), 
@ContextConfiguration("classpath:spring/mvc-core-config.xml") 
}) 
@ActiveProfiles("jdbc") 
public class PetControlIT extends AbstractTestNGSpringContextTests { 
@Test 
public void should_display_create_form() throws Exception { 
WebApplicationContext wac = 
(WebApplicationContext) applicationContext; 
MockMvc mvc = MockMvcBuilders.webAppContextSetup(wac).build(); 
MockHttpServletRequestBuilder newPet = 
get("/owners/{ownerId}/pets/new", 1); 
mvc.perform(newPet) 
.andExpect(view().name("pets/createOrUpdatePetForm")) 
.andExpect(model().attributeExists("pet")); 
} 
} 
https://leanpub.com/integrationtest 71
The JavaEE world 
JavaEE has unique 
challenges 
CDI has no explicit wiring 
 You can @Veto you own 
classes 
 But no compiled ones 
Different application servers 
 Same specifications 
 Different implementations 
https://leanpub.com/integrationtest 72
Deploy only what you want 
Standalone API to deploy 
only resources relevant 
to the test 
Just pick and choose 
Maven Integration 
Gradle too… 
https://leanpub.com/integrationtest 73
Shrinkwrap sample 
String srcMainWebapp = "src/main/webapp/"; 
ShrinkWrap.create(WebArchive.class, "myWar.war") 
.addClass(MyService.class) 
.addPackage(MyModel.class.getPackage()) 
.addAsWebInfResource("persistence.xml", 
"classes/META-INF/persistence.xml") 
.addAsWebInfResource( 
new File(srcMainWebapp, "WEB-INF/page/my.jsp"), 
"page/my.jsp") 
.addAsWebResource( 
new File(srcMainWebapp, "script/my.js"), 
"script/my.js") 
.setWebXML("web.xml"); 
https://leanpub.com/integrationtest 74
Maven integration sample 
File[] libs = Maven.resolver() 
.loadPomFromFile("pom.xml") 
.importDependencies(COMPILE, RUNTIME).resolve() 
.withTransitivity().asFile(); 
ShrinkWrap.create(WebArchive.class, "myWar.war") 
.addAsLibraries(libs); 
https://leanpub.com/integrationtest 75
Different application servers 
Abstraction layer to 
Download 
Deploy applications 
Test 
Container adapters 
TomEE 
JBoss 
Weld 
etc. 
Full Maven integration 
https://leanpub.com/integrationtest 76
Arquillian Test sample 
public class ArquillianSampleIT extends Arquillian { 
@Inject 
private MyService myService; 
@Deployment 
public static JavaArchive createDeployment() { 
return ...; 
} 
@Test 
public void should_handle_service() { 
Object value = myService.handle(); 
Assert.assertThat(...); 
} 
} 
https://leanpub.com/integrationtest 77
Arquillian configuration sample 
<arquillian xmlns="http://jboss.org/schema/arquillian" 
xmlns:xsi="..." 
xsi:schemaLocation=" 
http://jboss.org/schema/arquillian 
http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> 
<container qualifier="tomee" default="true"> 
<configuration> 
<property name="httpPort">-1</property> 
<property name="stopPort">-1</property> 
</configuration> 
</arquillian> 
https://leanpub.com/integrationtest 78
https://leanpub.com/integrationtest 
Twitter: @itfromtrenches

More Related Content

What's hot

Testing Java EE apps with Arquillian
Testing Java EE apps with ArquillianTesting Java EE apps with Arquillian
Testing Java EE apps with ArquillianIvan Ivanov
 
Testcontainers - Geekout EE 2017 presentation
Testcontainers - Geekout EE 2017 presentationTestcontainers - Geekout EE 2017 presentation
Testcontainers - Geekout EE 2017 presentationRichard North
 
Testing with laravel
Testing with laravelTesting with laravel
Testing with laravelDerek Binkley
 
Continuous Integration Testing in Django
Continuous Integration Testing in DjangoContinuous Integration Testing in Django
Continuous Integration Testing in DjangoKevin Harvey
 
Load Testing using Continuous Integration tools
Load Testing using Continuous Integration toolsLoad Testing using Continuous Integration tools
Load Testing using Continuous Integration toolsRick Pitts
 
Selenium-Browser-Based-Automated-Testing-for-Grails-Apps
Selenium-Browser-Based-Automated-Testing-for-Grails-AppsSelenium-Browser-Based-Automated-Testing-for-Grails-Apps
Selenium-Browser-Based-Automated-Testing-for-Grails-Appschrisb206 chrisb206
 
Spring boot 3g
Spring boot 3gSpring boot 3g
Spring boot 3gvasya10
 
Apache maven, a software project management tool
Apache maven, a software project management toolApache maven, a software project management tool
Apache maven, a software project management toolRenato Primavera
 
Никита Галкин "Testing in Frontend World"
Никита Галкин "Testing in Frontend World"Никита Галкин "Testing in Frontend World"
Никита Галкин "Testing in Frontend World"Fwdays
 
vJUG - The JavaFX Ecosystem
vJUG - The JavaFX EcosystemvJUG - The JavaFX Ecosystem
vJUG - The JavaFX EcosystemAndres Almiray
 
Jenkins Evolutions - JEEConf 2012
Jenkins Evolutions - JEEConf 2012Jenkins Evolutions - JEEConf 2012
Jenkins Evolutions - JEEConf 2012Anton Arhipov
 
Selenium Clinic Eurostar 2012 WebDriver Tutorial
Selenium Clinic Eurostar 2012 WebDriver TutorialSelenium Clinic Eurostar 2012 WebDriver Tutorial
Selenium Clinic Eurostar 2012 WebDriver TutorialAlan Richardson
 
Take Control of your Integration Testing with TestContainers
Take Control of your Integration Testing with TestContainersTake Control of your Integration Testing with TestContainers
Take Control of your Integration Testing with TestContainersNaresha K
 
Maven Presentation - SureFire vs FailSafe
Maven Presentation - SureFire vs FailSafeMaven Presentation - SureFire vs FailSafe
Maven Presentation - SureFire vs FailSafeHolasz Kati
 
Testing Java Web Apps With Selenium
Testing Java Web Apps With SeleniumTesting Java Web Apps With Selenium
Testing Java Web Apps With SeleniumMarakana Inc.
 
Real Java EE Testing with Arquillian and ShrinkWrap
Real Java EE Testing with Arquillian and ShrinkWrapReal Java EE Testing with Arquillian and ShrinkWrap
Real Java EE Testing with Arquillian and ShrinkWrapDan Allen
 

What's hot (20)

Testing Java EE apps with Arquillian
Testing Java EE apps with ArquillianTesting Java EE apps with Arquillian
Testing Java EE apps with Arquillian
 
Testcontainers - Geekout EE 2017 presentation
Testcontainers - Geekout EE 2017 presentationTestcontainers - Geekout EE 2017 presentation
Testcontainers - Geekout EE 2017 presentation
 
Testing with laravel
Testing with laravelTesting with laravel
Testing with laravel
 
Continuous Integration Testing in Django
Continuous Integration Testing in DjangoContinuous Integration Testing in Django
Continuous Integration Testing in Django
 
Load Testing using Continuous Integration tools
Load Testing using Continuous Integration toolsLoad Testing using Continuous Integration tools
Load Testing using Continuous Integration tools
 
Selenium-Browser-Based-Automated-Testing-for-Grails-Apps
Selenium-Browser-Based-Automated-Testing-for-Grails-AppsSelenium-Browser-Based-Automated-Testing-for-Grails-Apps
Selenium-Browser-Based-Automated-Testing-for-Grails-Apps
 
Spring boot 3g
Spring boot 3gSpring boot 3g
Spring boot 3g
 
Apache maven, a software project management tool
Apache maven, a software project management toolApache maven, a software project management tool
Apache maven, a software project management tool
 
Никита Галкин "Testing in Frontend World"
Никита Галкин "Testing in Frontend World"Никита Галкин "Testing in Frontend World"
Никита Галкин "Testing in Frontend World"
 
vJUG - The JavaFX Ecosystem
vJUG - The JavaFX EcosystemvJUG - The JavaFX Ecosystem
vJUG - The JavaFX Ecosystem
 
Jbehave selenium
Jbehave seleniumJbehave selenium
Jbehave selenium
 
Jenkins Evolutions - JEEConf 2012
Jenkins Evolutions - JEEConf 2012Jenkins Evolutions - JEEConf 2012
Jenkins Evolutions - JEEConf 2012
 
Arquillian
ArquillianArquillian
Arquillian
 
Selenium Clinic Eurostar 2012 WebDriver Tutorial
Selenium Clinic Eurostar 2012 WebDriver TutorialSelenium Clinic Eurostar 2012 WebDriver Tutorial
Selenium Clinic Eurostar 2012 WebDriver Tutorial
 
Take Control of your Integration Testing with TestContainers
Take Control of your Integration Testing with TestContainersTake Control of your Integration Testing with TestContainers
Take Control of your Integration Testing with TestContainers
 
Spring Boot Intro
Spring Boot IntroSpring Boot Intro
Spring Boot Intro
 
Maven Presentation - SureFire vs FailSafe
Maven Presentation - SureFire vs FailSafeMaven Presentation - SureFire vs FailSafe
Maven Presentation - SureFire vs FailSafe
 
Testing Java Web Apps With Selenium
Testing Java Web Apps With SeleniumTesting Java Web Apps With Selenium
Testing Java Web Apps With Selenium
 
Spring boot
Spring bootSpring boot
Spring boot
 
Real Java EE Testing with Arquillian and ShrinkWrap
Real Java EE Testing with Arquillian and ShrinkWrapReal Java EE Testing with Arquillian and ShrinkWrap
Real Java EE Testing with Arquillian and ShrinkWrap
 

Similar to 2014 Joker - Integration Testing from the Trenches

Automated Web Testing With Selenium
Automated Web Testing With SeleniumAutomated Web Testing With Selenium
Automated Web Testing With SeleniumJodie Miners
 
Hadoop testing workshop - july 2013
Hadoop testing workshop - july 2013Hadoop testing workshop - july 2013
Hadoop testing workshop - july 2013Ophir Cohen
 
How do you tame a big ball of mud? One test at a time.
How do you tame a big ball of mud? One test at a time.How do you tame a big ball of mud? One test at a time.
How do you tame a big ball of mud? One test at a time.Matt Eland
 
JNation - Integration Testing from the Trenches Rebooted
JNation - Integration Testing from the Trenches RebootedJNation - Integration Testing from the Trenches Rebooted
JNation - Integration Testing from the Trenches RebootedNicolas Fränkel
 
Anatomy of a Build Pipeline
Anatomy of a Build PipelineAnatomy of a Build Pipeline
Anatomy of a Build PipelineSamuel Brown
 
Automated Testing using JavaScript
Automated Testing using JavaScriptAutomated Testing using JavaScript
Automated Testing using JavaScriptSimon Guest
 
Continuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and JenkinsContinuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and JenkinsSOASTA
 
[ENGLISH] TDC 2015 - PHP Trail - Tests and PHP Continuous Integration Enviro...
[ENGLISH] TDC 2015 - PHP  Trail - Tests and PHP Continuous Integration Enviro...[ENGLISH] TDC 2015 - PHP  Trail - Tests and PHP Continuous Integration Enviro...
[ENGLISH] TDC 2015 - PHP Trail - Tests and PHP Continuous Integration Enviro...Bruno Tanoue
 
香港六合彩 &raquo; SlideShare
香港六合彩 &raquo; SlideShare香港六合彩 &raquo; SlideShare
香港六合彩 &raquo; SlideShareyayao
 
WebTest - Efficient Functional Web Testing with HtmlUnit and Beyond
WebTest - Efficient Functional Web Testing with HtmlUnit and BeyondWebTest - Efficient Functional Web Testing with HtmlUnit and Beyond
WebTest - Efficient Functional Web Testing with HtmlUnit and Beyondmguillem
 
Continuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and JenkinsContinuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and JenkinsSOASTA
 
Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...
Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...
Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...Applitools
 
5 Steps to Jump Start Your Test Automation
5 Steps to Jump Start Your Test Automation5 Steps to Jump Start Your Test Automation
5 Steps to Jump Start Your Test AutomationSauce Labs
 
Automated Testing Of EPiServer CMS Sites
Automated Testing Of EPiServer CMS SitesAutomated Testing Of EPiServer CMS Sites
Automated Testing Of EPiServer CMS Sitesjoelabrahamsson
 

Similar to 2014 Joker - Integration Testing from the Trenches (20)

Automated Web Testing With Selenium
Automated Web Testing With SeleniumAutomated Web Testing With Selenium
Automated Web Testing With Selenium
 
Hadoop testing workshop - july 2013
Hadoop testing workshop - july 2013Hadoop testing workshop - july 2013
Hadoop testing workshop - july 2013
 
How do you tame a big ball of mud? One test at a time.
How do you tame a big ball of mud? One test at a time.How do you tame a big ball of mud? One test at a time.
How do you tame a big ball of mud? One test at a time.
 
JNation - Integration Testing from the Trenches Rebooted
JNation - Integration Testing from the Trenches RebootedJNation - Integration Testing from the Trenches Rebooted
JNation - Integration Testing from the Trenches Rebooted
 
Anatomy of a Build Pipeline
Anatomy of a Build PipelineAnatomy of a Build Pipeline
Anatomy of a Build Pipeline
 
Learning selenium sample
Learning selenium sampleLearning selenium sample
Learning selenium sample
 
Automated Testing using JavaScript
Automated Testing using JavaScriptAutomated Testing using JavaScript
Automated Testing using JavaScript
 
Integration testing - A&BP CC
Integration testing - A&BP CCIntegration testing - A&BP CC
Integration testing - A&BP CC
 
Continuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and JenkinsContinuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and Jenkins
 
jDriver Presentation
jDriver PresentationjDriver Presentation
jDriver Presentation
 
[ENGLISH] TDC 2015 - PHP Trail - Tests and PHP Continuous Integration Enviro...
[ENGLISH] TDC 2015 - PHP  Trail - Tests and PHP Continuous Integration Enviro...[ENGLISH] TDC 2015 - PHP  Trail - Tests and PHP Continuous Integration Enviro...
[ENGLISH] TDC 2015 - PHP Trail - Tests and PHP Continuous Integration Enviro...
 
香港六合彩 &raquo; SlideShare
香港六合彩 &raquo; SlideShare香港六合彩 &raquo; SlideShare
香港六合彩 &raquo; SlideShare
 
WebTest - Efficient Functional Web Testing with HtmlUnit and Beyond
WebTest - Efficient Functional Web Testing with HtmlUnit and BeyondWebTest - Efficient Functional Web Testing with HtmlUnit and Beyond
WebTest - Efficient Functional Web Testing with HtmlUnit and Beyond
 
Continuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and JenkinsContinuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and Jenkins
 
Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...
Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...
Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...
 
5 Steps to Jump Start Your Test Automation
5 Steps to Jump Start Your Test Automation5 Steps to Jump Start Your Test Automation
5 Steps to Jump Start Your Test Automation
 
Testing w-mocks
Testing w-mocksTesting w-mocks
Testing w-mocks
 
Presentation
PresentationPresentation
Presentation
 
Automated Testing Of EPiServer CMS Sites
Automated Testing Of EPiServer CMS SitesAutomated Testing Of EPiServer CMS Sites
Automated Testing Of EPiServer CMS Sites
 
Codeception
CodeceptionCodeception
Codeception
 

More from Nicolas Fränkel

SnowCamp - Adding search to a legacy application
SnowCamp - Adding search to a legacy applicationSnowCamp - Adding search to a legacy application
SnowCamp - Adding search to a legacy applicationNicolas Fränkel
 
Un CV de dévelopeur toujours a jour
Un CV de dévelopeur toujours a jourUn CV de dévelopeur toujours a jour
Un CV de dévelopeur toujours a jourNicolas Fränkel
 
Zero-downtime deployment on Kubernetes with Hazelcast
Zero-downtime deployment on Kubernetes with HazelcastZero-downtime deployment on Kubernetes with Hazelcast
Zero-downtime deployment on Kubernetes with HazelcastNicolas Fränkel
 
jLove - A Change-Data-Capture use-case: designing an evergreen cache
jLove - A Change-Data-Capture use-case: designing an evergreen cachejLove - A Change-Data-Capture use-case: designing an evergreen cache
jLove - A Change-Data-Capture use-case: designing an evergreen cacheNicolas Fränkel
 
BigData conference - Introduction to stream processing
BigData conference - Introduction to stream processingBigData conference - Introduction to stream processing
BigData conference - Introduction to stream processingNicolas Fränkel
 
ADDO - Your own Kubernetes controller, not only in Go
ADDO - Your own Kubernetes controller, not only in GoADDO - Your own Kubernetes controller, not only in Go
ADDO - Your own Kubernetes controller, not only in GoNicolas Fränkel
 
TestCon Europe - Mutation Testing to the Rescue of Your Tests
TestCon Europe - Mutation Testing to the Rescue of Your TestsTestCon Europe - Mutation Testing to the Rescue of Your Tests
TestCon Europe - Mutation Testing to the Rescue of Your TestsNicolas Fränkel
 
OSCONF Jaipur - A Hitchhiker's Tour to Containerizing a Java application
OSCONF Jaipur - A Hitchhiker's Tour to Containerizing a Java applicationOSCONF Jaipur - A Hitchhiker's Tour to Containerizing a Java application
OSCONF Jaipur - A Hitchhiker's Tour to Containerizing a Java applicationNicolas Fränkel
 
GeekcampSG 2020 - A Change-Data-Capture use-case: designing an evergreen cache
GeekcampSG 2020 - A Change-Data-Capture use-case: designing an evergreen cacheGeekcampSG 2020 - A Change-Data-Capture use-case: designing an evergreen cache
GeekcampSG 2020 - A Change-Data-Capture use-case: designing an evergreen cacheNicolas Fränkel
 
JavaDay Istanbul - 3 improvements in your microservices architecture
JavaDay Istanbul - 3 improvements in your microservices architectureJavaDay Istanbul - 3 improvements in your microservices architecture
JavaDay Istanbul - 3 improvements in your microservices architecture Nicolas Fränkel
 
OSCONF Hyderabad - Shorten all URLs!
OSCONF Hyderabad - Shorten all URLs!OSCONF Hyderabad - Shorten all URLs!
OSCONF Hyderabad - Shorten all URLs!Nicolas Fränkel
 
Devclub.lv - Introduction to stream processing
Devclub.lv - Introduction to stream processingDevclub.lv - Introduction to stream processing
Devclub.lv - Introduction to stream processingNicolas Fränkel
 
OSCONF Koshi - Zero downtime deployment with Kubernetes, Flyway and Spring Boot
OSCONF Koshi - Zero downtime deployment with Kubernetes, Flyway and Spring BootOSCONF Koshi - Zero downtime deployment with Kubernetes, Flyway and Spring Boot
OSCONF Koshi - Zero downtime deployment with Kubernetes, Flyway and Spring BootNicolas Fränkel
 
JOnConf - A CDC use-case: designing an Evergreen Cache
JOnConf - A CDC use-case: designing an Evergreen CacheJOnConf - A CDC use-case: designing an Evergreen Cache
JOnConf - A CDC use-case: designing an Evergreen CacheNicolas Fränkel
 
London In-Memory Computing Meetup - A Change-Data-Capture use-case: designing...
London In-Memory Computing Meetup - A Change-Data-Capture use-case: designing...London In-Memory Computing Meetup - A Change-Data-Capture use-case: designing...
London In-Memory Computing Meetup - A Change-Data-Capture use-case: designing...Nicolas Fränkel
 
JUG Tirana - Introduction to data streaming
JUG Tirana - Introduction to data streamingJUG Tirana - Introduction to data streaming
JUG Tirana - Introduction to data streamingNicolas Fränkel
 
Java.IL - Your own Kubernetes controller, not only in Go!
Java.IL - Your own Kubernetes controller, not only in Go!Java.IL - Your own Kubernetes controller, not only in Go!
Java.IL - Your own Kubernetes controller, not only in Go!Nicolas Fränkel
 
vJUG - Introduction to data streaming
vJUG - Introduction to data streamingvJUG - Introduction to data streaming
vJUG - Introduction to data streamingNicolas Fränkel
 
London Java Community - An Experiment in Continuous Deployment of JVM applica...
London Java Community - An Experiment in Continuous Deployment of JVM applica...London Java Community - An Experiment in Continuous Deployment of JVM applica...
London Java Community - An Experiment in Continuous Deployment of JVM applica...Nicolas Fränkel
 
OSCONF - Your own Kubernetes controller: not only in Go
OSCONF - Your own Kubernetes controller: not only in GoOSCONF - Your own Kubernetes controller: not only in Go
OSCONF - Your own Kubernetes controller: not only in GoNicolas Fränkel
 

More from Nicolas Fränkel (20)

SnowCamp - Adding search to a legacy application
SnowCamp - Adding search to a legacy applicationSnowCamp - Adding search to a legacy application
SnowCamp - Adding search to a legacy application
 
Un CV de dévelopeur toujours a jour
Un CV de dévelopeur toujours a jourUn CV de dévelopeur toujours a jour
Un CV de dévelopeur toujours a jour
 
Zero-downtime deployment on Kubernetes with Hazelcast
Zero-downtime deployment on Kubernetes with HazelcastZero-downtime deployment on Kubernetes with Hazelcast
Zero-downtime deployment on Kubernetes with Hazelcast
 
jLove - A Change-Data-Capture use-case: designing an evergreen cache
jLove - A Change-Data-Capture use-case: designing an evergreen cachejLove - A Change-Data-Capture use-case: designing an evergreen cache
jLove - A Change-Data-Capture use-case: designing an evergreen cache
 
BigData conference - Introduction to stream processing
BigData conference - Introduction to stream processingBigData conference - Introduction to stream processing
BigData conference - Introduction to stream processing
 
ADDO - Your own Kubernetes controller, not only in Go
ADDO - Your own Kubernetes controller, not only in GoADDO - Your own Kubernetes controller, not only in Go
ADDO - Your own Kubernetes controller, not only in Go
 
TestCon Europe - Mutation Testing to the Rescue of Your Tests
TestCon Europe - Mutation Testing to the Rescue of Your TestsTestCon Europe - Mutation Testing to the Rescue of Your Tests
TestCon Europe - Mutation Testing to the Rescue of Your Tests
 
OSCONF Jaipur - A Hitchhiker's Tour to Containerizing a Java application
OSCONF Jaipur - A Hitchhiker's Tour to Containerizing a Java applicationOSCONF Jaipur - A Hitchhiker's Tour to Containerizing a Java application
OSCONF Jaipur - A Hitchhiker's Tour to Containerizing a Java application
 
GeekcampSG 2020 - A Change-Data-Capture use-case: designing an evergreen cache
GeekcampSG 2020 - A Change-Data-Capture use-case: designing an evergreen cacheGeekcampSG 2020 - A Change-Data-Capture use-case: designing an evergreen cache
GeekcampSG 2020 - A Change-Data-Capture use-case: designing an evergreen cache
 
JavaDay Istanbul - 3 improvements in your microservices architecture
JavaDay Istanbul - 3 improvements in your microservices architectureJavaDay Istanbul - 3 improvements in your microservices architecture
JavaDay Istanbul - 3 improvements in your microservices architecture
 
OSCONF Hyderabad - Shorten all URLs!
OSCONF Hyderabad - Shorten all URLs!OSCONF Hyderabad - Shorten all URLs!
OSCONF Hyderabad - Shorten all URLs!
 
Devclub.lv - Introduction to stream processing
Devclub.lv - Introduction to stream processingDevclub.lv - Introduction to stream processing
Devclub.lv - Introduction to stream processing
 
OSCONF Koshi - Zero downtime deployment with Kubernetes, Flyway and Spring Boot
OSCONF Koshi - Zero downtime deployment with Kubernetes, Flyway and Spring BootOSCONF Koshi - Zero downtime deployment with Kubernetes, Flyway and Spring Boot
OSCONF Koshi - Zero downtime deployment with Kubernetes, Flyway and Spring Boot
 
JOnConf - A CDC use-case: designing an Evergreen Cache
JOnConf - A CDC use-case: designing an Evergreen CacheJOnConf - A CDC use-case: designing an Evergreen Cache
JOnConf - A CDC use-case: designing an Evergreen Cache
 
London In-Memory Computing Meetup - A Change-Data-Capture use-case: designing...
London In-Memory Computing Meetup - A Change-Data-Capture use-case: designing...London In-Memory Computing Meetup - A Change-Data-Capture use-case: designing...
London In-Memory Computing Meetup - A Change-Data-Capture use-case: designing...
 
JUG Tirana - Introduction to data streaming
JUG Tirana - Introduction to data streamingJUG Tirana - Introduction to data streaming
JUG Tirana - Introduction to data streaming
 
Java.IL - Your own Kubernetes controller, not only in Go!
Java.IL - Your own Kubernetes controller, not only in Go!Java.IL - Your own Kubernetes controller, not only in Go!
Java.IL - Your own Kubernetes controller, not only in Go!
 
vJUG - Introduction to data streaming
vJUG - Introduction to data streamingvJUG - Introduction to data streaming
vJUG - Introduction to data streaming
 
London Java Community - An Experiment in Continuous Deployment of JVM applica...
London Java Community - An Experiment in Continuous Deployment of JVM applica...London Java Community - An Experiment in Continuous Deployment of JVM applica...
London Java Community - An Experiment in Continuous Deployment of JVM applica...
 
OSCONF - Your own Kubernetes controller: not only in Go
OSCONF - Your own Kubernetes controller: not only in GoOSCONF - Your own Kubernetes controller: not only in Go
OSCONF - Your own Kubernetes controller: not only in Go
 

Recently uploaded

Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionOnePlan Solutions
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...software pro Development
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfryanfarris8
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...kalichargn70th171
 

Recently uploaded (20)

Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 

2014 Joker - Integration Testing from the Trenches

  • 1. Integration Testing from the Trenches Nicolas Fränkel October 2014
  • 2. Me, myself and I Developer & Architect as consultant Wide range of businesses & customers Teacher & Trainer Speaker Blogger http://blog.frankel.ch/ (http://morevaadin.com/) https://leanpub.com/integrationtest 2
  • 3. Also an author https://leanpub.com/integrationtest 3
  • 4. Plan Integration Testing What is that? Challenges Solution hints Testing with resource dependencies Database Web Services Testing In-container Spring & Spring MVC JavaEE https://leanpub.com/integrationtest 4
  • 6. There are many different kinds of testing Unit Testing Mutation Testing Integration Testing GUI Testing Performance Testing Load Testing Stress Testing Endurance Testing Security Testing etc. https://leanpub.com/integrationtest 6
  • 7. Unit Testing vs. Integration Testing Unit Testing Testing a unit (i.e. a class) in isolation Integration Testing Testing the collaboration of multiple units https://leanpub.com/integrationtest 7 "Savate fouetté figure 1" by Daniel - Photo Daniel.
  • 8. https://leanpub.com/integrationtest 8 A concrete example Let’s take an example A prototype car "2011 Nissan Leaf WAS 2011 1040" by Mariordo Mario Roberto Duran Ortiz - Own work
  • 9. Unit Testing Akin to testing each nut and bolt separately https://leanpub.com/integrationtest 9
  • 10. Integration Testing Akin to going on a test drive https://leanpub.com/integrationtest 10 "URE05e" by Marvin Raaijmakers - Own work.
  • 11. Unit Testing + Integration Testing Approaches are not exclusive but complementary Would you take a prototype car on test drive without having tested only nuts and bolts? Would you manufacture a car from a prototype having only tested nuts and bolts but without having tested it on numerous test drives? https://leanpub.com/integrationtest 11
  • 12. System Under Test The SUT is what get tested Techniques from Unit Testing can be re-used Dependency Injection Test doubles https://leanpub.com/integrationtest 12
  • 13. Testing is about ROI The larger the SUT The more fragile the test The less maintainable the test The less the ROI Thus, tests have to be organized in a pyramidal way The bigger the SUT The less the number of tests Integration Testing Test standard cases Generally not error cases https://leanpub.com/integrationtest 13 http://martinfowler.com/bliki/TestPyramid.html
  • 14. Integration Testing Challenges Brittle Dependent on external resources  Database(s)  etc. Slow Dependent on external resources Hard to diagnose https://leanpub.com/integrationtest 14
  • 15. How to cope Separate Integration Tests from Unit Tests Fake required infrastructure resources Test in-container https://leanpub.com/integrationtest 15
  • 16. But IT are still slow?! Separating UT & IT doesn’t make IT run faster But you can uncover errors from UT faster Fail Fast It will speed testing https://leanpub.com/integrationtest 16 "Gepardjagt2 (Acinonyx jubatus)" by Malene Thyssen - Own work.
  • 17. Integration Testing and build Available tools Ant Maven Gradle etc. https://leanpub.com/integrationtest 17 New Development Recently Finished on Bristol's City Centre by Brizzleboy
  • 18. Maven lifecycle … compile … test … pre-integration-test integration-test post-integration-test verify … https://leanpub.com/integrationtest 18
  • 19. Reminder on Surefire Bound to the test phase Runs by default *Test Test* *TestCase https://leanpub.com/integrationtest 19
  • 20. Failsafe “Copy” of Surefire Different defaults *IT IT* *ITCase One goal per lifecycle phase pre-integration-test integration-test post-integration-test verify Must be bound explicitly https://leanpub.com/integrationtest 20
  • 21. Binding Failsafe - sample <plugin> <artifactId>maven-failsafe-plugin</artifactId> <version>2.17</version> <executions> <execution> <id>integration-test</id> <goals> <goal>integration-test</goal> </goals> <phase>integration-test</phase> </execution> <execution> <id>verify</id> <goals> <goal>verify</goal> </goals> <phase>verify</phase> </execution> </executions> </plugin> https://leanpub.com/integrationtest 21
  • 22. Continuous Integration Needs a build configured Suggestions Unit Tests run at each commit Integration Tests run “regularly”  Daily  Hourly  Depending on the context https://leanpub.com/integrationtest 22
  • 24. Infrastructure dependencies Database Filesystem Time Message Oriented Middleware Mail server FTP server etc. https://leanpub.com/integrationtest 24
  • 25. Mocks and infrastructure dependencies To test your Service Mock your DAO/repository  Mockito To test your DAO/repository Mock your database??? https://leanpub.com/integrationtest 25
  • 26. Simple database use-case Oracle database Use an in-memory datasource and hope for the best Use Oracle Express and hope for the best Use a dedicated remote schema for each developer  And your DBAs will hate you https://leanpub.com/integrationtest 26
  • 27. Reducing database gap risk In-memory databases are easy to setup h2 is such a database (successor of HSQL) Compatibility modes for most widespread DB  jdbc:h2:mem:test;MODE=Oracle https://leanpub.com/integrationtest 27
  • 28. Parameterizing properties Use properties for tests only db.url= db.driver= db.username= db.password= And use your favorite build tool Maven  Resource filtering Ant Gradle https://leanpub.com/integrationtest 28
  • 29. Integration Testing with Web Services Web Services also are an infrastructure resource Hosted on-site Or outside Different Web Services types have different solutions RESTful SOAP https://leanpub.com/integrationtest 29
  • 30. Faking RESTful WS Require an HTTP server Requirements Easy setup Standalone Embeddable in tests Spring MVC? Requires a servlet container  (Not with Spring Boot) Some code to write https://leanpub.com/integrationtest 30 Author: Dwight Sipler from Stow, MA, USA
  • 31. Spark to the rescue Micro web framework A la Sinatra http://www.sparkjava.com/ Very few lines of code Just wire to serve JSON files https://leanpub.com/integrationtest 31
  • 32. Spark sample import static spark.Spark.*; import spark.*; public class SparkSample{ public static void main(String[] args) { setPort(5678); get("/hello", (request, response) -> { return "Hello World!"; }); get("/users/:name", (request, response) -> { return "User: " + request.params(":name"); }); get("/private", (request, response) -> { response.status(401); return "Go Away!!!"; }); } } https://leanpub.com/integrationtest 32
  • 33. Faking SOAP web service Possible to use Spark for SOAP But unwieldy https://leanpub.com/integrationtest 33
  • 34. SOAPUI SOAPUI is the framework to test SOAP WS Has a GUI Good documentation Understands  Authentication  Headers  Etc. Can be used to Fake SOAP WS https://leanpub.com/integrationtest 34
  • 35. SOAPUI usage Get WSDL Either online Or from a file Create MockService Craft the adequate response Run the service Point the dependency to localhost https://leanpub.com/integrationtest 35
  • 36. Challenges to the previous scenario Craft the adequate response? More likely get one from the real WS And tweak it Running in an automated way Save the project Get the SOAPUI jar Read the project and launch https://leanpub.com/integrationtest 37
  • 37. SOAPUI automation WsdlProject project = new WsdlProject(); String wsdlFile = "file:src/test/resources/ip2geo.wsdl"; WsdlInterface wsdlInterface = importWsdl(project, wsdlFile, true)[0]; WsdlMockService fakeService = project.addNewMockService("fakeService"); WsdlOperation wsdlOp = wsdlInterface.getOperationByName("ResolveIP"); MockOperation fakeOp = fakeService.addNewMockOperation(wsdlOp); MockResponse fakeResponse = fakeOp.addNewMockResponse("fakeResponse"); fakeResponse.setResponseContent( "<soapenv:Envelope ...</soapenv:Envelope>"); runner = fakeService.start(); https://leanpub.com/integrationtest 38
  • 38. Faking Web Service in real-life Use the same rules as for UT Keep validation simple Test one thing  One Assert  Or a set of related ones Keep setup simple Don’t put complex logic  Don’t put too much logic  Don’t put logic at all Duplicate setup in each test  Up to a point https://leanpub.com/integrationtest 39 Author: I, rolf B
  • 40. Upping the ante Testing collaboration is nice Faking infrastructure dependencies is nice But didn’t we forget the most important dependency? https://leanpub.com/integrationtest 41
  • 41. The container! “Proprietary” container Spring Application Server Tomcat JBoss <Place your favorite one here> https://leanpub.com/integrationtest 42
  • 42. Spring So far, we can test: Beans which dependencies can be mocked (or not)  Service Beans that depend on fake resources  Datasource What about the configuration? In Unit Tests, we set dependencies  The real configuration is not used  Ergo, not tested! https://leanpub.com/integrationtest 43
  • 43. Testing configuration Configuration cannot be monolithic Break down into fragments Each fragment contains a set of either  Real beans  Fake beans https://leanpub.com/integrationtest 44 Rudston Monolith May 2013 by Angela Findlay
  • 44. Data source configuration fragment management example Different configuration fragments Production JNDI fragment Test in-memory fragment https://leanpub.com/integrationtest 45
  • 45. Data source configuration sample <beans ...> <jee:jndi-lookup id="ds" jndi-name="jdbc/MyDS" /> </beans> <beans ...> <bean id="ds" class="o.a.t.jdbc.pool.DataSource"> <property name="driverClassName” value="org.h2.Driver" /> <property name="url" value="jdbc:h2:~/test" /> <property name="username" value="sa" /> <property name="maxActive" value="1" /> </bean> </beans> https://leanpub.com/integrationtest 46
  • 46. Fragment structure 1. Main fragment Repository Service etc. 2. Prod DB fragment 3. Test DB fragment https://leanpub.com/integrationtest 47
  • 47. Tips Prevent coupling No fragments reference in fragments Use top-level assembly instead  Tests  Application Context  Webapps Pool exhaustion check Set the maximum number of connections in the pool to 1 Compile-time safety Use JavaConfig Not related to testing  https://leanpub.com/integrationtest 48
  • 48. And now, how to test? Get access to both The entry point And the “end” point Spring Test to the rescue Integration with common Testing frameworks  JUnit  TestNG https://leanpub.com/integrationtest 49 St Louis Gateway Arch 1916" by Dirk Beyer - Own work.
  • 49. Favor TestNG Extra grouping Per layer Per use-case Name your own Extra lifecycle hooks Better parameterization Data Provider Ordering of test methods https://leanpub.com/integrationtest 50
  • 50. Spring TestNG integration AbstractTestNGSpringContextTests AbstractTransactionalTestNGSpringContextTests Configurable context fragments @ContextConfiguration Inject any bean in the test class If necessary, applicatonContext member from superclass https://leanpub.com/integrationtest 51
  • 51. Sample TestNG test with Spring @ContextConfiguration( classes = { MainCfg.class, AnotherCfg.class }) public class OrderIT extends AbstractTestNGSpringContextTests { @Autowired private OrderService orderService; @Test public void should_do_this_and_that() { orderService.order(); Assert.assertThat(...) } https://leanpub.com/integrationtest 52 }
  • 52. Testing with the DB (or other transactional resources) Transactions Bound to business functionality Implemented on Service layer With DAO Use explicit transaction management @Transactional https://leanpub.com/integrationtest 53
  • 53. Transaction management tip Tests fail… sometimes How to audit state? By default, Spring rollbacks transactions General configuration @TransactionConfiguration( defaultRollback = false ) Can be overridden on a per-method basis  @Rollback(true) https://leanpub.com/integrationtest 54
  • 54. Sample Transaction management @ContextConfiguration @TransactionConfiguration(defaultRollback = false) public class OverrideDefaultRollbackSpringTest extends AbstractTransactionalTestNGSpringContextTests { @Test @Rollback(true) public void transaction_will_be_rollbacked() { ... } @Test public void transaction_wont_be_rollbacked() { ... } } https://leanpub.com/integrationtest 55
  • 55. Spring MVC webapps Testing Require a context hierachy Parent as main context Child as webapp context @ContextHierarchy Require a webapp configuration @WebAppConfiguration https://leanpub.com/integrationtest 56
  • 56. Spring MVC test sample @WebAppConfiguration @ContextHierarchy({ @ContextConfiguration(classes = MainConfig.class), @ContextConfiguration(classes = WebConfig.class) }) public class SpringWebApplicationTest extends AbstractTestNGSpringContextTests { ... } https://leanpub.com/integrationtest 57
  • 57. Entry points for testing Spring webapps At the HTML level At the HTTP level At the Controller level Like standard Java testing https://leanpub.com/integrationtest 58 "Lahntunnel Weilburg" by rupp.de - Own work.
  • 58. Tools for testing webapps HTML testing tools Interact with HTML/CSS  Fill this field  Click on that button HTTP testing tools  Send HTTP requests  Get HTTP responses https://leanpub.com/integrationtest 59
  • 59. Drawback of previous approaches Very low-level Fragile! Remember that testing is about ROI  Breaking tests with every HTML/CSS change is the worst way to have positive ROI  (There are mitigation techniques  out of scope) https://leanpub.com/integrationtest 60 Attribution: © Milan Nykodym, Czech Republic
  • 60. Drawback of Testing with controllers as entry point Bypass many URL-related features Interceptors Spring Security etc. https://leanpub.com/integrationtest 61 Controller SCSI.JPG by Rosco
  • 61. Spring Test to the rescue Spring Test has a large chunk dedicated to MVC Since 3.2 Can test with URL as entry-points Fluent API with static imports https://leanpub.com/integrationtest 62 Coastguard Helicopter (8016050677)" by Paul Lucas from Leicestershire, UK - Coastguard Helicopter
  • 62. Spring MVC Test overview https://leanpub.com/integrationtest 63
  • 63. MockMvc class responsibilities Request builder Configures the Fake request Request matcher Misc. assertions Request handler Do something  OOB logger https://leanpub.com/integrationtest 64
  • 64. Available configuration on Request Builder HTTP method GET POST etc. HTTP related stuff Headers Parameters Content JavaEE related stuff Request attributes Session etc. https://leanpub.com/integrationtest 65
  • 65. Request Builder sample MockHttpServletRequestBuilder builder = get("/customer/{id}", 1234L) .accept("text/html") .param("lang", "en") .secure(true); GET /customer/1234?lang=en HTTP/1.1 Accept: text/html https://leanpub.com/integrationtest 66
  • 66. You can use constants in your @RequestMapping @Controller public class MyController { public static final String PATH = "/customer/{id}"; @RequestMapping(PATH) public String showCustomer() { ... } https://leanpub.com/integrationtest 67 } MockHttpServletRequestBuilder builder = get(PATH, 1L);
  • 67. Some matchers Checks result is a Forward  Either exact  Or regexp Redirect  Either exact  Or regexp JSON payload https://leanpub.com/integrationtest 68 a safety wax match box and matches by Aathavan jaffna
  • 68. Some other matchers Request class Handler class Controller Content class Cookie class Status class HTTP code Flash class (Attributes, not the techno) View class Model class https://leanpub.com/integrationtest 69 "Ovejas en Patagonia - Argentina" by writtecarlosantonio
  • 69. Spring Pet Clinic https://leanpub.com/integrationtest 70
  • 70. Integration Testing on Spring Pet Clinic @WebAppConfiguration @ContextHierarchy({ @ContextConfiguration("classpath:spring/business-config.xml"), @ContextConfiguration("classpath:spring/mvc-core-config.xml") }) @ActiveProfiles("jdbc") public class PetControlIT extends AbstractTestNGSpringContextTests { @Test public void should_display_create_form() throws Exception { WebApplicationContext wac = (WebApplicationContext) applicationContext; MockMvc mvc = MockMvcBuilders.webAppContextSetup(wac).build(); MockHttpServletRequestBuilder newPet = get("/owners/{ownerId}/pets/new", 1); mvc.perform(newPet) .andExpect(view().name("pets/createOrUpdatePetForm")) .andExpect(model().attributeExists("pet")); } } https://leanpub.com/integrationtest 71
  • 71. The JavaEE world JavaEE has unique challenges CDI has no explicit wiring  You can @Veto you own classes  But no compiled ones Different application servers  Same specifications  Different implementations https://leanpub.com/integrationtest 72
  • 72. Deploy only what you want Standalone API to deploy only resources relevant to the test Just pick and choose Maven Integration Gradle too… https://leanpub.com/integrationtest 73
  • 73. Shrinkwrap sample String srcMainWebapp = "src/main/webapp/"; ShrinkWrap.create(WebArchive.class, "myWar.war") .addClass(MyService.class) .addPackage(MyModel.class.getPackage()) .addAsWebInfResource("persistence.xml", "classes/META-INF/persistence.xml") .addAsWebInfResource( new File(srcMainWebapp, "WEB-INF/page/my.jsp"), "page/my.jsp") .addAsWebResource( new File(srcMainWebapp, "script/my.js"), "script/my.js") .setWebXML("web.xml"); https://leanpub.com/integrationtest 74
  • 74. Maven integration sample File[] libs = Maven.resolver() .loadPomFromFile("pom.xml") .importDependencies(COMPILE, RUNTIME).resolve() .withTransitivity().asFile(); ShrinkWrap.create(WebArchive.class, "myWar.war") .addAsLibraries(libs); https://leanpub.com/integrationtest 75
  • 75. Different application servers Abstraction layer to Download Deploy applications Test Container adapters TomEE JBoss Weld etc. Full Maven integration https://leanpub.com/integrationtest 76
  • 76. Arquillian Test sample public class ArquillianSampleIT extends Arquillian { @Inject private MyService myService; @Deployment public static JavaArchive createDeployment() { return ...; } @Test public void should_handle_service() { Object value = myService.handle(); Assert.assertThat(...); } } https://leanpub.com/integrationtest 77
  • 77. Arquillian configuration sample <arquillian xmlns="http://jboss.org/schema/arquillian" xmlns:xsi="..." xsi:schemaLocation=" http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> <container qualifier="tomee" default="true"> <configuration> <property name="httpPort">-1</property> <property name="stopPort">-1</property> </configuration> </arquillian> https://leanpub.com/integrationtest 78

Editor's Notes

  1. skinparam dpi 150 class A class B package SUT { class C class D } class E class F A .right.> B B .down.> C C .right.> D D ..> E E .right.> F hide empty members
  2. skinparam dpi 150 package "Test Config" <<Rect>> { class "<bean\nclass='o.a.t.j.p.DataSource'>" as testdb } package "Prod Config" <<Rect>> { class "<jee:jndi-lookup\njndi-name='jdbc/MyDS' />" as jndidb } package "Main Config" <<Rect>> { class Service class Repository class "id=datasource" as dbbean } Service --> "1" Repository Repository --> "1" dbbean testdb -up-|> dbbean jndidb -up-|> dbbean hide circle hide empty members