LoginSignup
10
3

More than 1 year has passed since last update.

rspecの並列実行を導入してテスト高速化

Posted at

rspecの並列実行の設定をしてみた。

gem parallel_tests導入

  • Gemfileにgemを追加する
Gemfile
gem 'parallel_tests'
  • bundle install
$ bundle install

DB関連設定

  • parallel_testsを使った並列テストでは、CPUのコア数だけ並列するので、コア数分、テスト用のデータベースを用意する必要がある。

    • localの場合、macのcpuのコア数に依存
    • dockerの場合、dockerのcpuのコア数の設定に依存
  • config/database.ymlのデータベース名の末尾にTEST_ENV_NUMBERという変数追加する必要がある

database.yml
test:
  database: テスト用データベース名<%= ENV['TEST_ENV_NUMBER'] %>
  • テスト用DBのセットアップコマンド時に以下の権限が必要なため、入れてなければ入れる必要
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'テスト用DBユーザー名'@'%' WITH GRANT OPTION;

  • dockerの場合、docker-compose up時にprovisioningを走らせることができるので、そこで設定してしまう方が良さそう
provisioning/sql.d/setup.sql
CREATE USER 'テスト用DBユーザー名'@'%' IDENTIFIED BY 'パスワード';
GRANT ALL PRIVILEGES ON テスト用データベース名.* TO 'テスト用DBユーザー名'@'%';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'テスト用DBユーザー名'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
docker-compose.yml
mysql:
    image: mysql:5.7
    platform: linux/x86_64
    container_name: hoge-mysql
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - ./provisioning/sql.d:/docker-entrypoint-initdb.d ←ここで実行
      - mysql_data:/var/lib/mysql
    ports:
      - 3306:3306

※volumeにデータベースの古い設定データが残っていると実行されないので、volumeを消してからbuildする。docker-compose down --rmi all -v

  • テスト用DBのセットアップコマンド
# テスト用DBを並列化する分だけ作成する。CPUのコア数分だけ並列化される。
# DBのスキーマに変更があった場合はその度prepareしなおす必要
$ bundle exec rake parallel:create
$ bundle exec rake parallel:prepare

テスト実行

$ bundle exec rake parallel:spec

参考記事

10
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3