48
Тестирование. Скорость. Александр Балашов / Evrone

Скоростное тестирование Rails / Александр Балашов (Evrone)

  • Upload
    ontico

  • View
    854

  • Download
    2

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Скоростное тестирование Rails / Александр Балашов (Evrone)

Тестирование. Скорость.

Александр Балашов / Evrone

Page 2: Скоростное тестирование Rails / Александр Балашов (Evrone)

Загрузка приложения

1

Page 3: Скоростное тестирование Rails / Александр Балашов (Evrone)
Page 4: Скоростное тестирование Rails / Александр Балашов (Evrone)
Page 5: Скоростное тестирование Rails / Александр Балашов (Evrone)
Page 6: Скоростное тестирование Rails / Александр Балашов (Evrone)

(при реальном количестве гемов)

Page 7: Скоростное тестирование Rails / Александр Балашов (Evrone)

Группы в Gemfile

=> 3с

group :testgroup :developmentgroup :production

Page 8: Скоростное тестирование Rails / Александр Балашов (Evrone)

:development

•hirb

•wirble

• bullet

•migration_opener

• letter_opener

• capistrano

• quiet_assets

• capistrano-nc

• localeapp

• dev_log_in

Page 9: Скоростное тестирование Rails / Александр Балашов (Evrone)

:test

• fakeweb

• timecop

• database_cleaner

• launchy

• zonebie

Page 10: Скоростное тестирование Rails / Александр Балашов (Evrone)

:production

•newrelic_rpm

Page 11: Скоростное тестирование Rails / Александр Балашов (Evrone)

Lazy require

=> 3с

gem 'savon', require: falserequire 'savon'

gem ‘paper_trail’, require: false

gem 'whenever', require: false

Page 12: Скоростное тестирование Rails / Александр Балашов (Evrone)

Почистить Gemfile

Page 13: Скоростное тестирование Rails / Александр Балашов (Evrone)

Редко используемые

# gem ‘debugger’# gem ‘ruby-prof’

Page 14: Скоростное тестирование Rails / Александр Балашов (Evrone)

Время выполнения

2

Page 15: Скоростное тестирование Rails / Александр Балашов (Evrone)

Finished in 15 minutes 12.9 seconds1589 examples, 0 failures, 0 pending

Page 16: Скоростное тестирование Rails / Александр Балашов (Evrone)
Page 17: Скоростное тестирование Rails / Александр Балашов (Evrone)

Статистика FactoryGirl

USER — 1m 36create: 3425

Page 18: Скоростное тестирование Rails / Александр Балашов (Evrone)

• до 2 мин на создание одной фабрики

• несколько тысяч вызовов каждой• 7 фабрик с временем минута и более

Page 19: Скоростное тестирование Rails / Александр Балашов (Evrone)

Время FactoryGirl

50%

Page 20: Скоростное тестирование Rails / Александр Балашов (Evrone)

FactoryGirl.create(:user)

Когда реально нужно учитывать состояние БД

Page 21: Скоростное тестирование Rails / Александр Балашов (Evrone)

FactoryGirl.build(:user)

Реально создаёт объекты в БД

Page 22: Скоростное тестирование Rails / Александр Балашов (Evrone)

User.new

•Простые валидации•Методы не связанные с БД

Page 23: Скоростное тестирование Rails / Александр Балашов (Evrone)

stub_model(User)

•Быстро работает•Независимость тестов•Подходит для spec/services/*

•Подходит для spec/mailers/*

Page 24: Скоростное тестирование Rails / Александр Балашов (Evrone)

FactoryGirl Seeds

Page 25: Скоростное тестирование Rails / Александр Балашов (Evrone)

Вложенные фабрики

=> 2мин

rating < comment < post < user < city

Page 26: Скоростное тестирование Rails / Александр Балашов (Evrone)

factory :keyword do project { seed(:project) } user { project.user }

Page 27: Скоростное тестирование Rails / Александр Балашов (Evrone)

Стандартные фабрики

comment = create(:comment)

Page 28: Скоростное тестирование Rails / Александр Балашов (Evrone)

Finished in 10 minutes 42.38 seconds1556 examples, 0 failures, 0 pending

Page 29: Скоростное тестирование Rails / Александр Балашов (Evrone)

(10 * 60 + 42) / (15 * 60 + 13) =

2x

Page 30: Скоростное тестирование Rails / Александр Балашов (Evrone)

Запуск тестов

3

Page 31: Скоростное тестирование Rails / Александр Балашов (Evrone)

Spork

Page 32: Скоростное тестирование Rails / Александр Балашов (Evrone)

Spin

spin servespin push spec/models/user_spec.rb:12

Page 33: Скоростное тестирование Rails / Александр Балашов (Evrone)

Zeus

zeus startzeus test spec/models/user_spec.rb:12

Page 34: Скоростное тестирование Rails / Александр Балашов (Evrone)

Spring

spring rspec spec/models/user_spec.rb:12

Page 35: Скоростное тестирование Rails / Александр Балашов (Evrone)

alias rg='spring rails g'alias rs='spring rails s'alias rc='spring rails c'

Page 36: Скоростное тестирование Rails / Александр Балашов (Evrone)

rails/commands

rails console test

> test "models/user"

Page 37: Скоростное тестирование Rails / Александр Балашов (Evrone)

rspec-console

rspec spec/models/user_spec.rb:13

Page 38: Скоростное тестирование Rails / Александр Балашов (Evrone)

Приёмы в спеках

4

Page 39: Скоростное тестирование Rails / Александр Балашов (Evrone)

valid? вместо save

Page 40: Скоростное тестирование Rails / Александр Балашов (Evrone)

много it при объёмном before

Page 41: Скоростное тестирование Rails / Александр Балашов (Evrone)

slow: true

(требует CI-сервера)

# .rspec--tag ~slow --tag ~stable

Page 42: Скоростное тестирование Rails / Александр Балашов (Evrone)

stable: true

(требует CI-сервера)

Page 43: Скоростное тестирование Rails / Александр Балашов (Evrone)

Rails.logger.level = Logger::WARN

Page 44: Скоростное тестирование Rails / Александр Балашов (Evrone)

Devise.stretches = 1

Page 45: Скоростное тестирование Rails / Александр Балашов (Evrone)

Top 10 slowest examples

# .rspec-p

Page 46: Скоростное тестирование Rails / Александр Балашов (Evrone)

Повсеместный User

user = create(:user)

Page 47: Скоростное тестирование Rails / Александр Балашов (Evrone)

Finished in 2 minutes 38.91 seconds893 examples, 0 failures, 0 pending

Page 48: Скоростное тестирование Rails / Александр Балашов (Evrone)

(15 * 60 + 13) / (2 * 60 + 38) =

6x