3

MSTest(LoadTests)とVisual Studio 2010を使用してパフォーマンステストを生成する必要があります。RESTfulサービスのテストを行い、メトリックを収集する必要があります。

http://hostname/get/2012121つのURL( IDのような安らかなもの)を要求する統合テストを作成しました。後で、ロードテストを作成し、統合テストを何千回も実行して、応答時間とサーバーメトリック(CPU負荷、メモリなど)を調査します。

次に、同様のシナリオを実行する必要がありますが、各テストでは、数千を含む特定のXMLから異なるIDを読み取る必要があります。アイデアは何もキャッシュされていません。

私がこれまでに試したこと/考えたことは何ですか?

  1. 「バブルソート」ソリューションは、それぞれが1つのIDを持つ何千ものテストを作成することです。現実的ではありません
  2. 次のアプローチは、xmlを読み取り、それを反復処理して要求を行う1つのテストを作成することです。このアプローチの問題は、実行に数分かかる大きなテストが終了することです。
  3. [ClassInitialize]を使用してXMLからすべてのIDをロードし、[ TestInitialiaze]を使用してテストの実行ごとにグローバル変数を変更することで回避策が考えられます。

最後のオプションが最適かどうかはわかりません。XMLから読み取ったさまざまなIDを使用してLoadTestsを実行できるようにするメカニズムはMSTestsにありますか?

4

2 に答える 2

2

私は自分の質問に答えるのは好きではありませんが、同じ問題を抱えている人々の将来の参考のためにこれをここに置きます。

他の3番目のオプションが間違っていた理由

3番目のオプションの問題は、IDのリストが1000である1000回の反復を伴うLoadTestで、LoadTestが1000回ではなく最初のIDで1000回実行され、それぞれが各IDで実行されていたことです。私はそれを証明するためにある種のnosqlプロファイラーを使用しました。

次のソリューションでは、Loadtestに1000回の反復があり、csvリストに1000個のIDがある場合、1000個のテストがそれぞれ1つのIDで実行されます。LoadTestにさらに多くの反復がある場合、たとえば2000の場合、LoadTest1001ではcsvリストの先頭から再開します。

私の解決策

注:このソリューションはcsvファイルを使用します。xml、Excel、SQLサーバーのテーブルなどの別の異なるデータソースを使用するように簡単に適合させることができます。

これを実現するための正しいオプションは、DataSource属性を使用してテストを作成することです。たとえば、テストで使用するIDを含むcsvファイルを作成します。私のcsvファイルの例:

ID
1003002-20121211120000
1004071-20121211120000

テストにDataContextを追加する必要があります。

private TestContext testContextInstance;
public TestContext TestContext
{
    get { return testContextInstance; }
    set { testContextInstance = value; }
}

最後に、テストは次のようになります。

    [TestMethod,DeploymentItem("DataOrigin\\list.csv"), DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\list.csv", "list#csv", DataAccessMethod.Sequential)]
    public void TestScenario_1_DATADRIVEN()
    {
        // PREPARATION
        string ID = TestContext.DataRow["ID"].ToString();
        string querystring = CreateQueryWithErrorDebug(ID);

        // EXECUTION
        string result = RunXCCQuery(querystring);

        // ASSERTS
        Assert.IsTrue(result.Length > 0);
        Assert.IsTrue(result.Contains(ID));
    }

DeploymentItem属性はcsvファイルをコピーします。DataSource属性はそれを読み取り、それを繰り返し処理します。

この行は、テストがTestContextから読み取る場所です。

string ID = TestContext.DataRow["ID"].ToString();

CSVファイルにn個のIDがあると、IDごとに1回、n回テストが実行されます。

私が調査で見つけたいくつかの有用なリンク:

于 2013-02-28T09:03:08.743 に答える
1

「バブルソート」ソリューションは、それぞれが1つのIDを持つ何千ものテストを作成することです。現実的ではありません

完全に同意。できません。

次のアプローチは、xmlを読み取り、それを反復処理して要求を行う1つのテストを作成することです。このアプローチの問題は、実行に数分かかる大きなテストが終了することです。

このアプローチは負荷テストではありません。一度に1つのリクエストを送信するテストは1つだけです。

最善のアプローチは、いくつかのバリエーションがある3番目のアプローチだと思います。私が同様の問題を解決した方法は次のとおりです。

  1. DataInputテストごとに異なるデータを提供するクラス(たとえば)を作成します。
  2. DataInputscvファイルからデータを読み取っており、必要なデータを提供する静的メソッド(getNextUserNameなど)があります。
  3. [ClassIntialize]静的DataInputオブジェクトを作成します。
  4. で、[TestInitialize]からデータを取得することにより、RESTサービスへの実際のリクエストを作成していDataInputます。

そうすれば、すべてのテストに異なるデータが含まれます。

于 2013-02-25T12:54:22.223 に答える