O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
Optimizing build time
Performance running tests
Jônatas Paganini @jonatasdp
test suite
RSpec
12K
assertions
~25’
Build time / 3 machines
>100’
in localhost
MONOLITHIC
APP
NOW
~13’
Build time / 4 machines
?
Little Changes on
factories
girl ?factory
Avoid callbacks
Callbacks can be lazy and
unuseful running all the time
Model#skip_callback
To avoid run the the hook each factory
Coverage?
after(:create)
To run it in a specific factory
Profiling Associations
Specializing
factories
Specialized factories
Associations
Results
Use lazy Associations
Associations naturally invokes their own factories.
Avoid factory: for associations
Associations naturally invokes their own factories.
association &block
association &block
quick wins
Use build_stubbed
Instead of create
hack sign_in
Avoid touch database each login
ConfigureRSpec
sign_inbuild_stubbed
Use stub to avoid
inflateassociations
build Instead of create
CI Improvements
We use CircleCI
● Split specs by context
● Hack postgres.conf
● Postgresql on Memory
Splitspecs by
Context
CircleCi divide tests
by time NOT
context
SplitSpecs by
DIRECTORY
postgres.conf
fsync = ’off’
full_page_writes = ’off’
checkpoint_segments = ’100’
checkpoint_timeout = ’45 min’
data_directory = ’/tmp/postgres-on-memory’
dir=/tmp/postgresql-on-memory
dir=/tmp/postgresql-on-memory
mkdir $dir
dir=/tmp/postgresql-on-memory
mkdir $dir
mount -o size=200M,mode=0666 tmpfs $dir
dir=/tmp/postgresql-on-memory
mkdir $dir
mount -o size=200M,mode=0666 tmpfs $dir
chown postgres:postgres $dir
dir=/tmp/postgresql-on-memory
mkdir $dir
mount -o size=200M,mode=0666 tmpfs $dir
chown postgres:postgres $dir
sudo su - po...
NEXT LEVEL
<what> run <when>
hardcore scenarios
Split Specs
Nightly Build
if [ -n "${RUN_NIGHTLY_BUILD}" ];
rspec spec/features --tag "~smoke"
if [ -n "${RUN_NIGHTLY_BUILD}" ];
rspec spec/features --tag "~smoke"
if [ -z "${RUN_NIGHTLY_BUILD}" ];
rspec spec/features...
http://shipit.resultadosdigitais.com.br/blog
● /ruby-e-rspec-melhorando-a-legibilidade-de-seus-testes/
● /rspec-performanc...
Conclusion
● Avoid touch database
● Avoid callbacks no sense
● Avoid things you don’t need
● Write specialized factories
●...
Thanks!
@jonatasdp
http://ideia.me
http://shipit.resultadosdigitais.com.br
Otimizando tempo de build: performance da suíte de testes
Otimizando tempo de build: performance da suíte de testes
Otimizando tempo de build: performance da suíte de testes
Otimizando tempo de build: performance da suíte de testes
Otimizando tempo de build: performance da suíte de testes
Próximos SlideShares
Carregando em…5
×

de

Otimizando tempo de build: performance da suíte de testes Slide 1 Otimizando tempo de build: performance da suíte de testes Slide 2 Otimizando tempo de build: performance da suíte de testes Slide 3 Otimizando tempo de build: performance da suíte de testes Slide 4 Otimizando tempo de build: performance da suíte de testes Slide 5 Otimizando tempo de build: performance da suíte de testes Slide 6 Otimizando tempo de build: performance da suíte de testes Slide 7 Otimizando tempo de build: performance da suíte de testes Slide 8 Otimizando tempo de build: performance da suíte de testes Slide 9 Otimizando tempo de build: performance da suíte de testes Slide 10 Otimizando tempo de build: performance da suíte de testes Slide 11 Otimizando tempo de build: performance da suíte de testes Slide 12 Otimizando tempo de build: performance da suíte de testes Slide 13 Otimizando tempo de build: performance da suíte de testes Slide 14 Otimizando tempo de build: performance da suíte de testes Slide 15 Otimizando tempo de build: performance da suíte de testes Slide 16 Otimizando tempo de build: performance da suíte de testes Slide 17 Otimizando tempo de build: performance da suíte de testes Slide 18 Otimizando tempo de build: performance da suíte de testes Slide 19 Otimizando tempo de build: performance da suíte de testes Slide 20 Otimizando tempo de build: performance da suíte de testes Slide 21 Otimizando tempo de build: performance da suíte de testes Slide 22 Otimizando tempo de build: performance da suíte de testes Slide 23 Otimizando tempo de build: performance da suíte de testes Slide 24 Otimizando tempo de build: performance da suíte de testes Slide 25 Otimizando tempo de build: performance da suíte de testes Slide 26 Otimizando tempo de build: performance da suíte de testes Slide 27 Otimizando tempo de build: performance da suíte de testes Slide 28 Otimizando tempo de build: performance da suíte de testes Slide 29 Otimizando tempo de build: performance da suíte de testes Slide 30 Otimizando tempo de build: performance da suíte de testes Slide 31 Otimizando tempo de build: performance da suíte de testes Slide 32 Otimizando tempo de build: performance da suíte de testes Slide 33 Otimizando tempo de build: performance da suíte de testes Slide 34 Otimizando tempo de build: performance da suíte de testes Slide 35 Otimizando tempo de build: performance da suíte de testes Slide 36 Otimizando tempo de build: performance da suíte de testes Slide 37 Otimizando tempo de build: performance da suíte de testes Slide 38 Otimizando tempo de build: performance da suíte de testes Slide 39 Otimizando tempo de build: performance da suíte de testes Slide 40 Otimizando tempo de build: performance da suíte de testes Slide 41 Otimizando tempo de build: performance da suíte de testes Slide 42 Otimizando tempo de build: performance da suíte de testes Slide 43 Otimizando tempo de build: performance da suíte de testes Slide 44 Otimizando tempo de build: performance da suíte de testes Slide 45 Otimizando tempo de build: performance da suíte de testes Slide 46 Otimizando tempo de build: performance da suíte de testes Slide 47 Otimizando tempo de build: performance da suíte de testes Slide 48 Otimizando tempo de build: performance da suíte de testes Slide 49 Otimizando tempo de build: performance da suíte de testes Slide 50 Otimizando tempo de build: performance da suíte de testes Slide 51 Otimizando tempo de build: performance da suíte de testes Slide 52 Otimizando tempo de build: performance da suíte de testes Slide 53 Otimizando tempo de build: performance da suíte de testes Slide 54 Otimizando tempo de build: performance da suíte de testes Slide 55 Otimizando tempo de build: performance da suíte de testes Slide 56 Otimizando tempo de build: performance da suíte de testes Slide 57 Otimizando tempo de build: performance da suíte de testes Slide 58
Próximos SlideShares
Apresentação sobre Rails - 2010
Avançar
Transfira para ler offline e ver em ecrã inteiro.

