Slide 1

Slide 1 text

test-queue

Slide 2

Slide 2 text

makes your TESTS

Slide 3

Slide 3 text

RUN FAST

Slide 4

Slide 4 text

tmm1/test-queue

Slide 5

Slide 5 text

HOW?

Slide 6

Slide 6 text

DISTRIBUTE THE LOAD

Slide 7

Slide 7 text

WITH CORES USE THEM IF YOU HAVE THEM

Slide 8

Slide 8 text

BRING YOUR OWN

Slide 9

Slide 9 text

USE SOMEONE ELSE'S

Slide 10

Slide 10 text

THERE ARE SO MANY CLOUDS OUT THERE

Slide 11

Slide 11 text

WHICH CLOUD?

Slide 12

Slide 12 text

PICK ONE I AM NOT HERE TO SELL YOU ANYTHING

Slide 13

Slide 13 text

BUT NO, REALLY, HOW?

Slide 14

Slide 14 text

1. TAKE A SOCKET

Slide 15

Slide 15 text

2. FORK SOME WORKERS

Slide 16

Slide 16 text

3. SMARTLY DISTRIBUTE TESTS

Slide 17

Slide 17 text

4. SPEND LESS TIME WAITING ON CI

Slide 18

Slide 18 text

5. SPEND MORE TIME SHIPPING CODE

Slide 19

Slide 19 text

GETTING STARTED

Slide 20

Slide 20 text

INSTALL # Gemfile group :test do gem "test-queue" end

Slide 21

Slide 21 text

ANATOMY OF A SCRIPT/TEST-QUEUE #!/usr/bin/env ruby $LOAD_PATH.unshift File.expand_path("./../../rspec", __FILE__) unless ENV["TEST_QUEUE_WORKERS"] abort "TEST_QUEUE_WORKERS must be set in env!" end require "test_helper" require "test_queue" require "test_queue/runner/rspec" class CustomTestRunner < TestQueue::Runner::RSpec end CustomTestRunner.new.execute

Slide 22

Slide 22 text

SETTING UP YOUR AFTER_FORK class RailsRSpecRunner < TestQueue::Runner::RSpec def after_fork(num) # ActiveRecord ActiveRecord::Base.configurations["test"]["database"] << num.to_s ActiveRecord::Base.establish_connection(:test) # Redis $redis.client.db = num $redis.client.reconnect end end

Slide 23

Slide 23 text

SETTING UP YOUR PREPARE class RailsRSpecRunner < TestQueue::Runner::RSpec def prepare(num) # grab a copy of your database schema num.times do |i| # load it into a clean copy of your test database end end end

Slide 24

Slide 24 text

DEMO

Slide 25

Slide 25 text

ADVANCED USAGE AT A HIGH LEVEL

Slide 26

Slide 26 text

REMOTE WORKERS

Slide 27

Slide 27 text

AN EXAMPLE # shared secret export TEST_QUEUE_RELAY_TOKEN=12345 # tell us what you're doing export TEST_QUEUE_VERBOSE=1 # create a master test-queue instance TEST_QUEUE_SOCKET=1.2.3.4:12345 bundle exec rspec-queue # on a server, far, far away... # create a worker that sends results back to the master TEST_QUEUE_RELAY=1.2.3.4:12345 bundle exec rspec-queue

Slide 28

Slide 28 text

COMBINE WITH YOUR CI SYSTEM

Slide 29

Slide 29 text

RUN YOUR TESTS FASTER

Slide 30

Slide 30 text

THANKS I AM @WFARR

Slide 31

Slide 31 text

GITHUB.COM/WFARR/SIX_MINUTE_BLOG !⚡ GITHUB.COM/TMM1/TEST-QUEUE