データベースとCIサーバー


8

私はCIサーバー(Hudson)を使用していますが、これは陽気にビルド、単体テストを実行、開発環境にデプロイしますが、統合テストを実行したいと思います。

統合テストはデータベースにヒットし、そのデータベースは問題のテストに関連するデータを含むように常に変更されます。しかし、これは問題を引き起こします-データベースが1つのテストのデータでスプラットされていないことを確認し、最初のテストセットが完了する前に、そのデータが2番目のプロジェクトによって上書きされることを確認するにはどうすればよいですか?

私は現在「希望」方法を使用していますが、現時点ではそれほどうまく機能していませんが、CIで設定されている統合テストの数が少ないという事実が主な原因です。

私が見ると、次のオプションがあります。

  • ローカルの(メモリ内の)テストデータベース
    インメモリのデータベースがOracleのトリガーやパッケージなどのすべての恐ろしさを処理できるかどうかはわかりませんが、テスト中に価値がないと感じるものはありません。
  • CIエグゼキューターローカルデータベース
    これをセットアップして最新の状態に保つには、かなりの作業が必要になりますが、オプションとしてはまともです(ほとんどの作業は、現在のCIデータベースを最新に保つために既に行われています)。
  • 単一の「統合テスト」エグゼキュータ
    実装するのが最も簡単なようですが、統合テストがかなり遅れることがあります。
  • データベース(またはテーブルのセット)のロック

私はいくつかの方法を逃したと確信しています(それらを追加してください)。CIサーバーでデータベースベースの統合テストをどのように実行しますか?どのような問題があり、どのような方法をお勧めしますか?(注:私はHudsonを使用していますが、CIサーバーの回答を受け入れて満足しています。詳細がそうでなくても、確実に移植可能なアイデアです)。

乾杯、
     MLK


1
このstackoverflowの質問はあなたに役立つかもしれません。
マイケルK

回答:


1

私は実際にこれを行ったことがないので、ただのアイデアですが、テスト対象のデータベーススキーマのDDLを取得するタスクを設定し、メモリまたは別のデータベースで再作成できます。Oracleではかなりシンプルなようです。その後、データベースが変更されるたびに、新しいデータベースを自動的に生成できます。

OracleにはTimesTenというインメモリデータベースがあるようです。一見の価値があるかもしれません。通常はハードストレージよりも高速なので、できる限りインメモリデータベースを使用することをお勧めします。


私は数年前にインメモリdbsを試しましたが、実際のDBを使用するよりもはるかに遅いことがわかりました(もう一度試してみて満足です)。実際のデータベースはスキーマとともに存在します(コンテンツはありません)。インメモリを開始し、テスト/テスト実行ごとにスキーマを作成する必要があります。TimeTenを試して、既存のデータベースのクローン作成とスキーマの更新システムにリンクできるかどうかを確認します。
mlk

たぶん、データベースへの参照を保持するシングルトンを作成し、各テストの後にテーブルをクリーンアップできますか?私の経験では、十分な大きさのデータセットを使用していないと思います。
マイケルK

これにApache Derbyを使用したことがあり、動作します。
Tim Williscroft、2011

1

データベースベースの統合テストを実行するには、データベースサーバーを立ち上げてCIボックスを操作し、CIインスタンスをホストします。ステージングとプロダクションがそれぞれ独自のデータベースサーバーを持っているようなものです。


同時に同じデータベースにアクセスする乗算テストプロジェクトをどのように処理しますか、またはエグゼキューターごとにデータベースを持っていますか?
mlk

2
誰もがSQLサーバーの用語で独自のデータベース(または必要に応じてデータベース)を取得しますが、それがOracleランドにどのように変換されるかはわかりません。
ワイアットバーネット、

これを正しく読んでいると仮定すると、各CI実行プログラムは独自のデータベースを取得しますか?各エグゼキューターのapp.configをどのように再構成しますか(データベースの構成はどのように行われますか)。
mlk

1
繰り返しますが、ここであなたの用語を理解しているかどうかはわかりませんが、CIでは、開発チームで使用するのと同じ規則を使用してボックスを設定しました。 SQLサーバーlocalhost \ SQLEXPRESSで「foo」という名前が付けられているため、機能します。
ワイアットバーネット

ああ、あなたはデータベースをローカルで実行するのですか、それともSQLEXPRESSはメモリ内データベースですか?ローカルの場合は、CIインスタンスごとに1つのエグゼキューターに制限されます。
mlk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.