LoginSignup
3
2

More than 5 years have passed since last update.

Railsアプリケーションのテスト高速化 (Solr編)

Last updated at Posted at 2016-07-11

Railsアプリケーションのテスト高速化 (Oracle編) の続編です。

Rails アプリケーションのテストを高速化する技法として parallel_tests を導入した複数プロセスによる並列実行を取り挙げます。

現代 Rails アプリケーション開発においては RDBMS と組み合わせて、目的に応じた様々なミドルウェアがもちいられることが多いと思います。ここでは全文検索エンジンの Apache Solr に対するテストの並列実行を取り挙げます。

Rails アプリケーションから Solr を操作するライブラリとしては Sunspot を取り扱います。
なお、前提となる「parallel_tests のインストール」については前述の Oracle 編をご参照ください。

接続先の Apache Solr を並列テスト実行できる準備をする

Solr には単一サーバーで複数の異なるインデックスを保持する領域を持つことができる multi core という機能を備えており、そちらを利用します。
Solr インストールディレクトリの solr.xml にある <core> 要素を並列実行するプロセス分用意します。

<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="false">
  <cores ...>
    <core name="default"     instanceDir="." dataDir="default/data"/>
    <core name="development" instanceDir="." dataDir="development/data"/>
    <core name="test"        instanceDir="." dataDir="test/data"/>
    <core name="test0"       instanceDir="." dataDir="test/data0"/>
    <core name="test1"       instanceDir="." dataDir="test/data1"/>
    <core name="test2"       instanceDir="." dataDir="test/data2"/>
    <core name="test3"       instanceDir="." dataDir="test/data3"/>
    ...
  </cores>
</solr>

Solr を起動している場合、 rake sunspot:solr:restart などで再起動をすることでテストの並列実行への対応が反映されます。

Solr に接続する Sunspot で並列でテストを実行するための設定を行う

次に config/sunspot.yml の path の末尾に並列プロセスを割り振るための ENV['TEST_ENV_NUMBER'] を追加します。

test:
  solr:
    hostname: localhost
    port: 8983
    user: foobarbaz
    pass: foobarbaz
    path: /solr/test<%= ENV['TEST_ENV_NUMBER'].to_i %>

また、環境変数 ENV['SOLR_URL'] を用いて、spec/spec_helper.rb などで以下のような Solr のリセットを行っている場合は、その SOLR_URL に対しても ENV['TEST_ENV_NUMBER'] を追加します。

config.after do
  ENV['SOLR_URL'] = "http://foobarbaz:foobarbaz@localhost:8983/solr/test#{ENV['TEST_ENV_NUMBER'].to_i}"

  Sunspot::Rails.reset
  Sunspot.session = Sunspot::Rails.build_session
  Sunspot.remove_all!
end

このように Solr の Multi core 機能を利用することで、Solr を使ったテストの並列実行が出来るようになります。

3
2
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
3
2