Evergreen build

65
Evergreen Build Dima Kovalenko

description

Presentation given at XP Days Ukraine December 2011

Transcript of Evergreen build

Page 1: Evergreen build

Evergreen BuildDima Kovalenko

Page 2: Evergreen build

About me

Likes cheese

@dimacus

www.agilesoftwaretesting.com

Page 3: Evergreen build

Where I worked

Page 4: Evergreen build

Where I work

www.groupon.ru

Page 5: Evergreen build

Why am I here

Page 6: Evergreen build

Why am I here

Page 7: Evergreen build

Why am I here

Page 8: Evergreen build

Why am I here

Green build

Auto merge

Auto revert

Page 9: Evergreen build

Why have automated tests?

Expensive

Page 10: Evergreen build

Expensive

Page 11: Evergreen build

Why have automated tests?

Expensive

A lot of work

Page 12: Evergreen build

Why have automated tests?

Expensive

A lot of work

Always breaking

Page 13: Evergreen build

Always breaking

Page 14: Evergreen build

Why have automated tests?

Expensive

A lot of work

Always breaking

Cannot make money from them

Page 15: Evergreen build

Advantages of green build

A healthy way of life

Page 16: Evergreen build
Page 17: Evergreen build

Advantages of green build

A healthy way of life

Confidence in the code base

Page 18: Evergreen build

Advantages of green build

A healthy way of life

Confidence in the code base

Release new features faster

Page 19: Evergreen build

Advantages of green build

EASY TO SEE WHEN THINGS GO WRONG!!

Page 20: Evergreen build
Page 21: Evergreen build

Quick Overview

Test Driven Development (TDD)

Continuos Integration (CI)

Trunk Based Development (TBD)

Continuos Deployment

Page 22: Evergreen build

Continuos Deployment

http://bit.ly/OxJv

Page 23: Evergreen build

“YES!”

1 Developer on the team is not enough

Manager says “we have to” is not enough

Majority of the team needs to agree to improve

Page 24: Evergreen build

Let’s make the build green

Speed

Always running

Accurate

Readable

Reject broken build

Page 25: Evergreen build

Speed

10 mins or less

Parallel Tests

Split Build

Ramdisk

Headless Browser

Page 26: Evergreen build

Parallel Tests

Most modern computers can run more then 1 test at the time

Many tools

parallel_tests (github)

Page 27: Evergreen build

Simple Parallel

test_groups = ["group 1", "group 2", "group 3"]Parallel.map(test_groups) do |parallel_build| run_test parallel_buildend

Page 28: Evergreen build

Our Tests

Cucumber: 300

Selenium: 170

Rspec: 14,110

Page 29: Evergreen build

Cucumber: 8 Parallel

RSpec: 21 Parallel

Selenium: 10 Parallel

Page 30: Evergreen build

Use more computers

Run each group, on a different computer in parallel (Double parallel)

Split into smaller groups if computers are slow

Page 31: Evergreen build
Page 32: Evergreen build

Jenkins Conductor

Page 33: Evergreen build
Page 34: Evergreen build

Jenkins Conductor

http://bit.ly/tF8E5c

Page 35: Evergreen build

Google’s Idea

Run the tests that only apply to current module

If test fail, they fail super fast

Always run the whole suite right after

http://bit.ly/jUBirG

Page 36: Evergreen build
Page 37: Evergreen build
Page 38: Evergreen build

RAMdisk

Faster then Hard Disk

Faster then SSD (Wikipedia)

Page 39: Evergreen build
Page 40: Evergreen build

Headless Browser

Webrat

Mechanize

Firefox

Capybara-Webkit

Page 41: Evergreen build
Page 42: Evergreen build

Capybara-Webkit

http://bit.ly/o0tHp1

Biggest boost if only testing Javascript

Database prevented us from using it

Page 43: Evergreen build

Reliability

Flaky tests

Test dependencies

Test pollution

Page 44: Evergreen build

Flaky Test

Worse then no test at all

Make you lose confidence in build

Most noticeable on Selenium

Run multiple times in row to debug

Page 45: Evergreen build

Selenium Tips

Use element IDs to click on

Check element exists before clicking

Wait for AJAX to load

Page 46: Evergreen build

Test the test

for i in {1..20}; do run_test; done

Page 47: Evergreen build

Accurate

Test fails when it should

Test passes when it should

Test actually tests something

Page 48: Evergreen build

Readable

Cucumber

Rspec

Keep them clean

Page 49: Evergreen build

Reject broken build

Groupon setup

Master

Release

Any-Branch

Page 50: Evergreen build

Any-Branch

Test

Merge/Rebase

Page 51: Evergreen build

Test

New Branch

Has to start with test/.....

Can choose to run only a single item

Page 52: Evergreen build
Page 53: Evergreen build
Page 54: Evergreen build
Page 55: Evergreen build
Page 56: Evergreen build
Page 57: Evergreen build

Merge/Rebase

Starts with merge/... or rebase/...

If tests fail, ignore

If tests pass, merge into master

Page 58: Evergreen build
Page 59: Evergreen build
Page 60: Evergreen build
Page 61: Evergreen build
Page 62: Evergreen build
Page 63: Evergreen build
Page 64: Evergreen build
Page 65: Evergreen build

Questions?