1

NUnit と Selenium を使用したテスト方法があります。これは、本番サーバー上にある Web サイトでブラウザーを開き、ユーザーを登録して、登録が成功したことを確認します。

(理想的には、システム テストは本番環境ではなく別のテスト サーバーで実行する必要があることはわかっていますが、ここでは本番システムが機能するかどうかをテストしたいと考えています!)

問題は、このテストの結果としてデータベースの変更をロールバックする方法ですか? たとえば、状態を実行する前後のデータベースの状態は同じである必要があります。

3つの可能なオプションを考えましたが、どれも実用的ではありません:

1) テストを開始する前 (セットアップ) とテストを実行した後 (ティアダウン) に、実際のテーブルから削除する SQL クエリを記述します。これが私の現在のアプローチですが、このアプローチの問題は、実行するシステム テストごとにどのテーブルが関係しているかを正確に知る必要があり、テストが複数のテーブルに影響を与える可能性があるため、これはすぐに非常に複雑になる可能性があることです。

2) トランザクション コードの記述 コードの変更は、記述された単体テストではなく Web サイトによって行われるため、これはオプションではありません。

3) 各テストの開始前に既存のデータベース (SQL Server 2008 R2) のスナップショットを取得し、テストの終了後にスナップショットを元のスナップショットに復元します。ステージング環境でのみテストを実行できれば、このアイデアは良いと思いますが、問題は、テストを本番環境で実行する必要があり、完全に 5 分ほどかかる可能性があることです。その 5 分間に行われた変更は失われます。

この問題を解決するには、どのようなアプローチが最善の選択肢であるかを教えてください。4番目のオプションがあるかもしれませんか?

ありがとう、

4

3 に答える 3

5

オプション 4 実稼働サーバーでテストを行うことは決してありません。これは災害のレシピです (これが恐ろしくうまくいかない可能性については、インターネット上の何千もの面白い (あなたが主人公でない場合) の話を参照してください)。正しいことは次のとおりです。テスト サーバーと運用サーバーを同じ方法で構成します。

于 2012-03-16T10:34:22.060 に答える
0

フィスオプションがあります。ウェブサイトがユーザー「WeAreTestingOutSite」の登録を受け取ると、実際にユーザーをデータベースに追加すること以外はすべて実行されます。

正直なところ、既に述べたように、ボットを実行してユーザーを登録し、サイトが機能していること (または運用可能であること) を確認するよりも、運用サイトがまだ稼働しているかどうかをテストするためのより良い方法があります。

于 2012-03-16T11:12:12.183 に答える
-1

4 番目のオプションを使用することをお勧めします: ユーザーを削除できる新機能を導入します。おそらくユーザー自身ではなく、システム管理者 (バックオフィス ユーザー) に対してです。そうすれば、SQLスクリプトをあまり気にせずに、ユーザーを登録して後で削除できるかどうかをテストできます。

于 2012-03-16T10:34:39.237 に答える