let's make this test suite run faster! softshake 2010
Post on 18-Oct-2014
1.799 views
DESCRIPTION
The more the tests, the longer the build. And when the build gets longer, the bugs take longer to fix, the features take longer to deploy. Every build should be minutes long, all tests included.Now lets say, our test suite takes much longer than that. How to reduce its duration? Where to start?Making tests become useless, converting functional tests to unit tests, running tests in parallel, building projects in parallel, doing slow tasks only once, writing fast DBMS tests... Let's share dozens of tips to fasten you test suite A LOT.TRANSCRIPT
Let's make this test suite run faster!
What for ?
Let's make this test suite run faster!Why?
http://farm1.static.flickr.com/158/349497988_fb751a5e3a_z.jpg
You test early and often
http://farm1.static.flickr.com/97/246816211_573c2901e1_z.jpg?zz=1
Don’t you?
Continuous integration, continuous testing...
http://vator.tv/images/attachments/150609195630ctd.gif
...even continuous deployment
Testing often
http://farm3.static.flickr.com/2505/3772118924_11fe195ef1.jpg
Often means waiting a lot
What for ?
Your coding room doesn’t have to look like this
http://upload.wikimedia.org/wikipedia/commons/3/3f/Nespresso_boutique.JPG
Tests can be fastEven if lines of code keep growing
Easy!Let’s distribute across multiple hudson servers
It doesn’t have to be complicatedI’ll share a few simple tricks
Photo: http://www.flickr.com/photos/zoutedrop/2317065892/
It can make your product betterSimple to test, means simple to write, deploy and USE
http://all-the-movies.cowblog.fr/images/arton1122.jpg
How can we accelerate the tests?
The CheaterThe LazyThe Brave
The CheaterThe LazyThe Brave
http://all-the-movies.cowblog.fr/images/arton1122.jpg
Buy a faster machine
http://farm1.static.flickr.com/28/93569705_1c562b413a_z.jpg?zz=1
Tests are cpu/memory bound
Be warned
http://farm5.static.flickr.com/4096/4819945812_735744e0fc_z.jpg
Single threaded tests get slower over time
0
25
50
75
100
2007 2008 2009 2010
Use all the cores
mvn -T1 clean install : 5:05smvn -T4 clean install : 3:10s
parallel build with maven3
Use all the coresparallel build with maven3
Use all the coresFor JUnit/TestNG tests
.
The CheaterThe LazyThe Brave
http://all-the-movies.cowblog.fr/images/arton1122.jpg
http://geekandpoke.typepad.com/geekandpoke/images/2008/04/24/turingtest.jpg
Delete redundant testsIt’s so simple, we don’t do it...
Even better, delete dead code
http://farm1.static.flickr.com/58/191393602_3d9b643ab0_z.jpg
To delete yet other useless tests
Work in a sandbox
In-memory database: H2
Behaves more like MySql than Hsqldb
The network is too slow
It’s Not only SQL
If going with NoSQL, take a server thatcan run in-process
eg. Voldemort
In-memory SMTP ServerEthereal
Everything local and in-memory
Apache VFS (Virtual File System)Spring Resource...
Files
As a bonus, tests will run smoother
.
The CheaterThe LazyThe Brave
http://all-the-movies.cowblog.fr/images/arton1122.jpg
Don’t test business rules in integration testsUnit tests is often a better place
http://upload.wikimedia.org/wikipedia/commons/b/bd/Contortionist_Ravi_standing.jpg
Don’t test business rules in integration testsUnit tests is often a better place
Functional test(on a web page)
10s
Unit test0.01s
Take the longer integration testBreak it in one faster integration test
and a lot of small unit tests
http://farm2.static.flickr.com/1168/3166709586_96f9a3fd95.jpg
Or mock the slowest layerseg. functional test with Spring and Mockito
Or mock the slowest layerseg. functional test with Spring and Mockito
Mocks are not just for unit tests
Don’t test through the browserSelenium is often overkill
Photo: http://www.flickr.com/photos/zoutedrop/2317065892/
«But my application is complex!»
«My users want complex features,
My users want Ajax»
«I need to test browser compatibility!»
Really ?
http://i.zdnet.com/blogs/complexity-and-false-hope.jpg
Complexity has a costThat you pay each time a test runs
http://thehongkongfixereng.files.wordpress.com/2008/07/couteau-suisse.jpg
Test through the browser the strict minimalUse javascript unit tests for the rest
http://farm2.static.flickr.com/1168/3166709586_96f9a3fd95.jpg
I tend to be old schoolAnd write server-side code most of the time
http://www.celebridiot.com/wp-content/uploads/2009/06/rick_astley_death_hoax.jpg
One more thing...
Simplify and optimize your code
Tests will run faster
.
Thank youQ/A
David Gageot
CTO algodeal.com The Crowd SourcedQuant Hedge Fund
@dgageotjavabien.net
Who am I?