1 gostou

Compartilhar

Baixar para ler offline

Otimizando tempo de build: performance da suíte de testes

Baixar para ler offline

Melhorando a performance de testes em Ruby.

Nesta talk conto como baixamos de 25 min para 13min um build de 12 mil testes.

Otimizando tempo de build: performance da suíte de testes

  1. 1. Optimizing build time Performance running tests Jônatas Paganini @jonatasdp
  2. 2. test suite
  3. 3. RSpec
  4. 4. 12K assertions
  5. 5. ~25’ Build time / 3 machines
  6. 6. >100’ in localhost
  7. 7. MONOLITHIC APP
  8. 8. NOW
  9. 9. ~13’ Build time / 4 machines
  10. 10. ?
  11. 11. Little Changes on factories
  12. 12. girl ?factory
  13. 13. Avoid callbacks Callbacks can be lazy and unuseful running all the time
  14. 14. Model#skip_callback To avoid run the the hook each factory
  15. 15. Coverage?
  16. 16. after(:create) To run it in a specific factory
  17. 17. Profiling Associations
  18. 18. Specializing factories
  19. 19. Specialized factories
  20. 20. Associations Results
  21. 21. Use lazy Associations Associations naturally invokes their own factories.
  22. 22. Avoid factory: for associations Associations naturally invokes their own factories.
  23. 23. association &block
  24. 24. association &block
  25. 25. quick wins
  26. 26. Use build_stubbed Instead of create
  27. 27. hack sign_in Avoid touch database each login
  28. 28. ConfigureRSpec
  29. 29. sign_inbuild_stubbed
  30. 30. Use stub to avoid inflateassociations
  31. 31. build Instead of create
  32. 32. CI Improvements We use CircleCI ● Split specs by context ● Hack postgres.conf ● Postgresql on Memory
  33. 33. Splitspecs by Context
  34. 34. CircleCi divide tests by time NOT context
  35. 35. SplitSpecs by DIRECTORY
  36. 36. postgres.conf
  37. 37. fsync = ’off’
  38. 38. full_page_writes = ’off’
  39. 39. checkpoint_segments = ’100’ checkpoint_timeout = ’45 min’
  40. 40. data_directory = ’/tmp/postgres-on-memory’
  41. 41. dir=/tmp/postgresql-on-memory
  42. 42. dir=/tmp/postgresql-on-memory mkdir $dir
  43. 43. dir=/tmp/postgresql-on-memory mkdir $dir mount -o size=200M,mode=0666 tmpfs $dir
  44. 44. dir=/tmp/postgresql-on-memory mkdir $dir mount -o size=200M,mode=0666 tmpfs $dir chown postgres:postgres $dir
  45. 45. dir=/tmp/postgresql-on-memory mkdir $dir mount -o size=200M,mode=0666 tmpfs $dir chown postgres:postgres $dir sudo su - postgres -c '/usr/lib/postgresql/9.4/bin/initdb --encoding=UTF8 --pgdata=$dir
  46. 46. NEXT LEVEL <what> run <when>
  47. 47. hardcore scenarios Split Specs
  48. 48. Nightly Build
  49. 49. if [ -n "${RUN_NIGHTLY_BUILD}" ]; rspec spec/features --tag "~smoke"
  50. 50. if [ -n "${RUN_NIGHTLY_BUILD}" ]; rspec spec/features --tag "~smoke" if [ -z "${RUN_NIGHTLY_BUILD}" ]; rspec spec/features --tag "smoke"
  51. 51. http://shipit.resultadosdigitais.com.br/blog ● /ruby-e-rspec-melhorando-a-legibilidade-de-seus-testes/ ● /rspec-performance-tips/ ● /otimizando-testes-factory-girl-e-rspec/
  52. 52. Conclusion ● Avoid touch database ● Avoid callbacks no sense ● Avoid things you don’t need ● Write specialized factories ● Rate (classify) your test ● Benchmark all isolated steps It’s all about responsibilities
  53. 53. Thanks! @jonatasdp http://ideia.me http://shipit.resultadosdigitais.com.br
  • gregorynicholas

    Aug. 9, 2016

Melhorando a performance de testes em Ruby. Nesta talk conto como baixamos de 25 min para 13min um build de 12 mil testes.

Vistos

Vistos totais

642

No Slideshare

0

De incorporações

0

Número de incorporações

4

Ações

Baixados

23

Compartilhados

0

Comentários

0

Curtir

1

×