Slide 1

Slide 1 text

I AM ALTERING THE DEAL (PRAY I DON’T ALTER IT FURTHER) Brittany Martin parisRB 2020 Brittany Martin @BrittJMartin

Slide 2

Slide 2 text

Brittany Martin Lead Web Developer @ Pittsburgh Cultural Trust Brittany Martin @BrittJMartin

Slide 3

Slide 3 text

Host 5 B Y 5 R U B Y O N R A I L S P O D C A S T Brittany Martin @BrittJMartin

Slide 4

Slide 4 text

Norma Skates L I T T L E S T E E L D E R B Y G I R L S Brittany Martin @BrittJMartin

Slide 5

Slide 5 text

THE DEAL Brittany Martin @BrittJMartin

Slide 6

Slide 6 text

3rd Party Dependencies C R E D I T : M e d i a c l i p Brittany Martin @BrittJMartin

Slide 7

Slide 7 text

Do they always behave? C R E D I T : T H E F O U N D Brittany Martin @BrittJMartin

Slide 8

Slide 8 text

C R E D I T : H i C l i p a r t S T R AT E G Y Brittany Martin @BrittJMartin

Slide 9

Slide 9 text

Avoid Catastrophe! Brittany Martin @BrittJMartin

Slide 10

Slide 10 text

Strong Customer Authentication C R E D I T : P Y M N T S . C O M Brittany Martin @BrittJMartin

Slide 11

Slide 11 text

Payments Intent C R E D I T : M O L p a y Brittany Martin @BrittJMartin

Slide 12

Slide 12 text

I N S TAG R A M C R E D I T : S e a r c h E n g i n e J o u r n a l Brittany Martin @BrittJMartin

Slide 13

Slide 13 text

Graph API C R E D I T : S a n i t y Brittany Martin @BrittJMartin

Slide 14

Slide 14 text

Brittany Martin @BrittJMartin

Slide 15

Slide 15 text

Brittany Martin @BrittJMartin

Slide 16

Slide 16 text

Brittany Martin @BrittJMartin

Slide 17

Slide 17 text

Rollback Hell C R E D I T : D e p l o y B o t Brittany Martin @BrittJMartin

Slide 18

Slide 18 text

C R E D I T : S t a r W a r s Brittany Martin @BrittJMartin

Slide 19

Slide 19 text

C R E D I T : A t l a s s i a n Brittany Martin @BrittJMartin

Slide 20

Slide 20 text

AutomateTesting C R E D I T : C h a r u d e a l Brittany Martin @BrittJMartin

Slide 21

Slide 21 text

Beauty in Testing Brittany Martin @BrittJMartin

Slide 22

Slide 22 text

Performance C R E D I T : A b d u l R a h m a n Brittany Martin @BrittJMartin

Slide 23

Slide 23 text

P E R F T E S T Brittany Martin @BrittJMartin

Slide 24

Slide 24 text

LOAD TESTING Brittany Martin @BrittJMartin C R E D I T : P i x a b a y

Slide 25

Slide 25 text

Perform. C R E D I T : P i x a b a y Brittany Martin @BrittJMartin

Slide 26

Slide 26 text

Ruby Community C R E D I T : J o n n y L e w Brittany Martin @BrittJMartin

Slide 27

Slide 27 text

Benchmark VCR Scientist Brittany Martin @BrittJMartin

Slide 28

Slide 28 text

C R E D I T : G i t h u b , P i x a b a y Branch by Abstraction Brittany Martin @BrittJMartin

Slide 29

Slide 29 text

Scientist G ITHU B C R E D I T : P i x a b a y Brittany Martin @BrittJMartin

Slide 30

Slide 30 text

C R E D I T : G i t h u b Brittany Martin @BrittJMartin

Slide 31

Slide 31 text

require "scientist" class MyWidget def allows?(user) experiment = Scientist::Default.new "widget- permissions" experiment.use { model.check_user? (user).valid? } # old way experiment.try { user.can?(:read, model) } # new way experiment.run end end C R E D I T : G i t h u b Brittany Martin @BrittJMartin

Slide 32

Slide 32 text

VCR C R E D I T : B B C Brittany Martin @BrittJMartin

Slide 33

Slide 33 text

C R E D I T : T e e P u b l i c Brittany Martin @BrittJMartin

Slide 34

Slide 34 text

require 'rubygems' require 'test/unit' require 'vcr' VCR.configure do |config| config.cassette_library_dir = "fixtures/vcr_cassettes" config.hook_into :webmock end class VCRTest < Test::Unit::TestCase def test_example_dot_com VCR.use_cassette("synopsis") do response = Net::HTTP.get_response(URI('brittanymartin.dev")) assert end end end Brittany Martin @BrittJMartin

Slide 35

Slide 35 text

B E N C H M A R K C R E D I T : S p r o u t S o c i a l Brittany Martin @BrittJMartin

Slide 36

Slide 36 text

SOAP vs.Rest Brittany Martin @BrittJMartin Benchmark.bmbm(100) do |x| x.report("SOAP") { n.times do Webservices::Requests::GetNewSessionKeyRequest.new({:ip => '0.0.0.0'}).invoke.session_key end } x.report("REST") { n.times do Rest.new.create_session('0.0.0.0')['SessionKey'] end} end APIs called 100x each. Benchmark::Tms:0x00007ff17de18270 @label="SOAP", @real=3.547331999987364, @cstime=0.0, @cutime=0.0, @stime=0.09988699999999984, @utime=1.6087319999999998, @total=1.7086189999999997 Benchmark::Tms:0x00007ff17f596f50 @label="REST", @real=26.420482000001357, @cstime=0.0, @cutime=0.0, @stime=0.17270999999999992, @utime=1.5042220000000004, @total=1.6769320000000003 SOAP real-time = 3.547331999987364 REST real-time = 26.420482000001357 SOAP is 8x faster.

Slide 37

Slide 37 text

Brittany Martin @BrittJMartin

Slide 38

Slide 38 text

C R E D I T : C o l l i s Brittany Martin @BrittJMartin

Slide 39

Slide 39 text

Silver Linings. C R E D I T : 4 D H u m a n B e i n g Brittany Martin @BrittJMartin

Slide 40

Slide 40 text

C R E D I T : N Y T i m e s Brittany Martin @BrittJMartin

Slide 41

Slide 41 text

B R E A K U P C R E D I T : V e r a A r s i c Brittany Martin @BrittJMartin

Slide 42

Slide 42 text

Be Strong A V O I D N E G A T I V I T Y Brittany Martin @BrittJMartin

Slide 43

Slide 43 text

C R E D I T : T e s T e a c h Brittany Martin @BrittJMartin

Slide 44

Slide 44 text

brittanymartin.dev 5by5.tv/rubyonrails Please lunch with me! Brittany Martin @BrittJMartin