tests for every branch using circleci and sauce labs to continuously test cs curriculum at code.org

97
Tests for Every Branch Using CircleCI & Sauce Labs to Continuously Test CS Curriculum at Code.org @bcjordan Brian Jordan, software engineer at Code.org

Upload: sauce-labs

Post on 09-Jan-2017

189 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

Tests for Every Branch Using CircleCI & Sauce Labs to

Continuously Test CS Curriculum at Code.org

@bcjordanBrian Jordan, software engineer at Code.org

Page 2: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

Code.org

Page 3: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

non-profit

Page 4: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

expanding participation in CS

Page 5: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

Hour of Code

Page 6: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org
Page 7: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

full curricula, district partnerships,

professional development, policy change

Page 8: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

K-12 CS Curriculum

Page 9: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

43,000 K-12 teachers trained

Page 10: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

courses: 400k teachers 12mm students

Page 11: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org
Page 12: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

how did Code.org start automated testing?

Page 13: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

development in 2013-2014

Page 14: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

why test? what is Code.org's testing context?

Page 15: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

the context

Page 16: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

the context

Page 17: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

the context

Page 18: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

the context

Page 19: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

the context

RTL LTR

Page 20: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

the context

Page 21: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

the context

Page 22: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

so how do we test all that?

Page 23: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

how we started Selenium testing

Page 24: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

how our tests are organized and run

selenium-webdriver cucumber

Page 25: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org
Page 26: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org
Page 27: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

takeaways

Page 28: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

Build a library of steps

Page 29: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

Build a library of test levels

Page 30: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

Build a library of annotations

@no_mobile@no_ie9

@skip

@db_access@as_student

@eyes

Page 31: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

who writes tests?

Page 32: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

who/what runs tests?

Page 33: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

2015: one pipeline

Page 34: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

2016: every commit!

Page 35: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

what challenges did we end up facing?

Page 36: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

challenge:multiple browsers

Page 37: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

solution:selenium-webdriver

Sauce Labs

Page 38: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org
Page 39: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org
Page 40: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

challenge:

testing new changes

Page 41: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

locally:chromedriver Sauce Connect

Page 42: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

challenge:

big buckets of changes

Page 43: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

pull request tests in

Page 44: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

pull request tests incircle.yml

github.com/code-dot-org/code-dot-org

Page 45: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

tips and tricks

github.com/code-dot-org/code-dot-org

Page 46: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

tips and tricks

github.com/code-dot-org/code-dot-org

Page 47: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

tipsadding more [commit tags]

Page 48: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

tips

use Sauce Connect for Circle <=> Sauce Labs

Page 49: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

tips

use Sauce Connect for Circle <=> Sauce Labs

Page 50: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

tips

use Debug via SSH and Manual Sessions for debugging

Page 51: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

tipsdebugging failures—APIs to the rescue!

Page 52: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

tipsdebugging failures—APIs to the rescue!

Page 53: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

challenge:

visual, responsive changes

Page 54: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

hackathon solution?

Page 55: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

not easy...

Page 56: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

actual thing!

Page 57: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

using eyes

Page 58: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org
Page 59: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org
Page 60: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org
Page 61: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

what do tests look like when running?

Page 62: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

Speed Run!

Page 63: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

(not) wasting time

Page 64: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

speeding up test runs

Page 65: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

2014: 60-90 min of tests

Page 66: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

parallelizationat browser level

Page 67: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

2015: 60-90 min of browser tests

to 20-30 min

Page 68: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

parallelizationby containers

Page 69: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

parallelizationby containers

Page 70: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

justifying tests

Page 71: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

the bug collection

Page 72: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

missing button

Page 73: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

button height change

Page 74: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

extra margin

Page 75: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

overflow: hidden added

Page 76: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

duplicate button

Page 77: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

stray pixel

Page 78: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

Firefox getBBox()

Page 79: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

Chrome 50 (deprecated SVGElement.offsetWidth)

Page 80: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

my favorite bug ever

Page 81: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org
Page 82: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org
Page 83: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org
Page 84: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org
Page 85: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

who investigates failures?

Page 86: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

dev of the day

Page 87: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

dev of the day😭

Page 88: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

dev of the day+

Page 89: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

what's next?

Page 90: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

further flakiness investigations

(less flakiness: more parallelization with less pain)

💪

Page 91: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

Applitools Eyes test results as GitHub PR comments

Page 92: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

takeaways

Page 93: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

start small

Page 94: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

everybody tests

Page 95: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

periodically invest in speed-ups

Page 96: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

In memory of Laurel Fan

Thanks to the Code.org team who spread the burden of f leshing out, monitoring and improving our test infrastructure, especially Laurel Fan, Brendan Reville, and Brad Buchanan.

Thanks to the kind folks at Sauce Labs, CircleCI and Applitools who helped us get set up, and to Dave Haeffner @tourdedave for sharing his advice on testing.

Page 97: Tests for Every Branch Using CircleCI and Sauce Labs to Continuously Test CS Curriculum at Code.org

code.org/help

github.com/code-dot-org

Thanks!

@bcjordanBrian Jordan, software engineer at Code.org

Q&A