SlideShare a Scribd company logo
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
D O C K E R I Z E D 	 S Y S T E M 	 T E S T I N G ,
W I T H 	 A 	 D A S H 	 O F 	 C H A O S
S O F T W A R E 	I S
E A T I N G 	 T H E 	 W O R L D
I F 	 D E B U G G I N G 	I S 	 T H E 	 P R O C E S S 	 O F
R E M O V I N G 	 S O F T W A R E 	 B U G S, 	
T H E N 	 P R O G R A M M I N G 	M U S T 	 B E 	 T H E 	 P R O C E S S 	 O F 	
P U T T I N G 	 T H E M 	 I N.
Edsger	W.	Dijkstra
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
A U T O M A T E D 	 T E S T S	A R E 	 T H E 	 S O L U T I O N
U N I T 	 T E S T S 	 A R E 	 N O T 	 E N O U G H
S O C I A B L E 	U N I T 	 T E S T S
W I L L 	 I T 	 W O R K 	 I N 	 P R O D U C T I O N 	?
H I G H - L E V E L 	 T E S T S	R U N N I N G 	 I N 	
P R O D U C T I O N - L I K E 	E N V I R O N M E N T
W H Y 	D O N ' T 	 W E 	 W R I T E 	 H I G H - L E V E L
T E S T S ?
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
W H A T 	 I S 	 A R Q U I L L I A N ?
Middleware	for	your	tests
W H A T 	 I S 	 A R Q U I L L I A N ?
Middleware	for	your	tests
Fills	the	gap	between	Unit/Integration	tests
W H A T 	 I S 	 A R Q U I L L I A N ?
Middleware	for	your	tests
Fills	the	gap	between	Unit/Integration	tests
Java	EE	and	beyond
W H A T 	 I S 	 A R Q U I L L I A N ?
Middleware	for	your	tests
Fills	the	gap	between	Unit/Integration	tests
Java	EE	and	beyond
Any	kind	of	high-level	tests
W H A T 	 I S 	 A R Q U I L L I A N ?
Middleware	for	your	tests
Fills	the	gap	between	Unit/Integration	tests
Java	EE	and	beyond
Any	kind	of	high-level	tests
Open	Source
apply	pluginapply	plugin::		"io.spring.dependency-management""io.spring.dependency-management"
dependencyManagement	dependencyManagement	{{
		imports			imports	{{
				mavenBom					mavenBom	'org.jboss.arquillian:arquillian-bom:...''org.jboss.arquillian:arquillian-bom:...'
				}}
}}		
B U I L D . G R A D L E
apply	pluginapply	plugin::		"io.spring.dependency-management""io.spring.dependency-management"
dependencyManagement	dependencyManagement	{{
		imports			imports	{{
				mavenBom					mavenBom	'org.jboss.arquillian:arquillian-bom:...''org.jboss.arquillian:arquillian-bom:...'
				}}
}}		
dependencies	dependencies	{{
		testCompile	group		testCompile	group::		'org.jboss.arquillian.junit''org.jboss.arquillian.junit',,	name	name::		'arquillian-junit-container''arquillian-junit-container'
B U I L D . G R A D L E
apply	pluginapply	plugin::		"io.spring.dependency-management""io.spring.dependency-management"
dependencyManagement	dependencyManagement	{{
		imports			imports	{{
				mavenBom					mavenBom	'org.jboss.arquillian:arquillian-bom:...''org.jboss.arquillian:arquillian-bom:...'
				}}
}}		
dependencies	dependencies	{{
		testCompile	group		testCompile	group::		'org.jboss.arquillian.junit''org.jboss.arquillian.junit',,	name	name::		'arquillian-junit-container''arquillian-junit-container'
		testCompile			testCompile	'org.apache.tomee:arquillian-tomee-remote:7.0.0''org.apache.tomee:arquillian-tomee-remote:7.0.0'
}}
B U I L D . G R A D L E
publicpublic		classclass		VolumeUnitsConverterResourceTestVolumeUnitsConverterResourceTest		{{
				@Test				@Test
								publicpublic		voidvoid		should_convert_ounces_to_millilitersshould_convert_ounces_to_milliliters(())		{{
																givengiven(())..
																																baseUribaseUri(("http://localhost:8080/""http://localhost:8080/"))..
																																pathParampathParam(("amount""amount",,		"8.0""8.0"))..
																whenwhen(())..
																																getget(("/convert/volume/fl/ml/{amount}""/convert/volume/fl/ml/{amount}"))..
																thenthen(())..
																																assertThatassertThat(())..bodybody((isis((equalToequalTo(("236.5882368""236.5882368"))))));;
								}}
}}
@@RunWithRunWith((ArquillianArquillian..classclass))
publicpublic		classclass		VolumeUnitsConverterResourceTestVolumeUnitsConverterResourceTest		{{
				@				@DeploymentDeployment((testable	testable	==		falsefalse))
								publicpublic		staticstatic	Archive	Archive<<??>>		createDeploymentcreateDeployment(())		{{
																returnreturn	ShrinkWrap	ShrinkWrap..createcreate((WebArchiveWebArchive..classclass,,		"test.war""test.war"))
																																..addPackagesaddPackages((truetrue,,	VolumeUnitsConverter	VolumeUnitsConverter..classclass..getPackagegetPackage(())))
																																..addAsWebInfResourceaddAsWebInfResource((EmptyAssetEmptyAsset..INSTANCEINSTANCE,,		"beans.xml""beans.xml"));;
								}}
								
				@Test				@Test
								publicpublic		voidvoid		should_convert_ounces_to_millilitersshould_convert_ounces_to_milliliters((@ArquillianResource	URL	applicationPath@ArquillianResource	URL	applicationPath))		{{
																givengiven(())..
																																baseUribaseUri((applicationPathapplicationPath..toStringtoString(())))..
																																pathParampathParam(("amount""amount",,		"8.0""8.0"))..
																whenwhen(())..
																																getget(("/convert/volume/fl/ml/{amount}""/convert/volume/fl/ml/{amount}"))..
																thenthen(())..
																																assertThatassertThat(())..bodybody((isis((equalToequalTo(("236.5882368""236.5882368"))))));;
								}}
}}
D E M O
P R I N C I P L E S 	 O F 	 A R Q U I L L I A N
Portable	tests
P R I N C I P L E S 	 O F 	 A R Q U I L L I A N
Portable	tests
Executable	from	IDE	and	build	tool
P R I N C I P L E S 	 O F 	 A R Q U I L L I A N
Portable	tests
Executable	from	IDE	and	build	tool
Skip	the	build
P R I N C I P L E S 	 O F 	 A R Q U I L L I A N
Portable	tests
Executable	from	IDE	and	build	tool
Skip	the	build
Reuse	existing	frameworks
P R I N C I P L E S 	 O F 	 A R Q U I L L I A N
Portable	tests
Executable	from	IDE	and	build	tool
Skip	the	build
Reuse	existing	frameworks
Flexible	and	Extensible
P R I N C I P L E S 	 O F 	 A R Q U I L L I A N
Portable	tests
Executable	from	IDE	and	build	tool
Skip	the	build
Reuse	existing	frameworks
Flexible	and	Extensible
Makes	writing	high-level	tests	a	breeze
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
I N S A N I T Y : 	 D O I N G 	 T H E 	 S A M E 	 T H I N G 	 O V E R 	 A N D 	 O V E R 	 A G A I N 	 A N D
E X P E C T I N G 	 D I F F E R E N T 	 R E S U L T S .
Albert	Einstein
D O C K E R
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
A R Q U I L L I A N 	 C U B E
W H A T 	 I S 	 C U B E ?
Manage	lifecycle	of	docker	containers
W H A T 	 I S 	 C U B E ?
Manage	lifecycle	of	docker	containers
Orchestrates	containers
W H A T 	 I S 	 C U B E ?
Manage	lifecycle	of	docker	containers
Orchestrates	containers
Provides	container	objects
W H A T 	 I S 	 C U B E ?
Manage	lifecycle	of	docker	containers
Orchestrates	containers
Provides	container	objects
Support	for	non-app	server	systems
W H A T 	 I S 	 C U B E ?
Manage	lifecycle	of	docker	containers
Orchestrates	containers
Provides	container	objects
Support	for	non-app	server	systems
Ready	for	OpenShift	v3
W H A T 	 I S 	 C U B E ?
Manage	lifecycle	of	docker	containers
Orchestrates	containers
Provides	container	objects
Support	for	non-app	server	systems
Ready	for	OpenShift	v3
Ready	for	Docker	Machine
dependencies	dependencies	{{
		testCompile			testCompile	'org.arquillian.cube:arquillian-cube-docker:...''org.arquillian.cube:arquillian-cube-docker:...'
}}
B U I L D . G R A D L E
<<arquillianarquillian>>
				<<extensionextension		qualifierqualifier==""dockerdocker"">>
												<<propertyproperty		namename==""machineNamemachineName"">>devdev</</propertyproperty>>
												<<propertyproperty		namename==""definitionFormatdefinitionFormat"">>COMPOSECOMPOSE</</propertyproperty>>
												<<propertyproperty		namename==""dockerContainersFiledockerContainersFile"">>docker-compose.ymldocker-compose.yml</</propertyproperty>>
				</</extensionextension>>
				
S R C / T E S T / R E S O U R C E S / A R Q U I L L I A N . X M L
<<arquillianarquillian>>
				<<extensionextension		qualifierqualifier==""dockerdocker"">>
												<<propertyproperty		namename==""machineNamemachineName"">>devdev</</propertyproperty>>
												<<propertyproperty		namename==""definitionFormatdefinitionFormat"">>COMPOSECOMPOSE</</propertyproperty>>
												<<propertyproperty		namename==""dockerContainersFiledockerContainersFile"">>docker-compose.ymldocker-compose.yml</</propertyproperty>>
				</</extensionextension>>
				
				<<containercontainer		qualifierqualifier==""tomcattomcat"">>
								<<configurationconfiguration>>
												<<propertyproperty		namename==""useruser"">>adminadmin</</propertyproperty>>
												<<propertyproperty		namename==""passpass"">>mypassmypass</</propertyproperty>>
								</</configurationconfiguration>>
				</</containercontainer>>
</</arquillianarquillian>>
S R C / T E S T / R E S O U R C E S / A R Q U I L L I A N . X M L
tomcattomcat::
		env_file		env_file::	envs	envs
		image		image::	tutum	tutum//tomcattomcat::7.07.0
		ports		ports::
												--		"8089:8089""8089:8089"
												--		"8088:8088""8088:8088"
												--		"8081:8080""8081:8080"
		links		links::
												--	pingpong	pingpong::pingpongpingpong
												
		pingpong		pingpong::
				image				image::	jonmorehouse	jonmorehouse//pingping--pongpong
				ports				ports::
												--		"8080:8080""8080:8080"
												
D O C K E R - C O M P O S E . Y M L
@@RunWithRunWith((ArquillianArquillian..classclass))
publicpublic		classclass		HelloWorldServletTestHelloWorldServletTest		{{
		@		@DeploymentDeployment((testabletestable==falsefalse))
				publicpublic		staticstatic	WebArchive		WebArchive	createcreate(())		{{
												returnreturn	ShrinkWrap	ShrinkWrap..createcreate((WebArchiveWebArchive..classclass,,		"hello.war""hello.war"))
																				..addClassaddClass((HelloWorldServletHelloWorldServlet..classclass));;
				}}
				
P I N G P O N G T E S T . J A V A
@@RunWithRunWith((ArquillianArquillian..classclass))
publicpublic		classclass		HelloWorldServletTestHelloWorldServletTest		{{
		@		@DeploymentDeployment((testabletestable==falsefalse))
				publicpublic		staticstatic	WebArchive		WebArchive	createcreate(())		{{
												returnreturn	ShrinkWrap	ShrinkWrap..createcreate((WebArchiveWebArchive..classclass,,		"hello.war""hello.war"))
																				..addClassaddClass((HelloWorldServletHelloWorldServlet..classclass));;
				}}
				
		@HostIp		@HostIp
		String	hostIp		String	hostIp;;
		@		@HostPortHostPort((containerName	containerName	==		"tomcat""tomcat",,	value		value	==		80808080))
		int	tomcatPort		int	tomcatPort;;
P I N G P O N G T E S T . J A V A
@@RunWithRunWith((ArquillianArquillian..classclass))
publicpublic		classclass		HelloWorldServletTestHelloWorldServletTest		{{
		@		@DeploymentDeployment((testabletestable==falsefalse))
				publicpublic		staticstatic	WebArchive		WebArchive	createcreate(())		{{
												returnreturn	ShrinkWrap	ShrinkWrap..createcreate((WebArchiveWebArchive..classclass,,		"hello.war""hello.war"))
																				..addClassaddClass((HelloWorldServletHelloWorldServlet..classclass));;
				}}
				
		@HostIp		@HostIp
		String	hostIp		String	hostIp;;
		@		@HostPortHostPort((containerName	containerName	==		"tomcat""tomcat",,	value		value	==		80808080))
		int	tomcatPort		int	tomcatPort;;
		@Test		@Test
				publicpublic		voidvoid		testtest((@ArquillianResource	URL	base@ArquillianResource	URL	base))	throws	IOException		throws	IOException	{{
				URL	obj					URL	obj	==		newnew		URLURL((basebase,,		"HelloWorld""HelloWorld"));;
				}}
P I N G P O N G T E S T . J A V A
C O N T A I N E R L E S S
W H A T 	 I S 	 C O N T A I N E RL E S S ?
Runs	any	application	that	runs	on	Docker
W H A T 	 I S 	 C O N T A I N E RL E S S ?
Runs	any	application	that	runs	on	Docker
Including	but	not	limited	to	node.js,	Wildfly	Swarm,	Spring	Boot,	Vert.x,	Go
W H A T 	 I S 	 C O N T A I N E RL E S S ?
Runs	any	application	that	runs	on	Docker
Including	but	not	limited	to	node.js,	Wildfly	Swarm,	Spring	Boot,	Vert.x,	Go
Shrinkwrap	support
dependencies	dependencies	{{
		testCompile			testCompile	'org.arquillian.cube:arquillian-cube-containerless:...''org.arquillian.cube:arquillian-cube-containerless:...'
}}
B U I L D . G R A D L E
@@RunWithRunWith((ArquillianArquillian..classclass))
publicpublic		classclass		NodeTestNodeTest		{{
				@				@DeploymentDeployment((testable	testable	==		falsefalse))
								publicpublic		staticstatic	GenericArchive		GenericArchive	createDeploymentcreateDeployment(())		{{
																returnreturn	ShrinkWrap	ShrinkWrap..createcreate((GenericArchiveGenericArchive..classclass,,		"app.tar""app.tar"))
																																..addadd((newnew		FileAssetFileAsset((newnew		FileFile(("src/test/js/index.js""src/test/js/index.js")))),,		"index.js""index.js"))
																																..addadd((newnew		FileAssetFileAsset((newnew		FileFile(("src/test/js/package.json""src/test/js/package.json")))),,		"package.json""package.json"));;
								}}
								
				@Test				@Test
								publicpublic		voidvoid		should_work_its_javascriptshould_work_its_javascript((@ArquillianResource	URL	base@ArquillianResource	URL	base))		{{
												//	...//	...
								}}
}}
N O D E T E S T . J A V A
FROM	nodeFROM	node::latestlatest
RUN	mkdir	RUN	mkdir	--p	p	//usrusr//srcsrc//appapp
WORKDIR	WORKDIR	//usrusr//srcsrc//appapp
ADD	$ADD	${{deployableFilenamedeployableFilename}}		//usrusr//srcsrc//appapp
RUN	npm	installRUN	npm	install
EXPOSE	EXPOSE	80808080
CMD	CMD	[[		"npm""npm",,		"start""start"		]]
D O C K E R F I L E T E M P L A T E
D E M O
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
T R Y 	 D O C K E R
Run	builds	in	containers
T R Y 	 D O C K E R
Run	builds	in	containers
More	than	one	at	the	time
T R Y 	 D O C K E R
Run	builds	in	containers
More	than	one	at	the	time
Use	isolated	networks
D E M O
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
A R Q U I L L I A N 	 C U B E 	 Q
W H A T 	 I S 	 Q ?
W H A T 	 I S 	 Q : 	C O N T A I N E R 	 C H A O S ?
stop,	kill	&	remove	containers
W H A T 	 I S 	 Q : 	S Y S T E M 	 C H A O S ?
block	ports,	burn	cpu,	burn	io,	fill	disk,	kill	process	&	null	route
W H A T 	 I S 	 Q : 	N E T W O R K 	 C H A O S ?
latency,	bandwidth,	down,	timeout
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
helloworldhelloworld::
		image		image::	lordofthejars	lordofthejars//helloworldhelloworld
		ports		ports::
								--		"8081:8080""8081:8080"
		links		links::
								--	pingpong	pingpong::pingpongpingpong
								
pingpongpingpong::
		image		image::	jonmorehouse	jonmorehouse//pingping--pongpong
		expose		expose::
												--		"8080""8080"
												
D O C K E R - C O M P O S E . Y M L
dependencies	dependencies	{{
		testCompile			testCompile	'org.arquillian.cube.q:arquillian-cube-q-toxic:...''org.arquillian.cube.q:arquillian-cube-q-toxic:...'
}}
B U I L D . G R A D L E
@@RunWithRunWith((ArquillianArquillian..classclass))
publicpublic		classclass		ToxicTestCaseToxicTestCase		{{
		@ArquillianResource		@ArquillianResource
				privateprivate	NetworkChaos	networkChaos	NetworkChaos	networkChaos;;
				
		@HostIp		@HostIp
				privateprivate	String	ip	String	ip;;
				
T O X I C T E S T C A S E . J A V A
@@RunWithRunWith((ArquillianArquillian..classclass))
publicpublic		classclass		ToxicTestCaseToxicTestCase		{{
		@ArquillianResource		@ArquillianResource
				privateprivate	NetworkChaos	networkChaos	NetworkChaos	networkChaos;;
				
		@HostIp		@HostIp
				privateprivate	String	ip	String	ip;;
				
		@Test		@Test
				publicpublic		voidvoid		should_survive_on_latencyshould_survive_on_latency(())	throws	Exception		throws	Exception	{{
				networkChaos				networkChaos..onon(("pingpong""pingpong",,		80808080))..latencylatency((40004000,,		00,,		(())		-->>		{{
						URL	url							URL	url	==		newnew		URLURL(("http://""http://"		++	ip		ip	++		":"":"		++		80818081		++		"/hw/HelloWorld""/hw/HelloWorld"));;
						String	response							String	response	==	IOUtil	IOUtil..asStringasString((urlurl..openStreamopenStream(())));;
								}}));;
				}}
}}
T O X I C T E S T C A S E . J A V A
D E M O
L E T ' S 	 R E C A P
Unit	tests	are	important
Unit	tests	are	important
So	are	the	tests	in	production-like	environment
Unit	tests	are	important
So	are	the	tests	in	production-like	environment
When	it	hurts	automate!
Unit	tests	are	important
So	are	the	tests	in	production-like	environment
When	it	hurts	automate!
Arquillian	works	for	Non	Java	projects
Unit	tests	are	important
So	are	the	tests	in	production-like	environment
When	it	hurts	automate!
Arquillian	works	for	Non	Java	projects
Expect	unexpected
Unit	tests	are	important
So	are	the	tests	in	production-like	environment
When	it	hurts	automate!
Arquillian	works	for	Non	Java	projects
Expect	unexpected
Arquillian	extensions
B A R T O S Z 	 M A J S A K
R E D 	 H A T
S O F T W A R E 	 E N G I N E E R
@ M A J S O N
	majson		bartoszmajsak
github.com/lordofthejars/pingpongQ
github.com/arquillian/arquillian-cube/tree/master/docker/ftest-docker-containerobject
github.com/arquillian/arquillian-cube/tree/master/docker/ftest-docker-compose
toxiproxy.io
A R Q U I L L I A N . O R G
D I S C U S S . A R Q U I L L I A N . O R G
C R E A T I V E 	 C O M M O N S 	 P I C T U R E S
S L I D E 	 1 3 	 - 	 H T T P S : / / W W W . F L I C K R . C O M / P H O T O S / F R O D E R I K / 8 2 8 3 7 2 4 2 4 0 /
S L I D E 	 1 4 	 - 	 H T T P S : / / W W W . F L I C K R . C O M / P H O T O S / D O O K I N G T O N / 8 4 4 5 5 0 4 3 9 6
S L I D E 	 2 2 	 - 	 H T T P S : / / W W W . F L I C K R . C O M / P H O T O S / T H O M A S H A W K / 2 6 8 1 7 4 4 7 3 9
S L I D E 	 3 8 	 - 	 H T T P S : / / W W W . F L I C K R . C O M / P H O T O S / N E E L S A N D R I N E / 1 9 5 4 4 4 2 8 2 8 6
S L I D E 	 4 2 	 - 	 H T T P S : / / W W W . F L I C K R . C O M / P H O T O S / A L P H A C H I M P S T U D I O / 1 3 1 4 1 9 9 0 6 2

More Related Content

PDF
Continuous Delivery As Code
PDF
Geb for browser automation
PDF
Mocks, Stubs and Fakes. ¿What Else?
PDF
Docker Testing
PDF
Jenkins 20
PDF
Testing Grails 3, the goob (unit), the bad (integration) and the ugly (functi...
KEY
groovy & grails - lecture 10
KEY
groovy & grails - lecture 13
Continuous Delivery As Code
Geb for browser automation
Mocks, Stubs and Fakes. ¿What Else?
Docker Testing
Jenkins 20
Testing Grails 3, the goob (unit), the bad (integration) and the ugly (functi...
groovy & grails - lecture 10
groovy & grails - lecture 13

What's hot (15)

PDF
An introduction to the MicroProfile
PDF
Testing, Learning and Professionalism — 20171214
PPTX
Debugging Effectively - php[world] 2015
PDF
Feedback en continu grâce au TDD et au AsCode
PDF
Scrum with Kanban; small adjustments, big improvements
PPTX
Debugging Effectively - SunshinePHP 2017
PPTX
Debugging Effectively - PHP UK 2017
KEY
groovy & grails - lecture 9
PPTX
Debugging Effectively - ZendCon 2016
PDF
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
PPTX
Debugging Effectively - DrupalCon Europe 2016
PPTX
Debugging Effectively - DrupalCon Nashville 2018
PPTX
Debugging Effectively - All Things Open 2017
KEY
groovy & grails - lecture 5
PPTX
Debugging Effectively - ConFoo Montreal 2019
An introduction to the MicroProfile
Testing, Learning and Professionalism — 20171214
Debugging Effectively - php[world] 2015
Feedback en continu grâce au TDD et au AsCode
Scrum with Kanban; small adjustments, big improvements
Debugging Effectively - SunshinePHP 2017
Debugging Effectively - PHP UK 2017
groovy & grails - lecture 9
Debugging Effectively - ZendCon 2016
LetSwift 2017 - 토스 iOS 앱의 개발/배포 환경
Debugging Effectively - DrupalCon Europe 2016
Debugging Effectively - DrupalCon Nashville 2018
Debugging Effectively - All Things Open 2017
groovy & grails - lecture 5
Debugging Effectively - ConFoo Montreal 2019

Viewers also liked (8)

PDF
JDD 2016 - Ondrej Mihalyi - How to bake reactive behavior into your Java EE ...
PPT
JDD 2016 - Jacek Bukowski - "Flying To Clouds" - Can It Be Easy?
PDF
JDD 2016 - Jakub Kubrynski - Jpa - beyond copy-paste
PDF
JDD 2016 - Michał Balinski, Oleksandr Goldobin - Practical Non Blocking Micro...
PDF
JDD 2016 - Tomasz Borek - DB for next project? Why, Postgres, of course
PDF
Blazing Fast Feedback Loops in the Java Universe
PDF
How to write your database: the story about Event Store
PDF
JDD 2016 - Marcin Stozek - Docker. Przewodnik dla poczatkujacych
JDD 2016 - Ondrej Mihalyi - How to bake reactive behavior into your Java EE ...
JDD 2016 - Jacek Bukowski - "Flying To Clouds" - Can It Be Easy?
JDD 2016 - Jakub Kubrynski - Jpa - beyond copy-paste
JDD 2016 - Michał Balinski, Oleksandr Goldobin - Practical Non Blocking Micro...
JDD 2016 - Tomasz Borek - DB for next project? Why, Postgres, of course
Blazing Fast Feedback Loops in the Java Universe
How to write your database: the story about Event Store
JDD 2016 - Marcin Stozek - Docker. Przewodnik dla poczatkujacych

Similar to JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys (20)

PDF
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
PDF
Prod-Like Integration Testing for Distributed Containerized Applications
PDF
Deliver Faster with BDD/TDD - Designing Automated Tests That Don't Suck
PPTX
Software_testing.pptx
PDF
Level Up Your Integration Testing With Testcontainers
PDF
Throwing complexity over the wall: Rapid development for enterprise Java (Jav...
PDF
Testing the Enterprise layers, with Arquillian
PDF
Testing the Enterprise Layers - the A, B, C's of Integration Testing - Aslak ...
PDF
Gradle - the Enterprise Automation Tool
PPTX
GeeCon.cz - Integration Testing from the Trenches Rebooted
PDF
Integration tests: use the containers, Luke!
PDF
Testcontainers - Geekout EE 2017 presentation
PPTX
Easy Java Integration Testing with Testcontainers​
PDF
Arquillian Constellation
PDF
In cluster open source testing framework - Microservices Meetup
PPTX
Test it! Unit, mocking and in-container Meet Arquillian!
PDF
Testing Distributed Micro Services. Agile Testing Days 2017
PDF
Testing Your Application On Google App Engine
PDF
Testing your application on Google App Engine
PPTX
Jakarta EE Test Strategies (2022)
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
Prod-Like Integration Testing for Distributed Containerized Applications
Deliver Faster with BDD/TDD - Designing Automated Tests That Don't Suck
Software_testing.pptx
Level Up Your Integration Testing With Testcontainers
Throwing complexity over the wall: Rapid development for enterprise Java (Jav...
Testing the Enterprise layers, with Arquillian
Testing the Enterprise Layers - the A, B, C's of Integration Testing - Aslak ...
Gradle - the Enterprise Automation Tool
GeeCon.cz - Integration Testing from the Trenches Rebooted
Integration tests: use the containers, Luke!
Testcontainers - Geekout EE 2017 presentation
Easy Java Integration Testing with Testcontainers​
Arquillian Constellation
In cluster open source testing framework - Microservices Meetup
Test it! Unit, mocking and in-container Meet Arquillian!
Testing Distributed Micro Services. Agile Testing Days 2017
Testing Your Application On Google App Engine
Testing your application on Google App Engine
Jakarta EE Test Strategies (2022)

Recently uploaded (20)

PPTX
Big Data Technologies - Introduction.pptx
PDF
Electronic commerce courselecture one. Pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Empathic Computing: Creating Shared Understanding
PDF
Modernizing your data center with Dell and AMD
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PPTX
A Presentation on Artificial Intelligence
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Machine learning based COVID-19 study performance prediction
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
Big Data Technologies - Introduction.pptx
Electronic commerce courselecture one. Pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
Empathic Computing: Creating Shared Understanding
Modernizing your data center with Dell and AMD
MYSQL Presentation for SQL database connectivity
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
A Presentation on Artificial Intelligence
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
The Rise and Fall of 3GPP – Time for a Sabbatical?
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
Building Integrated photovoltaic BIPV_UPV.pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
Encapsulation_ Review paper, used for researhc scholars
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Understanding_Digital_Forensics_Presentation.pptx
Machine learning based COVID-19 study performance prediction
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Dropbox Q2 2025 Financial Results & Investor Presentation

JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys