2017-07-03 12 views
0

私は付属のデータベースを持つ大規模なプロジェクトのためのDB構造のスキーマの制御のためのSSDTにオーバー移行しています。このプロジェクトでは、さまざまな状態の脆弱性の中ですでに何百もの統合テストが行​​われています。これらの多くは、「既知のデータ」と呼んで、統合テストを実行するために使用します。テストでは、このデータが正常に動作するために必要なデータに依存しています。SSDTプロジェクトや、既知のデータを管理する統合テスト

以前は、機能ブランチでテストするために統合テストデータベースの1:1のコピーを作成しましたが、サーバーに膨らみが加わるので、このプロセスについては珍しくありません。

SSDTを使用すると、この「既知のデータ」をSSDTプロジェクト、または事後にコピーできるプロセスに組み込む方法がありますか?私は既にシードデータをシステムにロードする配備後スクリプトを持っているので(タイプなど)、そこにすべての既知のデータを置くことができますが、これは潜在的に管理するために余分なSQLファイル数十になる可能性があります。

複雑さと既知のデータ量のために、アプリケーションをDBの上に置いて挿入することは実用的ではありません。

私はbacpacオプションを検討していましたが、これを行う前に、過去に既知のデータを持つ機能ブランチの統合テストを他の方法で管理していたかどうかを確認したいと考えました。

答えて

1

あなたが取ることができるのアプローチのカップルがあります。

  1. 使用したバックアップ/スナップショット
  2. 統合テスト/個別の.sqlproj/dacpacのテストデータ
  3. セットアップデータは、あなたの一環として、テスト

1.バックアップ/スナップショット

既知の状態のデータベースを取得してから、バックアップまたはスナップショットを使用できます。私はあなたの拠点を常に最新のものに保つ必要があるので、これをすばらしいファンではありません。

別々.sqlproj/dacpac 2.統合テスト/テストデータを

これは、私は通常私のためのユニットテスト(統合テストのために何をするのかで、そのアプリの言語で、通常ですデータベースを呼び出す)。

私のソリューションでは、メインプロジェクトと同じデータベース参照を持つ別の.sqlprojがあります。これに、テストシードデータ用の統合テストとPost-Deploy.sqlを入れます。

複数のファイルを使用している場合は、「:R」の輸入ものと、利用AN含める:DOを参照されている公開するときに起こるように、メインプロジェクトからポスト展開dacpacsを含めるために、インポート「R」を展開前/展開後のスクリプトを実行しないでください。

あなたはテストプロジェクトおよび/ P展開する前には、このように参照を使用していない場合:あなたのテストの一環としてIncludeCompositeObject = Trueの

3.セットアップデータを

これがあれば難しくなるかもしれませんあなたはすでに大きなスイートを持っていますが、通常、各テストのセットアップの一環として、そのテストに合った状態でデータを取得するようアドバイスします。

この方法では、それは別の順序など、私はこのためBACPACさんを見ていない

でテストを実行しているから、任意の脆さを停止し、それは同様にそれに対処するための面白い方法かもしれません。

+1

これをしばらく調べると、実際に#3が正しい方法です。最初はすべてのテストをやり直すためにヒットしなければなりませんが、長期間に渡って作業時間を節約すると、既知のデータセットを維持する必要がなくなり、コードを適用することが適切です。 – CBerg

1

私が正しく理解していた場合、あなたは統合テストを実行するために、データベース間のデータのすべてをコピーします。

それが正しい場合、次のことができます。

  1. は、あなたのテーブルを埋めるために別のスキーマ内のストアドプロシージャを作成します。たとえば、dbo.MyTableはseed.usp_MyTableによってシードされます。
  2. 別のデータベースにストアドプロシージャを作成して、テーブルを作成します。これもまた、インテリジェントな命名規則を使用して行います。

両方のオプションの場合、マスターストアドプロシージャを使用してすべてのシードプロシージャを実行できます。両方の

利点は次のとおり

  • すべてのストアドプロシージャが捕捉さ テストデータの履歴を確実に、ソース制御されます。
  • なお、各テーブルに一致する名前を持つストアドプロシージャを有することになるようにプログラムシードデータカバレッジ を識別することは非常に簡単です。
  • 配備の一部としてシードプロセスを開始するのは非常に簡単です。マスターシードプロシージャを実行するための配備後スクリプトまたはSQLタスクを含めるだけです。
  • 種データ手順は、列またはデータ型が変更されたときにソースドリフトをチェックするために追加の回帰テスト として使用することができます。

各アプローチの長所と短所があります

  1. 全て種の手順は、参照 テーブルと同じデータベースの一部です。これにより、 外部参照が不要なため、SSDTプロジェクトが簡略化されます。
  2. 異なるシードデータは、異なる 環境で利用できます。データテーブルプロジェクトへの外部参照は ですが、 環境ごとに異なるシードプロジェクトを作成することができます。
1

BULK INSERTの

私がこれまでに見つかったポストスクリプトで事前にデータファイルから「BULK INSERTの」を使用することできたテスト用の静的なデータを取得するための最速の方法。主な問題は、BULK INSERTに正確なファイルパスを提供する必要があることでした。ただし、公開変数を使用することができます。このソリューションは、データを取得するための最速の方法であり、INSERT/MERGEステートメントよりもはるかに優れたパフォーマンスを発揮します。そこにはあるので、多くのデータは、その後、/ INSERTスクリプトがうまく動作し、ポストにMERGE場合

INSERT/

をMERGEません。これらのステートメントの生成に役立つストアドプロシージャは既に実装されています。あなたはそれを確認することができますon github。それは、本当に実際の問題に関連し、私は強くテストのためtSQLt frameworkを使用するようにアドバイスされていない

tSQLt。それは統合ではなく単体テストですが、適切な使い方で事前に入力されたデータは必要なく、どのデータベースでも動作します。

関連する問題