Créateur d’applications mobiles
TECH TALK
GRATUITS & OUVERTS AU PUBLIC
Tech talk sous forme de courtes formations le mercredi de 17h à 18h ! N’hésitez pas à nous contacter afin de participer aux prochaines sessions au sein de nos locaux !
TECH TALK #9 - 11.01.2017
OLIVIER TABONE CO-FONDATEUR DIRECTEUR
WRITING FAST TESTS WITH DJANGO
• Slow • Hard to read (ugly) • Non conforming to quality standards • Not refactored • Non reliable
3
TECH TALK #9 - 11.01.2017
TEST IS CODE and quality maters OLIVIER TABONE CO-FONDATEUR DIRECTEUR
WRITING FAST TESTS WITH DJANGO
• Slow • Hard to read (ugly) • Non conforming to quality standards • Not refactored • Non reliable
4
TECH TALK #9 - 11.01.2017
TEST IS CODE and quality maters OLIVIER TABONE CO-FONDATEUR DIRECTEUR
WRITING FAST TESTS WITH DJANGO
• Slow • Hard to read (ugly) • Non conforming to quality standards • Not refactored • Non reliable
5
TECH TALK #9 - 11.01.2017
WRITING FAST TESTS WITH DJANGO
TECH TALK #9 - 11.01.2017
OLIVIER TABONE CO-FONDATEUR DIRECTEUR
WRITING FAST TESTS WITH DJANGO
YOUR TEST SUITE* SHOULD RUN UNDER 20 SECONDS AND STILL TARGET > 90 % COVERAGE
* flaky tests excluded 7
TECH TALK #9 - 11.01.2017
SO WHAT ? OLIVIER TABONE CO-FONDATEUR DIRECTEUR
Fast test-code-test-fix-debug cycle Not trading code coverage for integration time Tests are run before each commit
WRITING FAST TESTS WITH DJANGO
Broken states are less likely to be pushed
8
TECH TALK #9 - 11.01.2017
RECIPE #1 OLIVIER TABONE CO-FONDATEUR DIRECTEUR
1,48 s WRITING FAST TESTS WITH DJANGO
0,74 s mvmc.accounts
default
md5
9
Y S A E K C I P
TECH TALK #9 - 11.01.2017
RECIPE #2 Do not hit DB unless required
14 ms
OLIVIER TABONE CO-FONDATEUR DIRECTEUR
12 ms
12 ms
WRITING FAST TESTS WITH DJANGO
1 ms
0,7 ms AutoWash model
In Memory
Create
Get Or Create
10
Insert
Bulk Create (100)
TECH TALK #9 - 11.01.2017
RECIPE #2 Do not hit DB unless required OLIVIER TABONE CO-FONDATEUR DIRECTEUR
WRITING FAST TESTS WITH DJANGO
Create models without committing them : def any_autowash(…, save=False): instance = AutoWash(…) if save: instance.save() return instance 11
TECH TALK #9 - 11.01.2017
RECIPE #2 Do not hit DB unless required OLIVIER TABONE CO-FONDATEUR DIRECTEUR
WRITING FAST TESTS WITH DJANGO
SimpleTestCase will ensure you don’t access the db when running tests. Improve code coverage with unit tests and not integration tests
12
TECH TALK #9 - 11.01.2017
RECIPE #2 Do not hit DB unless required OLIVIER TABONE CO-FONDATEUR DIRECTEUR
Use bulk-api for both test and production code, Limit number of SQL statements :
WRITING FAST TESTS WITH DJANGO
objects.create() =~ objects.bulk_insert([100 objects] 13
TECH TALK #9 - 11.01.2017
MYTH #1 OLIVIER TABONE CO-FONDATEUR DIRECTEUR
WRITING FAST TESTS WITH DJANGO
DEBUG = False TEMPLATE_DEBUG = False Does not change performance at all.
14
TECH TALK #9 - 11.01.2017
RECIPE #3 keep db between test runs OLIVIER TABONE CO-FONDATEUR DIRECTEUR
WRITING FAST TESTS WITH DJANGO
migrations are expensive ci will always start with an empty db 11 s 5s mvmc
default
15
keepdb
Y S EA K C I P
TECH TALK #9 - 11.01.2017
RECIPE #4 OLIVIER TABONE CO-FONDATEUR DIRECTEUR
Use In Memory SQLITE DB Backend
T ’ N DO
unless you require Postgres specific features WRITING FAST TESTS WITH DJANGO
unfortunately we usually require : postgis jsonb data type array data type 16
TECH TALK #9 - 11.01.2017
MYTH #2
Tune postgres OLIVIER TABONE CO-FONDATEUR DIRECTEUR
no measurable improvement WRITING FAST TESTS WITH DJANGO
17
TECH TALK #9 - 11.01.2017
RECIPE #5 OLIVIER TABONE CO-FONDATEUR DIRECTEUR
Mock expensive / long to respond subsystems
DO L U F E R CA LY
such as paiement systems WRITING FAST TESTS WITH DJANGO
simple interactive model of the subsytem flag functional tests as flaky, so they still run and can detect out of sync mocks 18
TECH TALK #9 - 11.01.2017
OLIVIER TABONE CO-FONDATEUR DIRECTEUR
WRITING FAST TESTS WITH DJANGO
YOUR TEST SUITE* SHOULD RUN UNDER 20 SECONDS AND STILL TARGET > 90 % COVERAGE
* flaky tests excluded 19
TECH TALK ANIMÉ PAR
OLIVIER TABONE CO-FONDATEUR DIRECTEUR
[email protected] 06 83 01 05 76
MERCI DE VOTRE PARTICIPATION !
Créateur d’applications mobiles