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.
13. Buy a faster machine
Tests are cpu/memory bound
http://farm1.static.flickr.com/28/93569705_1c562b413a_z.jpg?zz=1
14. Be warned
Single threaded tests get slower over time
100
75
50
25
0
2007 2008 2009 2010
http://farm5.static.flickr.com/4096/4819945812_735744e0fc_z.jpg
15. Use all the cores
parallel build with maven3
mvn -T1 clean install : 5:05s
mvn -T4 clean install : 3:10s
26. Don’t test business rules in integration tests
Unit tests is often a better place
http://upload.wikimedia.org/wikipedia/commons/b/bd/
Contortionist_Ravi_standing.jpg
27. Don’t test business rules in integration tests
Unit tests is often a better place
Functional test
(on a web page)
10s
Unit test
0.01s
28. Take the longer integration test
Break it in one faster integration test
and a lot of small unit tests
http://farm2.static.flickr.com/1168/3166709586_96f9a3fd95.jpg
29. Or mock the slowest layers
eg. functional test with Spring and Mockito
30. Or mock the slowest layers
eg. functional test with Spring and Mockito
Mocks are
not just for
unit tests
31. Don’t test through the browser
Selenium is often overkill
«But my application is
complex!»
«My users want complex
features,
My users want Ajax»
«I need to test browser
compatibility!»
Photo: http://www.flickr.com/photos/zoutedrop/2317065892/
33. Complexity has a cost
That you pay each time a test runs
http://thehongkongfixereng.files.wordpress.com/2008/07/couteau-suisse.jpg
34. Test through the browser the strict minimal
Use javascript unit tests for the rest
http://farm2.static.flickr.com/1168/3166709586_96f9a3fd95.jpg
35. I tend to be old school
And write server-side code most of the time
http://www.celebridiot.com/wp-content/uploads/2009/06/
rick_astley_death_hoax.jpg