TeamCity 7 を CI サーバーとして使用しています。主に PHP で記述された Web アプリケーション プラグインをいくつかテストする必要があります。私は ANT と *Unit に精通していますが、解決すべき問題があります。プラグインを適切にテストするには、次のように考えます。
- テスト環境をクリーンアップします。
- プラグインをホストする Web アプリケーションのクリーン コピーをインストールします。
- プラグインをインストールします。
- プラグインを有効にします。
- テストを実行します。
明らかに、インストールされた環境でテストを実行するのは簡単です。ほとんどのテストは、プラグインのクラスのメソッドを直接呼び出すことによって起動されますが、最小限の設定であっても、フレームワークを構成して、ブートストラップ ファイルを呼び出して初期化を実行できるようにする必要があります。手動で準備した環境でテストを実行してみましたが、期待どおりに実行されました。
問題は、標準の Web アプリケーションのインストールと、最も重要な構成を自動化することです。基本的な手順は次のとおりです。
- フレームワークをどこかに解凍します (完了)。
- データベースを作成します (完了)。
- データベース ユーザーを作成し、適切な権限を割り当てます (完了)。
- Web アプリケーションのセットアップを実行します。
注意が必要なのは、すべての Web アプリケーションが Drupal のdrushなどのコマンド ライン インターフェイスを実装しているわけではないことです。そのため、インストールを完了するための 2 つの方法を考え出しました。
CURL による手動インストールのシミュレート
- インストール手順と記入が必要なフォームに注意してください。
- CURL を使用して各フォームにデータを POST します。
この方法を手動で試してみましたが、許容できる結果が得られました。Web アプリケーションが期待どおりにインストールされ、使用できるようになります。
ただし、これには、アプリケーションを実行できる Web サーバーが必要です。私の知る限り、TeamCity エージェントは独自のランダムな名前のディレクトリで動作し、それらに「インストールされた」ものには HTTP リクエスト経由でアクセスできません。
復元する
- Web アプリケーションを手動でプレインストールし、その基本設定を構成します。
- アプリケーションのディレクトリとそのデータベースのバックアップを圧縮します。
- テストを実行する前に、エージェントの作業ディレクトリでディレクトリを解凍します。
- バックアップしたデータベースを復元します。アプリケーションが「構成」されます。
この方法は少し「大雑把」ですが、Web サーバーを実行する必要はありません。Web アプリケーションは HTTP リクエストを処理できませんが、テストはプラグインのクラスに対して実行されるため、必ずしも問題ではありません。
ただし、この方法には 2 つの大きな欠点があります。
- Web アプリケーション (フック、イベント ハンドラーなど) との対話を伴うテストは実行できません。
- Web アプリケーションとそのデータベースは事前に構成されているため、それらのパラメーターは実行するたびに同じになります。したがって、たとえば 2 つの異なるプラグインをテストするために、2 つのエージェントを同時に実行することはできません。
上記の両方が私にとって最適ではないように見えるため、より良い解決策があるかどうか疑問に思っています。
私は TeamCity を使用していますが、すべてを ANT で実行しているため、CI サーバー自体は大した問題ではないことに注意してください。したがって、別の CI Serverm に関連するものであっても、どんな提案でも大歓迎です (私は Hudson、CruiseControl、および BuildMaster を知っており、概念を簡単に適応させることができます)。ありがとう。