Gem parallel_tests để tăng tốc Rspec

Dự án càng ngày càng phát triển và dĩ nhiên UnitTests cũng sẽ phình to theo. Hôm nay mình sẽ giới thiệu các bạn gem parallel_tests để phân luồng test rspec trên ứng dụng Rails. Setup for Rails Installation Thêm gem vào gemfile gem 'parallel_tests', group: [:development, :test] bundle install Config # config/database.yml test: database:

Dự án càng ngày càng phát triển và dĩ nhiên UnitTests cũng sẽ phình to theo. Hôm nay mình sẽ giới thiệu các bạn gem parallel_tests để phân luồng test rspec trên ứng dụng Rails.

Setup for Rails

Installation

Thêm gem vào gemfile

gem 'parallel_tests', group: [:development, :test]
bundle install

Config

# config/database.yml
test:
  database: yourproject_test<%= ENV['TEST_ENV_NUMBER'] %>

ParallelTests sử dụng 1 database để tạo 1 test process

Process number 1 2 3
ENV[‘TEST_ENV_NUMBER’] ‘2’ ‘3’

Notice: Số process có thể sử dụng dựa trên số core trên CPU của bạn. Ví dụ CPU 2 core thì cần 2x2core = 4 processes

Tạo database:

rake parallel:create

Copy schema:

rake parallel:prepare

Migrate cho các database test:

rake parallel:migrate

Thiết lập môi trường from scratch phù hợp với CI:

rake parallel:setup

Drop tất cả database test:

rake parallel:drop

Using

Run

Các lệnh chạy:

rake parallel:test          # Test::Unit
rake parallel:spec          # RSpec
rake parallel:features      # Cucumber
rake parallel:features-spinach       # Spinach

rake parallel:test[1] --> force 1 CPU --> 86 seconds
rake parallel:test    --> got 2 CPUs? --> 47 seconds
rake parallel:test    --> got 4 CPUs? --> 26 seconds

Ngoài ra có thể sử dụng regex nếu có subfolder

rake parallel:test[^test/unit] # every test file in test/unit folder
rake parallel:test[user]  # run users_controller + user_helper + user tests
rake parallel:test['user|product']  # run user and product related tests
rake parallel:spec['spec/(?!features)'] # run RSpec tests except the tests in spec/features

Sample output:

2 processes for 210 specs, ~ 105 specs per process
... test output ...

843 examples, 0 failures, 1 pending

Took 29.925333 seconds

Run task với parallel:

RAILS_ENV=test parallel_test -e "rake my:custom:task"
# or
rake parallel:rake[my:custom:task]
# limited parallelism
rake parallel:rake[my:custom:task,2]

Even test group run-times

Các nhóm test thường không cân bằng và sẽ chạy trong những khoảng thời gian khác nhau, khiến mọi thứ phải chờ nhóm chậm nhất. Sử dụng các trình ghi nhật ký (loggers) để ghi lại thời gian chạy thử nghiệm và sau đó sử dụng thời gian chạy đã ghi để cân bằng các nhóm thử nghiệm đồng đều hơn.

Thêm vào .rspec_parallel (hoặc .rspec) :

--format progress
--format ParallelTests::RSpec::RuntimeLogger --out tmp/parallel_runtime_rspec.log

Loggers

Log lại các output mà không có các process khác nhau ghi đè lên nhau.
Thêm vào .rspec_parallel (hoặc .rspec) :

--format progress
--format ParallelTests::RSpec::SummaryLogger --out tmp/spec_summary.log

Ref: https://github.com/grosser/parallel_tests

Nguồn: viblo.asia

Bài viết liên quan

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=

Bài 1 – React Native DevOps các khái niệm và các cài đặt căn bản

Hướng dẫn setup jenkins agent để bắt đầu build mobile bằng jenkins cho devloper an t

Chuyển đổi từ monolith sang microservices qua ví dụ

1. Why microservices? Microservices là kiến trúc hệ thống phần mềm hướng dịch vụ,