2

アクセス方法「カーソルを自動的に移動しない」が Web テスト データ ソースに対してどのように機能するかを理解するのに苦労しています。そしてそこにあるドキュメントは網羅的とはほど遠いようです.

まず、リクエストが 1 つだけの単純な Web テストがあるとします。DS と呼ばれるデータ ソースと、5 行を含む StepList と呼ばれるテーブルを使用します。

テーブルのアクセス方法は [カーソルを自動的に移動しない] に設定されており、現在のテスト設定では Web テスト プロパティで [データ ソース行ごとに 1 回実行] が有効になっています。Web テストは負荷テストの一部ではありません。

これらの条件では、テストは行ごとに 5 回実行されるため、基本的にカーソルは自動的に移動します。これは意図したものですか?

さて、この投稿の主題である実際的な質問に移ります。

上記の StepList テーブルには、とりわけ、ID 列と StepId 列があります。問題の Web テストは実際には別の Web テストから呼び出され、テスト コンテキストで設定された StepId を持つテーブル行に対してのみ実行されるはずです。

Id  StepId
1   1
2   1
3   2
4   2
5   2

これを実現するために、ここのガイドラインに従い、次のような PreWebTest メソッドを使用して Web テスト プラグインを作成しました。

public override void PreWebTest(object sender, PreWebTestEventArgs e)
{
    string stepId = string.Empty;

    if (e.WebTest.Context.ContainsKey(ContextParameterName))
    {
        stepId = e.WebTest.Context[ContextParameterName].ToString();
    }

    while (e.WebTest.Context["DS.StepList.StepId"].ToString() != stepId)
    {
        e.WebTest.MoveDataTableCursor("DS", "StepList");
    }
}

上記のコードは、stepId の値が「2」の場合にのみ、サンプル テーブルで適切に機能するようです。"1" の場合、MoveDataTableCursor は WebTestEndOfDataException 例外をスローします: "AccessMethod Unique を持つデータ ソース テーブルにはデータの行がありません"。

例外をキャッチして Web テストを停止しようとしましたが、テストが終了しないように見えるため、これは機能しません。

4

1 に答える 1

2

最初の質問に答えるには、「カーソルを自動的に移動しない」設定は、負荷テスト内の実行にのみ適用されます。そのため、「データソース行ごとに1回実行」設定を使用しているWebテスト中にカーソルが自動的に移動します。 。もちろん、後者の設定はWebテストの実行にのみ適用されます。

WebTestEndOfDataExceptionが発生する理由は次のとおりです。

  1. Visual Studioテストエンジンによって「データソース行ごとに1回実行」を実装する方法には、5つのテストすべてに対してデータカーソルが1つしかないという事実が含まれます。つまり、カーソルの状態は5つのテストすべての間で記憶されます。
  2. テストを繰り返すたびに、データカーソルが自動的にインクリメントされます。
  3. プラグインは、この5つのテストのセット内でデータカーソルを進め、 5つのテストが完了する前に使用可能な行を必ず使い果たします。

テストを機能させる最も簡単な方法は、「データソース行ごとに1回実行」を使用する代わりに、反復回数を手動で設定することです。たとえば、データには有効な行が2つしかないため、反復を2に設定します。ただし、手動で行をカウントして値を変更する必要があるため、これも悪い解決策です。

次善の方法は、DS.StepList.StepIdの値をチェックし、目的の値と一致しない場合はWebTest.Stop()を実行するだけになるように、WebTestPluginを変更することです。このようにして、不要な反復はすぐに終了します。ただし、それでも時間を無駄にし、視覚的な混乱を追加します。

親テストを常に実行する必要があり、スキップする必要があるのは呼び出されたテストのみである場合は、DS.StepList.StepIdの値をstepIdコンテキストと照合する「文字列比較」条件付きルールで「WebTestの呼び出し」をラップします。したがって、StepIdが正しい場合にのみ子テストを呼び出します。

于 2012-05-09T05:44:39.720 に答える