rocket fuelled cucumbers
play

Rocket Fuelled Cucumbers Joseph Wilk Dealing with an Outbreak of - PowerPoint PPT Presentation

Rocket Fuelled Cucumbers Joseph Wilk Dealing with an Outbreak of Cucumbers Joseph Wilk No Cucumbers where harmed in the making of this presentation. Just mildly shaken up Scenario : Happy Railsconf attendees Given you have a vague idea what


  1. Rocket Fuelled Cucumbers Joseph Wilk

  2. Dealing with an Outbreak of Cucumbers Joseph Wilk

  3. No Cucumbers where harmed in the making of this presentation. Just mildly shaken up

  4. Scenario : Happy Railsconf attendees Given you have a vague idea what Cucumber is When Joseph completes his presentation Then you should understand the scaling choices And you should feel better prepared to face them

  5. Cucumber Feature: Filling Cucumbers with • BDD framework rocket fuel • Plaintext Scenario: Rocket fuel Given I have trained monkeys • Promotes When I click the launch button communication Then the monkeys should not die Given /^I have trained monkeys$/ do @test_pilots << Monkeys.new end

  6. Cucumber provides the venue Your code makes it slow Shame on you

  7. What are Acceptance Tests? • Customer -facing • Cut through the whole stack • Examples of how the system is intended to be used

  8. You made me Cuke

  9. 1 minute ~ build

  10. Local builds 1 minute ~ build

  11. Local builds Autotest 1 minute ~ build

  12. Local builds Autotest Growl 1 minute ~ build

  13. Don’t Panic

  14. Slow testing problems Running all the Cukes takes too long! Development is slowed down by the time to run focused Cukes

  15. Types of Feedback + Speed Development - Confidence Speed Test Build - Confidence +

  16. Happiness is a 10 min build time

  17. Slow builds are the enemy of continuous integration

  18. D evelopment F eedback Its too slow to run the cukes. Just push the code and run away

  19. Reuse - Spork $ spork cucumber $ cucumber --drb require 'rubygems' require 'spork' Spork.prefork do puts "I'm loading all the heavy stuff..." end Spork.each_run do puts "I'm loading the stuff just for this run..." # Cucumber hooks must go here end git://github.com/timcharper/spork.git

  20. Slow services • Search Before('@solr') do • Solr Solr.boot unless Solr.running? • Sphinx end • Databases • Mongo Feature: Searching • Redis @solr • Mysql Scenario: Indexed search • Given ... Message Queues When ... • RabbitMQ Then ...

  21. Run Just Enough Tests Autotest # * Test files must be stored in test/ # * Test files names must start with test_ # * Test class names must start with Test # * Implementation files must be stored in lib/ # * Implementation files must match up with a # test file named # test_.*implementation.rb Cucover @analyzer = Rcov::CodeCoverageAnalyzer.new

  22. http://vimeo.com/12500864

  23. Slicing Features @media, @public Feature: Visitor views artist’s media @feed, @admin Feature: Logged in user views views their activity feed Tagging $ cucumber --tags @media Filenames $ cucumber visitor_* Subsystems $ cucumber features/admin/* Profiles $ cucumber --profile admin

  24. Just enough Database

  25. Just enough Database INSERT INTO `cities` (`name`) VALUES ('Test name') SELECT * FROM `cities` INSERT INTO `venues` ... WHERE (`cities`.`id` = 105838) SELECT * FROM Cache city data `venues` WHERE ... Cache venue data

  26. Test Build Feedback Commit code Have a 1 hour nap

  27. Options • Hardware • Intelligent test selection • Tighter focused tests • Divide and Conquer

  28. Testjour Songkick.com 254 Features, 1257 scenarios, 10807 steps 1 build server ~ 4 hours 5 build servers ~ 2 hours

  29. 120 sad minutes of my life...

  30. $ git clone git://github.com/brynary/testjour.git $ rake gem install $ testjour --help

  31. $ git clone git://github.com/brynary/testjour.git $ rake gem install $ testjour --help testjour help:

  32. Testjour Worker Slave Worker Redis Worker Work Master Slave Queue Worker Worker Slave Worker

  33. Testjour Worker rsync - code Slave Worker Redis Worker Work Master Slave Queue Worker Worker rsync - code Slave Worker

  34. Testjour Worker rsync - code Slave Worker Redis Worker Work Master Slave Queue Worker Worker rsync - code Slave Worker

  35. Testjour Worker rsync - code Slave Worker Redis Worker Work Master Slave Queue Worker Worker rsync - code Slave Worker

  36. Looking to the Cloud EC2, Rackspace Cloud, Windows Azure

  37. Looking to the Cloud EC2, Rackspace Cloud, Windows Azure 1 build server ~ 4 hours

  38. Looking to the Cloud EC2, Rackspace Cloud, Windows Azure 1 build server ~ 4 hours 20 build servers ~ 11:40 minutes

  39. Looking to the Cloud EC2, Rackspace Cloud, Windows Azure 1 build server ~ 4 hours 20 build servers ~ 11:40 minutes $2068.99 / $3000

  40. Ec2 Disc image AMI slim-sumo

  41. Ec2 Disc image AMI Launch slim-sumo

  42. Ec2 Disc image ec2 ec2 ec2 ec2 AMI node node node node Launch slim-sumo

  43. Ec2 Disc image ec2 ec2 ec2 ec2 AMI node node node node Launch Build ENV['EC2_URL'] = ec2_url require 'slim-sumo' Sumo.new.running.map{|ec2_node| ec2_node[:hostname]} slim-sumo

  44. http://vimeo.com/12467100

  45. require 'rubygems' require 'hydra' require 'hydra/tasks' Hydra::TestTask.new('hydra') do |t| t.add_files 'features/**/*.feature' t.verbose = false t.autosort = false end

  46. “Buy lots of hardware”

  47. “Buy lots of hardware” “more hardware please”

  48. “Buy lots of hardware” “more hardware please” “Just a little bit more hardware”

  49. “Buy lots of hardware” “more hardware please” “Just a little bit more hardware”

  50. Just run the tests that matter...

  51. Failure probability matters European Computing manufacturer

  52. Failure probability matters European Computing manufacturer Automated test suite ~ 18 hours

  53. Failure probability matters European Computing manufacturer Automated test suite ~ 18 hours Tests that were most ~ 2 hours likely to fail

  54. http://vimeo.com/12467122

  55. Tests that never fail

  56. Tests that never fail

  57. Tests which Tests that regularly fail never fail

  58. Tests which Tests that regularly fail never fail Daily Build

  59. Tests which Tests that regularly fail never fail Daily Build Nightly Build

  60. Tests which Tests that regularly fail never fail Daily Build Nightly Build $cucumber --tags ~@nightly $cucumber --tags @nightly

  61. Flickering Confidence

  62. Flickering Confidence FAIL

  63. Flickering Confidence FAIL FAIL

  64. Flickering Confidence FAIL FAIL PASS

  65. Flickering Confidence FAIL FAIL PASS Main Flicker @flicker

  66. Divide and conquer 7 7 7 1 hour 7 7 7 7 7 7 • Rails - Engines • Service Orientated Architecture

  67. Divide and Concuquer

  68. Divide and Concuquer

  69. Divide and Concuquer

  70. Divide and Concuquer

  71. Divide and Concuquer

  72. Divide and Concuquer Scenario : Related artists Given an artist “SYGC” And “M.Bison” is related to “SYGC” When I visit the artist Then I should see within Similar Artists a link to “M.Bison”

  73. Divide and conquer Rails Scenario : Related artists Given an artist “SYGC” And “M.Bison” is related to “SYGC” When I visit the artist Then I should see within Similar Artists a link to “M.Bison”

  74. Divide and conquer Related Rails Artists Service Scenario : Related artists Given an artist “SYGC” And “M.Bison” is related to “SYGC” When I visit the artist Then I should see within Similar Artists a link to “M.Bison”

  75. Divide and conquer related(artist) Related Rails Artists Service Scenario : Related artists Given an artist “SYGC” And “M.Bison” is related to “SYGC” When I visit the artist Then I should see within Similar Artists a link to “M.Bison”

  76. Divide and conquer related(artist) Related Rails Artists HTML Service Scenario : Related artists Given an artist “SYGC” And “M.Bison” is related to “SYGC” When I visit the artist Then I should see within Similar Artists a link to “M.Bison”

  77. Divide and conquer related(artist) Related Rails Artists HTML Service Scenario : Related artists Given an artist “SYGC” And “M.Bison” is related to “SYGC” When I visit the artist Then I should see within Similar Artists a link to “M.Bison”

  78. Divide and conquer related(artist) Related Rails Artists HTML Service unit test unit test Scenario : Related artists Given an artist “SYGC” And “M.Bison” is related to “SYGC” When I visit the artist Then I should see within Similar Artists a link to “M.Bison”

  79. Don’t use Acceptance tests http://jamesshore.com/Blog/Alternatives- to-Acceptance-Testing.html Heresy!

Recommend


More recommend