vodqa_parallelizingcukes_amanking

42
Saturday, 26 Saturday, 26 th th March, 2011 March, 2011

Upload: vodqa

Post on 15-Nov-2014

736 views

Category:

Technology


0 download

DESCRIPTION

This was a full-length talk presented by Aman King in vodQA-3 : A QA Meet held in ThoughtWorks, Pune.

TRANSCRIPT

Page 1: VodQA_Parallelizingcukes_AmanKing

Saturday, 26Saturday, 26thth March, 2011 March, 2011

Page 2: VodQA_Parallelizingcukes_AmanKing

Reducing build timewhen patience is not a virtue

Aman KingApplication Developer

ThoughtWorks

Page 3: VodQA_Parallelizingcukes_AmanKing

Recognize these?

Page 4: VodQA_Parallelizingcukes_AmanKing

Rank these

Page 5: VodQA_Parallelizingcukes_AmanKing

Did you choose this?

1 32

Page 6: VodQA_Parallelizingcukes_AmanKing

Or did you choose this?

1 23

Page 7: VodQA_Parallelizingcukes_AmanKing

Patience is not always a virtue!

Page 8: VodQA_Parallelizingcukes_AmanKing

Fail fast!quick feedback

Page 9: VodQA_Parallelizingcukes_AmanKing

Rank these

High functional coverage

Short build time

Page 10: VodQA_Parallelizingcukes_AmanKing

Did you choose this?

①High functional coverage

②Short build time

Page 11: VodQA_Parallelizingcukes_AmanKing

Or did you choose this?

①Short build time

②High functional coverage

Page 12: VodQA_Parallelizingcukes_AmanKing

You can choose both!

①Short build time

①High functional coverage

Page 13: VodQA_Parallelizingcukes_AmanKing

But before we see how…

Page 14: VodQA_Parallelizingcukes_AmanKing

Project background

Page 15: VodQA_Parallelizingcukes_AmanKing

Content driven, community oriented

website

Page 16: VodQA_Parallelizingcukes_AmanKing

Ruby on Rails

Cucumber+

Capybara+

Selenium

Page 17: VodQA_Parallelizingcukes_AmanKing

4 : 1 ratio of Dev : QA

Everyone writes functional tests in a common automation

suite

Acceptance Test Driven Development (ATDD)

Page 18: VodQA_Parallelizingcukes_AmanKing

Our problems

Page 19: VodQA_Parallelizingcukes_AmanKing

Long build time~ 55 minutes

Page 20: VodQA_Parallelizingcukes_AmanKing

Non-deterministic failures

Page 21: VodQA_Parallelizingcukes_AmanKing

Manual reruns needed

Page 22: VodQA_Parallelizingcukes_AmanKing

Our solution:Parallelization

Page 23: VodQA_Parallelizingcukes_AmanKing

Basic idea

Page 24: VodQA_Parallelizingcukes_AmanKing

Reduced build time~ 5 minutes

Page 25: VodQA_Parallelizingcukes_AmanKing

Build time chart

Page 26: VodQA_Parallelizingcukes_AmanKing

What we did

Page 27: VodQA_Parallelizingcukes_AmanKing

Parallelization on a single multicore machine

used Ruby library parallel_tests

Page 28: VodQA_Parallelizingcukes_AmanKing

Report generation in parallelwrote custom report formatter

Page 29: VodQA_Parallelizingcukes_AmanKing

Isolating databaseseach process needs its own database

Page 30: VodQA_Parallelizingcukes_AmanKing

database.ymltest: &test adapter: mysql2 encoding: utf8 reconnect: false database: myapp_test<%= ENV['TEST_ENV_NUMBER'] %> pool: 5 username: root password:

Page 31: VodQA_Parallelizingcukes_AmanKing

Isolating external dependencies (Solr)

each process needs its own Solr instance

Page 32: VodQA_Parallelizingcukes_AmanKing

sunspot.ymltest: solr: hostname: localhost port: <%= 8982 - ENV['TEST_ENV_NUMBER'].to_i %> log_level: INFO #WARNING log_file: <%= File.join(::Rails.root, 'log', "solr_#{ENV['TEST_ENV_NUMBER'].to_i}.log") %> data_path: <%= File.join(::Rails.root, 'solr', 'data’, "#{ENV['TEST_ENV_NUMBER'].to_i}") %> pid_path: <%= File.join(::Rails.root, 'solr', 'pids', "#{ENV['TEST_ENV_NUMBER'].to_i}") %>

Page 33: VodQA_Parallelizingcukes_AmanKing

Handling multiple Firefox instances

and Selenium’s use of

shared ephemeral ports

Page 34: VodQA_Parallelizingcukes_AmanKing

Monitoring Memory and CPU usage

adjust number of parallel process accordingly

Page 35: VodQA_Parallelizingcukes_AmanKing

Auto rerunning failed testsnon-deterministic failures are likelier with

the CPU under stress

Page 36: VodQA_Parallelizingcukes_AmanKing

Beyond parallelization…

Page 37: VodQA_Parallelizingcukes_AmanKing

Stubbing external callsreduce dependency-related delays where

avoidable

Page 38: VodQA_Parallelizingcukes_AmanKing

Consolidating scenarioscombine similar test scenarios into single

runs instead of separate tests

Page 39: VodQA_Parallelizingcukes_AmanKing

Maintaining conventions when writing automated tests

avoid time-based wait statements, use test framework APIs that take lesser time, etc

Page 40: VodQA_Parallelizingcukes_AmanKing

Conclusion

Page 41: VodQA_Parallelizingcukes_AmanKing

Resourceshttp://cukes.info

http://rubygems.org/gems/capybara

http://seleniumhq.org/projects/remote-control

http://rubygems.org/gems/parallel_tests

http://selenium-grid.seleniumhq.org

http://test-load-balancer.github.com

http://github.com/bblimke/webmock

http://testing.thoughtworks.com

Page 42: VodQA_Parallelizingcukes_AmanKing

Thank you

[email protected]://www.wikyblog.com/AmanKing