CukeUp! 2012: Michael Nacos on Just enough infrastructure for product development with cucumber
Upcoming SlideShare
Loading in...5

CukeUp! 2012: Michael Nacos on Just enough infrastructure for product development with cucumber






Total Views
Views on SlideShare
Embed Views



3 Embeds 145 142
http://smash 2
http://smash2 1



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

CukeUp! 2012: Michael Nacos on Just enough infrastructure for product development with cucumber CukeUp! 2012: Michael Nacos on Just enough infrastructure for product development with cucumber Presentation Transcript

  • Product development with cucumber with just enough infrastructure Michael Nacos
  • Introwhat to expect from this talk● integration tests=important for a tech startup● cucumber ecosystem is ideal for our stack and our product requirements● cucumber + git + chef = heart● duck test/typing referencesdont expect:● the definitive cucumber style guide● plug-and-play solutions
  • Introcucumber as part of a whole and too many others...
  • leemailleemail for peoplebookmarklet
  • leemailwhy● to let people share their email fearlessly● to shift unsubscribe power back to people● to encourage ethical behaviour from vendors● to help vendors safeguard their reputation and customer data its about connecting, in a way that makes everyone happy
  • leemailleemail for businesses● do you collect email addresses?● are you good?● do you want to shout it?we help you establishand secure therelationship againstleaks and bad PR
  • cukes over timewhat do the cukes look like cukes are part of the source tree
  • cukes over timestories, branches
  • cukes over time Cukes or else!Monday Tuesday Wednesday Thursday Friday
  • stack requirementsnetbooksif it can: ● run cukes ● connect to a vpn ● git pull/push ... its a dev machine OR editors: ● 2 vi users ● 1 emacs ● 1 notepad++
  • stack requirementsemail is different (esp. for leemail)● mail servers need dns records, you cannot send to test@● there is an excellent mail gem, but no smtp server gem afaik● gems like mailtrap exist but our smtp servers do more than just accept emails● our daemons feed off rabbitmq queues, they shouldnt have to be changed for tests● ideally, wed have a lightweight smtp server which supports rules and delivers to rabbit
  • stack requirementsconfiguration is part of the product# setup postfix%w{ mailbox_commands sender_canonicalpassword restricted_destinations sender_relayhosts}.each do |cfg| template "/etc/postfix/#{cfg}" do source "postfix/#{cfg}.erb" owner "root" group "root" mode cfg == password ? 0640 : 0644 notifies :restart, resources(:service => "postfix") endend Serversgit pull Dev env# ok, you need to satisfy an erlang dependency manually once
  • stack requirementsrails environments (taking advnatage of) good for interactive tests on your local machine, no email infrastructure, run mailtrapdevelopmenttest for automated tests, minimum viable test environment for email testing availableproduction for interactive tests on a server, chef dependency and configuration management a given
  • what we testvaluewe want to know:● existing functionality has not been broken● new functionality is correct● before deploying to a serverwithout:● expensive equipment● maintaining dev-specific environments● building internet replicas locally
  • what we testRAILS_ENV=testif it speaks SMTP and it can follow some rulesand deliver messages to a RabbitMQ queue... its a leemail mailservthen the cukes can focus on things like:● are email headers re-written properly?● do daemons deliver only to on connections?etc.
  • how we testextending our Worldin local_env.rb: require ... World(EmailHelpers)in email_helpers.rb: module EmailHelpers # called before each scenario def self.extended(base) end end # setting up email environment at cucumber startup EmailHelpers.setup_test_email_environment # tearing down email environment at cucumber exit at_exit do EmailHelpers.tear_down_test_email_environment end
  • how we testpostfix_stub (filesystem mbox) emails ruby mailrubynet/smtp SMTP leemails ruby amqp (RabbitMQ)in email_helpers.rb:def get_messages_from_mbox(mbox_path) # parsing mbox format raw_messages = .+n/) # returning a list of mail messages { |r| Mail.read_from_string(r) }end
  • examplesleemail reply
  • examplesbandit
  • tipsi18nmakes your cukes less brittleyou can write:Then I should see flash message "devise.sessions.signed_in"
  • tipsjavascriptgem capybara-webkit # requires apt-get install libqt4-devin env.rb: # use webkit driver in @javascript scenaria Capybara.javascript_driver = :webkit # setting the test server port to a known value Capybara.server_port =AppConfig[test_server_port]then add @javascript tag to specific cukes
  • challengesiframes (well, leemail iframes) find iframe nav in iframe js in iframe nav in parent
  • Product development with cucumber @mnacos @leemailme Thank You