let's make this test suite run faster! softshake 2010

Post on 18-Oct-2014

1.801 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

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

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!»

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?

top related