2

Oracle(またはpostgres)データベースとアプリケーションサーバーを使用して統合テストを実行します。各テストを別のテストから分離するために、データベーススキーマは削除され、各テストの前に再作成されます。

ご覧のとおり、これは時間がかかるプロセスです。アプリケーションは100以上のテーブルを使用します。各テーブルから不要なデータを削除するカスタムSQLを作成することを考えています。データベースの状態を保存および復元するためのより良い方法はありますか?

DBUnitはこれを実行できるようですが、まだ試していません。)

単一のテストには以下が含まれます。

  • データベーススキーマを作成します。
  • アプリサーバーを起動します。
  • 複数のクライアントアプリケーションを起動します。
  • 実行して確認します。

私たちは5000の奇妙なテストを持っており、700時間かそこらかかります。(グリッド環境で実行し、一晩で終了します)

ほとんどのテストでは、最大10MBなどの小さなデータサイズを使用します。

4

6 に答える 6

4

Oracle のどのバージョン (エンタープライズ 10g+ または標準)? Enterprise を使用していると仮定すると、Flashback データベースを使用できます。ベースライン DB を構築します。それで

create a guaranteed restore point
run your test
capture results somewhere outside the database
flashback database to restore point
start over

始めるにはこれで十分です。追加の詳細が必要な場合はお知らせください。

于 2011-02-18T15:15:58.477 に答える
4

Oracle Flashback を使用すると、単純な SQL クエリを使用して、指定した時点でテーブルを復元できます。ドキュメントはこちらから入手できます。

Postgre に同様の機能があるかどうかはわかりません。

于 2011-02-18T10:57:45.427 に答える
2

Oracle の場合、次の pl/sql パッケージを使用できます: snapshot.sql

500 個のテーブルがあり、そのうち 30 個が各テスト後に復元され、平均で約 500 ミリ秒かかります。

使い方は非常に簡単です:

EXECUTE SNAPSHOT.TAKE_SNAPSHOT('snapshot name');
EXECUTE SNAPSHOT.RESTORE_SCHEMA('snapshot name');
于 2015-04-07T11:35:22.273 に答える
2

PostgreSQL の場合、すべてのテーブルを個別に再作成するよりも、テンプレート データベースを使用する方が速いと思います。

通常使用するものとは異なる名前 (my_template_db など) で、必要なすべてのテーブルを含む新しいデータベースを作成するだけです。そこにテストデータを入れることもできます。

テストを実行するときは、テストするデータベースをドロップします。次に、テンプレートを使用してテストを再作成します。

DROP DATABASE my_test_db;
テンプレート my_template_db を使用してデータベース my_test_db を作成します。

9.0 には、これを高速化するいくつかの最適化がありました。そのため、SQL を使用してすべてのテーブルを再作成するよりも、そのアプローチの方が高速である可能性があります。

于 2011-02-18T11:40:40.733 に答える
1

各テストが単一のトランザクションに適合する場合は、単純にロールバックできます。それはオプションですか?

于 2011-02-18T11:00:49.303 に答える
1

質問

  • どのような種類のデータベースについて話しているのですか?
  • マルチTサイズですか、それとも数Gですか?
  • どれくらいのデータが入っていますか?
  • 制約はどのように定義されますか?
  • これはどのくらいの速さで行う必要がありますか?
  • テストにはどのくらいの時間がかかりますか? (数日または数週間)
  • どのくらいのストレージを利用できますか?
  • テスト中にどのくらいの更新が行われますか?
  • どのバージョンのデータベースがありますか?

提案

  • 十分なストレージがあり、更新があまりない場合は、フラッシュバック データベースを試してください。
  • prod データベースのコピーでテストする場合は、クローン (およびもちろんデータ マスキング) を使用します (これは、prod バックアップの適切なテストでもあります)。
  • 貴重なテスト データを含む優れたテスト データベースがある場合は、バックアップ/復元を使用します。
  • フィジカル スタンバイ データベースで構成されたバージョン 11g データベースがある場合は、スナップショット データベースでテストを試みることができます。
于 2011-02-18T11:54:34.993 に答える