13.2. テストの実行

リグレッションテストはすでにインストールされ稼働中のサーバや、ビルドツリー内の一時的なインストレーションされたものに対して実行することができます。 さらに、テストの実行には、"parallel""sequential"モードがあります。 "sequential"(連続)モードでは、1つずつテストスクリプトを実行します。" parallel"(並行)モードでは複数のサーバープロセスを実行し、テストをグループ化して並行的に実行します。 "parallel"テストではプロセス間通信とロック機能が正常に作動しているかをテストします。 歴史的理由により、"sequential"テストは存在するインストレーションに対して行われ、"parallel"テストでは一時的なインストレーションされたものに対して行われます。 これらに技術的根拠はありません。

ビルドを行った後、リグレッションテストをインストールの前に行う場合は、

$ gmake check

最上位のディレクトリでこのように入力してください。 (または、src/test/regressディレクトリに移動して、そこで実行してください)。 これを実行したら、まずプラットフォームに依存した"期待される結果の(expected)"ファイルや、ユーザ定義のトリガ関数のサンプルなどの補助ファイルをいくつか作成し、それからテストドライバのスクリプトを実行します。 終了したら、以下のような表示がされるはずです。

======================
 All 77 tests passed.
======================

上記が表示されなければ、テストは失敗したことになります。 詳細はSection 13.3を参照してください。

Note: この方法では、一時的にサーバを起動させるため、rootユーザーでは動作しません(サーバはrootでは起動しません)。 しかし、rootでビルドを行ったとしても、すべてを最初からやり直す必要はありません。 リグレッションテストのディレクトリを他のユーザでも書き込める権限を与え、そのユーザになり、テストを再実行して下さい。 たとえば、以下のようにします。

root# chmod -R a+w src/test/regress
root# chmod -R a+w contrib/spi
root# su - joeuser
joeuser$ cd top-level build directory
joeuser$ gmake check

(この方法に関しての"セキュリティ問題"として、テストを実行している際に別のユーザがこのテストの結果を変更することが可能ということがあります。 ユーザ権限を与える際には十分に注意してください。)

また、インストール後にテストを実行することも可能です。

Tip: 並行リグレッションテストはユーザのユーザ ID を使用して相当数のプロセスを起動します。 現在、最大で 20 個の並行テストスクリプトが同時に実行されます。 その場合各テストスクリプトで、バックエンド、psql に加えて、通常は psql の親プロセスとなるシェルが起動されますので、合計 60 個のプロセスが実行されることになります。 ですので、使用するシステムでユーザ当たりのプロセス数に制限を加えている場合は、その上限が少なくとも 75 程度であることを確認して下さい。 さもないと、並行テストで規則性がないように思われる失敗が発生します。 この上限を変更できない場合は、src/test/regress/parallel_schedule を編集して、大きめの同時実行テストセットを扱いやすいグループに分割して下さい。

Tip: システムによっては、デフォルトのBourne互換シェル(/bin/sh)は多くの子プロセスを並行的に実行すると動作が不安定になることがあります。 これにより並行テストを失敗させるか、フリーズさせてしまう可能性があります。 このような場合、コマンドラインで別のBourne互換シェルを指定してください。 以下に例を示します。

$ gmake SHELL=/bin/ksh check

壊れていないシェルを使用できるのであれば、上で示したように並行テストのスケジュールを変更することもできます。

インストール(Chapter 1を参照)後にテストを実行するにはChapter 3で説明したように、データ領域を初期化し、サーバを起動させ、そして、以下を入力して下さい。

$ gmake installcheck

テストは、環境変数のPGHOSTPGPORTで指定がない限り、ローカルホストのサーバに接続し、デフォルトのポート番号を使用します。