次の方法で共有


BizUnit と LoadGen を使用したパフォーマンスと安定性のテストの自動化

このトピックでは、BizUnit で Microsoft BizTalk LoadGen 2007 ツールを使用して、BizTalk Server ソリューションのパフォーマンスと安定性のテストを自動化する方法について説明します。

BizTalk Server のパフォーマンス テスト、ステップ バイ ステップ

BizTalk Server のパフォーマンス テストを自動化する方法を調査する前に、パフォーマンス テストで通常実行される手順を把握すると便利です。 次の手順は、"一般的な" BizTalk Server パフォーマンス テスト プロセスを表しています。

  1. イベント ログ、トレース ログ、パフォーマンス モニター データなど、収集された結果とデータを格納するテスト結果ディレクトリを作成します。

  2. テスト環境内のすべてのサーバーのイベント ログをクリアします。

  3. すべての BizTalk ホスト インスタンスを停止します。

  4. SOAP や HTTP 受信アダプター ハンドラーなど、分離された BizTalk ホストを実行している IIS インスタンスをすべて停止します。

  5. BizTalk Server を実行しているコンピューターで使用される SQL Server のすべてのインスタンスを再起動します。

  6. MessageBox データベースをクリーンアップして、以前のテストの実行から残ったデータがないようにします。 残ったデータはテスト結果を歪める可能性があるため、これは重要です。

  7. BizTalk ホスト インスタンスを起動します。

  8. テスト環境のすべてのサーバーで、関連するパフォーマンス モニター カウンターを開始します。

  9. システムを介して "プライミング" メッセージを送信して、システム キャッシュを初期化します。

  10. プライミング メッセージが処理されたら、SQL Server テスト結果データベースでテスト開始時刻を追跡します。

  11. すべての LoadGen テスト エージェントを開始して、パフォーマンス テストを開始します。

  12. テストが完了するまで待ちます。多くの場合、これはホスト キューの長さなどのパフォーマンス モニター カウンターの値を測定することによって体系的に行うことができます。

  13. SQL テスト結果データベースでテストの終了時刻を追跡します。

  14. テスト環境のすべてのサーバーで、関連するパフォーマンス モニター カウンターを停止します。

  15. 前に作成したテスト結果ディレクトリにテスト データを保存します。

  16. 次のテスト実行に必要なクリーンアップを実行します。

    一覧に示した各手順は、BizUnit を使用して自動化できます。 BizUnit が提供する既存のテスト ステップ資産を利用することで、BizTalk Server ソリューションの自動パフォーマンス テストをすばやく簡単に生成できます。 BizUnit を使用してパフォーマンス テストを自動化する主な利点の 1 つは、テストを夜間に実行できる柔軟性です。つまり、結果は朝に分析する準備が整います。 これにより、プロジェクト チームのパフォーマンス テストの負担が大幅に軽減されます。

Microsoft BizTalk LoadGen 2007 ツール

BizTalk LoadGen 2007 ツール (LoadGen) は、BizTalk Server 2006 製品グループのストレスおよびパフォーマンス テスト チームによって開発されたロード テスト ツールです。 LoadGen は、実稼働レベルのメッセージ ボリュームをシミュレートするロード テストを迅速、簡単、確実に定義するように設計されています。 LoadGen はマルチスレッドの構成駆動型であり、複数のトランスポートをサポートします。 BizTalk 製品グループは、LoadGen を日常的に使用します。そのため、ツールが耐久性があり、目的に適合し、さまざまな BizTalk シナリオをシミュレートできるという高い信頼度を持つことができます。

LoadGen は、 プレゼンテーションフレームワークコンポーネントの 3 つのレイヤーで構成されるモジュール設計を採用しています。 プレゼンテーション層は、フレームワークを駆動するコマンド ライン ドライバーで構成されます。 フレームワーク レイヤーは、構成ファイルを読み取り、そこに指定されたコンポーネントを実行します。 コンポーネント レイヤーは、 ロード ジェネレーターメッセージ作成者スロットル コントローラーの 3 種類のコンポーネントで構成されます。 これらの各コンポーネントは拡張可能であるため、独自のコンポーネントを作成して LoadGen にプラグインして、シナリオのニーズに対応できます。 LoadGen は BizTalk Server 製品グループによって開発されているため、すぐに使用できるコンポーネントがロード テストの要件のほとんどを満たすことがわかります。 これらの各コンポーネントについて詳しく説明します。

  • ロード ジェネレーター は、特定のトランスポート経由でメッセージを送信する役割を担います。 ロード ジェネレーターは、次のトランスポート用に提供されます。

    • ファイル

    • HTTP

    • MQSeries

    • MSMQLarge

    • MSMQ (マイクロソフト メッセージキュー)

    • 石鹸

    • Web サービスの機能強化 (WSE)

    • Windows SharePoint Services (WSS)

    • Windows Communication Foundation (WCF)

  • メッセージ作成者 は、一意のデータを含むメッセージを生成する必要がある場合に使用できるオプションのコンポーネントです。 メッセージ作成者は、2 つの作成モードのいずれかを使用します。同期と非同期。 同期メッセージ作成モードが指定されている場合、LoadGen は 1 つのスレッドのみを使用してメッセージを作成し、各メッセージに一意のペイロードが含まれていることを確認します。 同期モードでは各メッセージ内の一意のデータが保証されますが、このモードではスケーラビリティも制限されます。 LoadGen には、複数の実行スレッドを使用する非同期メッセージ作成者も用意されています。これにより、LoadGen はターゲット メッセージレートを満たすことができます (単により多くのスレッドを作成できるため)。 非同期モードでは、メッセージ作成者は、個々のメッセージのデータをランダムに変更するように構成できます。 ただし、複数のスレッドを使用するため、テスト中に生成されたすべてのメッセージに一意のペイロードが含まれるとは限りません。

  • スロットル コントローラー は、テストの実行中にロード ジェネレーターを制御することで、メッセージが安定した速度で送信されるようにします。 LoadGen ではカスタム調整も公開されています。これにより、次のような条件に基づいてメッセージのフローを制御できます。

    • フォルダー内のファイルの数

    • データベース テーブル内の行数

    • MSMQ または MQSeries メッセージ キューの深さ

    Microsoft BizTalk LoadGen 2007 ツール をダウンロードできます。

LoadGen 構成ファイルのサンプル

すべての LoadGen 構成情報は xml ファイルに格納されます。 LoadGen 構成ファイルには、LoadGen シナリオのすべての LoadGen タスクの既定の設定を構成する <CommonSection> 要素が含まれています。 LoadGen 構成ファイルには、特定の LoadGen タスクの構成設定を提供する 1 つ以上の <Section> 要素を含めることもできます。 <Section> 要素内のエントリは、<CommonSection> 要素で指定された既定値よりも優先されます。

次のサンプル LoadGen 構成ファイルは、LoadGen インストール ディレクトリの \ConfigFiles\ConsoleConfigFiles サブディレクトリに含まれる、FileToFileLG.xml サンプル構成ファイルの若干変更されたバージョンです。 このテストでは、200 ミリ秒ごとに 25 メッセージ <LotSizePerInterval> を送信し、<SleepInterval>、ロード ジェネレーターあたり 5 スレッド <NumThreadsperSection> を使用し、5000 メッセージ <NumFiles> が送信された後にロード テストを停止します。

ファイル スロットル コントローラーは、 <ThrottleController> セクションで指定します。 <ThresholdRange> の値は 1000 から 2000 に設定されます。つまり、ファイルの場所 C:\Scenarios\FileToFile\Receive (Parameters) が 1000 未満または 2000 を超えるファイルの場合、スロットル コントローラーはファイル ジェネレーターを調整し、必要に応じて負荷を増減します。 ファイルの場所にあるファイルの数は、1000 ミリ秒ごとにチェックされます <SleepInterval>。 <FileSection> 要素は、ロード ジェネレーターによって送信されるメッセージのプロパティを定義します。 FileToFileLG.xml ファイル <SrcFilePath> は LoadGen によってファイルドロップ C:\Scenarios\FileToFile\Receive <DstFilePath> にコピーされます。 ファイル トランスポートは、<CommonSection> 要素内の <Transport Name> 要素で指定された既定のトランスポートであるため、ここで使用されます。

注意事項

この例またはガイダンスでは、接続文字列やユーザー名とパスワードなどの機密情報を参照します。 これらの値をコードにハードコーディングしないでください。また、使用可能な最も安全な認証を使用して機密データを保護してください。 詳しくは、次のドキュメントをご覧ください。

<LoadGenFramework>
   <CommonSection>
      <LoadGenVersion>2</LoadGenVersion>
      <OptimizeLimitFileSize>204800</OptimizeLimitFileSize>
      <NumThreadsPerSection>5</NumThreadsPerSection>
      <SleepInterval>200</SleepInterval>
      <LotSizePerInterval>25</LotSizePerInterval>
      <RetryInterval>10000</RetryInterval>
      <StopMode Mode="Files">
         <NumFiles>5000</NumFiles>
      </StopMode>
      <Transport Name="FILE">
         <Assembly>FileTransport.dll/FileTransport.FileTransport</Assembly>
      </Transport>
      <ThrottleController Mode="Custom">
         <Monitor Name="File">
            <Assembly>FileMonitor.dll/DropLocationFileMonitor.DropLocationFileMonitor</Assembly>
            <ThresholdRange>1000-2000</ThresholdRange>
            <SleepInterval>1000</SleepInterval>
            <Parameters>C:\Scenarios\FileToFile\Receive</Parameters>
         </Monitor>
         <ThrottleCondition>File</ThrottleCondition>
      </ThrottleController>
   </CommonSection>
   <Section Name="FileSection">
      <SrcFilePath>C:\LoadGen\ConfigFiles\ConsoleConfigFiles\FileToFileLG.xml</SrcFilePath>
      <DstLocation>
         <Parameters>
            <DstFilePath>C:\Scenarios\FileToFile\Receive</DstFilePath>
         </Parameters>
      </DstLocation>
   </Section>
</LoadGenFramework>

BizUnit を使用して LoadGen を駆動する

BizUnit には、自動化されたパフォーマンスと安定性のテストを容易にする LoadGenExecuteStep が用意されています。 LoadGenExecuteStep を使用するサンプル BizUnit 構成ファイルの TestExecution ステージを次のコード例に示します。 この手順では、LoadGen 構成ファイルの場所である 1 つの構成パラメーターを受け入れることに注意してください。

<TestCase testName="Test_LoadGen">
   <TestSetup>
   </TestSetup>
   <TestExecution>
      <TestStep assemblyPath="" typeName="BizUnit.LoadGenExecuteStep, BizUnit.LoadGenSteps">
         <LoadGenTestConfig>..\..\..\PerfGuideFiletoFile.xml</LoadGenTestConfig>
      </TestStep>
   </TestExecution>
   <!-- Test cleanup: test cases should always leave the system in the state they found it -->
   <TestCleanup>
   </TestCleanup>
</TestCase>

このトピックの残りの部分では、LoadGen を使用してパフォーマンス テストを自動化する BizUnit テスト ケースの構成ファイルについて説明します。

この構成ファイルは、パフォーマンス テストの一環として BizUnit と LoadGen をすばやく統合するためのテンプレートとして使用できます。 このテスト ケースを実行する前に、環境の構成ファイルをカスタマイズする必要があります。 それに応じて、カスタマイズする必要がある構成ファイルのセクションが示されます。

最初に、BizTalk ソリューションに適した testName パラメーターの値を指定します。

<TestCase testName="Performance-Guide-Sample-Loadgen-Test">

次に、 TestSetup ステージにコンテキスト変数を追加します。 これらのコンテキスト変数は、テスト ケースの期間を通じて参照されます。 この構成ファイルを使用するには、 TestCaseResultsDir (C:\Dev Work\Perf Guide Demos\PerfResults\) と Machine (BIZTALKADMIN01) に指定されている値を環境に合わせて変更します。

<TestSetup>
   <!-- Context property: name of test run -->
   <TestStep assemblyPath="" typeName="BizUnit.ContextManipulatorStep">
      <ContextItem contextKey="TestRunName">
         <ItemTest takeFromCtx="BizUnitTestCaseName"></ItemTest>
         <ItemTest>_%DateTime%</ItemTest>
      </ContextItem>
   </TestStep>
   <!-- Context property: name of test directory to store results -->
   <TestStep assemblyPath="" typeName="BizUnit.ContextManipulatorStep">
      <ContextItem contextKey="TestCaseResultsDir">
         <ItemTest>C:\Dev Work\Perf Guide Demos\PerfResults\</ItemTest>
         <ItemTest takeFromCtx="TestRunName"></ItemTest>
      </ContextItem>
   </TestStep>
   <!-- Context property: perfmon log file -->
   <TestStep assemblyPath="" typeName="BizUnit.ContextManipulatorStep">
      <ContextItem contextKey="PerfMonFilePath">
         <ItemTest takeFromCtx="TestCaseResultsDir"></ItemTest>
         <ItemTest>\PerfCounters.blg</ItemTest>
      </ContextItem>
   </TestStep>
   <!-- Context property: destintation for app event log on test computer -->
   <TestStep assemblyPath="" typeName="BizUnit.ContextManipulatorStep">
      <ContextItem contextKey="DestPath- BIZTALKADMIN01-AppEventLog">
         <ItemTest takeFromCtx="TestCaseResultsDir"></ItemTest>
         <ItemTest> BIZTALKADMIN01_ApplicationLog.evt</ItemTest>
      </ContextItem>
   </TestStep>
   <!-- Clear the application event log on test computer -->
   <TestStep assemblyPath="" typeName="BizUnit.EventLogClearStep">
      <Machine>BIZTALKADMIN01</Machine>
      <EventLog>Application</EventLog>
   </TestStep>
   <!-- Create the directory to save all the test results -->
   <TestStep assemblyPath="" typeName="BizUnit.CreateDirectory">
      <DirectoryName takeFromCtx="TestCaseResultsDir" ></DirectoryName>
   </TestStep>
</TestSetup>

TestSetup ステージが完了したら、TestExecution ステージに入ります。 最初の手順では、BizTalk ホスト インスタンスを停止します。 個別のホスト インスタンスごとに、個別の BizUnit.HostConductorStep セクションを追加する必要があります。 環境内でこの構成ファイルを使用している場合は、 HostInstanceNameServerLogonPassword の適切な値も入力する必要があります。

<TestExecution>
   <!-- Step 1: Stop BizTalk Hosts -->
   <TestStep assemblyPath="" typeName="BizUnit.HostConductorStep, BizUnit.BizTalkSteps">
      <Action>stop</Action>
      <HostInstanceName>BizTalkServerApplication</HostInstanceName>
      <Server>BizTalkAdmin01</Server>
      <Logon>ServerName\Administrator</Logon>
      <PassWord>Pass@word1</PassWord>
      <GrantLogOnAsService>true</GrantLogOnAsService>
   </TestStep>

すべてのホスト インスタンスを停止した後、bts_CleanupMsgBox ストアド プロシージャを使用して BizTalk MessageBox データベースをクリーンアップします。 この手順を使用するには、環境に合わせて ConnectionString の値を変更する必要があります。

<!-- Step 2: Clean Up MessageBox -->
<TestStep assemblyPath="" typeName="BizUnit.DBExecuteNonQueryStep">
   <DelayBeforeExecution>1</DelayBeforeExecution>
   <ConnectionString>Persist Security Info=False;Integrated Security=SSPI;database=BizTalkMsgBoxDb;server=BIZTALKADMIN01;Connect Timeout=30</ConnectionString>
   <SQLQuery>
      <RawSQLQuery>[dbo].[bts_CleanupMsgbox]</RawSQLQuery>
   </SQLQuery>
</TestStep>

TestExecution ステージの手順 3 では、テンプレート ファイルで指定されているパフォーマンス モニター (PerfMon) カウンターを開始します。 サンプル テンプレート ファイルは、以下の サンプル BizUnit.PerfmonCountersStep の下に一覧表示されます。 テンプレート ファイルを使用するには、 CountersListFilePath に指定された値を環境に合わせて変更する必要があります。 シナリオに合わせて監視したい PerfMon カウンターを追加するか、無関係なカウンターを削除できるように、サンプル パフォーマンス モニター カウンター テンプレート ファイルを変更します。

<!-- Step 3: Start Perfmon counters -->
<TestStep assemblyPath="" typeName="BizUnit.PerfmonCountersStep">
   <PerfmonAction>Start</PerfmonAction>
   <CounterSetName>PerfGuidePerfmonCounters</CounterSetName>
   <CountersListFilePath>C:\Dev Work\Perf Guide Demos\Test_06_PerfCounters.txt</CountersListFilePath>
   <SampleInterval>5</SampleInterval>
   <PerfmonLogFilePath takeFromCtx="PerfMonFilePath"></PerfmonLogFilePath>
</TestStep>

サンプル パフォーマンス モニター カウンター テンプレート ファイル (Test_06_PerfCounters.txt BizUnit.PerfmonCountersStep によって参照されます)。

\Processor(*)\*
\Process(*)\*
\Memory\*
\PhysicalDisk(*)\*
\System\Context Switches/sec
\System\Processor Queue Length
\BizTalk:FILE Receive Adapter(*)\*
\BizTalk:File Send Adapter(*)\*
\BizTalk:FTP Receive Adapter(*)\*
\BizTalk:FTP Send Adapter(*)\*
\BizTalk:HTTP Receive Adapter(*)\*
\BizTalk:HTTP Send Adapter(*)\*
\BizTalk:Message Agent(*)\*
\BizTalk:Messaging(*)\*
\BizTalk:Message Box:General Counters(*)\*
\BizTalk:Message Box:Host Counters(*)\*
\BizTalk:Messaging Latency(*)\*
\BizTalk:SOAP Receive Adapter(*)\*
\BizTalk:SOAP Send Adapter(*)\*
\BizTalk:TDDS(*)\*
\XLANG/s Orchestrations(*)\*

次に、BizTalk Server ホスト インスタンスを開始します。 個別のホスト インスタンスごとに個別の BizUnit.HostConductorStep セクションを追加する必要があります (個別には、サーバー間のホストの複数のインスタンスが含まれます)。 環境内でこの構成ファイルを使用している場合は、 HostInstanceNameServerLogonPassword の適切な値も入力する必要があります。

<!-- Step 4: Start BizTalk Hosts -->
<TestStep assemblyPath="" typeName="BizUnit.BizTalkSteps.HostConductorStep, BizUnit.BizTalkSteps, Version=3.0.0.0, Culture=neutral, PublicKeyToken=7eb7d82981ae5162">
   <Action>start</Action>
   <HostInstanceName>BizTalkServerApplication</HostInstanceName>
   <Server>BizTalkAdmin01</Server>
   <Logon>ServerName\Administrator</Logon>
   <PassWord>Pass@word1</PassWord>
   <GrantLogOnAsService>true</GrantLogOnAsService>
</TestStep>

手順 5 では、BizUnit.LoadGenExecuteStep を使用して BizTalk Server にメッセージをいくつか送信しシステムを初期化します。環境に合わせて LoadGenTestConfig パラメーターの値を変更してください。

<!-- Step 5: Send Priming messages -->
<TestStep assemblyPath="" typeName="BizUnit.LoadGenExecuteStep, BizUnit.LoadGenSteps">
   <LoadGenTestConfig>C:\Program Files\LoadGen\ConfigFiles\ConsoleConfigFiles\PerfGuideFiletoFile.xml</LoadGenTestConfig>
</TestStep>

手順 6 では、LoadGen 構成ファイルをメモリに書き込み、テストの完了時にテスト結果データベースに書き込むことができます。


      <!-- Step 6: Read loadgen file into context variable -->
<TestStep assemblyPath="" typeName="BizUnit.FileReadAndLoadToContext">
   <FilePath>C:\Program Files\LoadGen\ConfigFiles\ConsoleConfigFiles\PerfGuideFiletoFile.xml</FilePath>
   <ContextPropertyName>LoadGenFileContent</ContextPropertyName>
</TestStep>

次に、テストの開始時刻をテスト結果データベースに書き込みます。 環境に合わせて ConnectionString パラメーターと RawSQLQuery パラメーターを変更します。

<!-- Step 7: Update test results DB with test start time -->
<TestStep assemblyPath="" typeName="BizUnit.DBExecuteNonQueryStep">
   <DelayBeforeExecution>1</DelayBeforeExecution>
   <ConnectionString>Persist Security Info=False;Integrated Security=SSPI;database=TestResults;server=BizTalkAdmin01;Connect Timeout=30</ConnectionString>
   <SQLQuery>
      <RawSQLQuery>INSERT INTO tblPerformanceResults (Test_ID, StartTime,LoadGenFile) VALUES ('{0}',GetDate(),'{1}' )</RawSQLQuery>
      <SQLQueryParams>
         <SQLQueryParam takeFromCtx="TestRunName"></SQLQueryParam>
         <SQLQueryParam takeFromCtx="LoadGenFileContent"></SQLQueryParam>
      </SQLQueryParams>
   </SQLQuery>
</TestStep>

手順 8 では、 BizUnit.LoadGenExecuteStep を使用して実際のパフォーマンス テストを開始します。 この手順では、手順 5 で使用したのと同じ LoadGen 構成ファイルを指定しますが、ここで任意の有効な LoadGen 構成ファイルを指定できます。 BizUnit.DelayStep は、メッセージがシステムを通過し始める時間を許容するために、手順 9 で 5 秒の遅延を発生させるために使用されます。 ホスト キューの長さは、 BizUnit.PerMonCounterMonitorStep を使用して計算されます。 このパラメーターが手順 10 で指定した値 1 に達すると、テストが終了します。 InstanceName パラメーターと Server パラメーターの値を、環境内で監視するホスト インスタンスとサーバーの名前と一致するように変更します。

<!-- Step 8: LoadGen: Load actual perf test -->
<TestStep assemblyPath="" typeName="BizUnit.LoadGenSteps.LoadGenExecuteStep, BizUnit.LoadGenSteps , Version=3.0.0.0, Culture=neutral, PublicKeyToken=7eb7d82981ae5162">
   <LoadGenTestConfig>C:\Program Files\LoadGen\ConfigFiles\ConsoleConfigFiles\PerfGuideFiletoFile.xml</LoadGenTestConfig>
</TestStep>
<!-- Step 9: Delay for 5 secs to allow msgs to start flowing -->
<TestStep assemblyPath="" typeName="BizUnit.DelayStep">
   <Delay>5000</Delay>
</TestStep>
<!-- Step 10: Wait for Orch Host Queue depth to reach one -->
<TestStep assemblyPath="" typeName="BizUnit.PerfMonCounterMonitorStep">
   <CategoryName>BizTalk:Message Box:Host Counters</CategoryName>
   <CounterName>Host Queue - Length</CounterName>
   <InstanceName>BizTalkServerApplication:biztalkmsgboxdb:BizTalkAdmin01</InstanceName>
   <Server>BizTalkAdmin01</Server>
   <CounterTargetValue>1</CounterTargetValue>
</TestStep>

テストの最後に、 BizUnit.DBExecuteNonQueryStep を使用してテスト結果データベースを更新します。 この手順の完了は、終了の </TestExecution> タグで示されているように、テスト実行ステージの終了を示します。 ここでも、環境に合わせて ConnectionString パラメーターと RawSQLQuery パラメーターを変更する必要があります。

   <!-- Step 11: Update test results DB with test stop time -->
   <TestStep assemblyPath="" typeName="BizUnit.DBExecuteNonQueryStep">
      <DelayBeforeExecution>1</DelayBeforeExecution>
      <ConnectionString>Persist Security Info=False;Integrated Security=SSPI;database=TestResults;server=BIZTALKADMIN01;Connect Timeout=30</ConnectionString>
      <SQLQuery>
         <RawSQLQuery>UPDATE tblPerformanceResults SET EndTime = GetDate() WHERE Test_ID = '{0}'</RawSQLQuery>
         <SQLQueryParams>
            <SQLQueryParam takeFromCtx="TestRunName"></SQLQueryParam>
         </SQLQueryParams>
      </SQLQuery>
   </TestStep>
</TestExecution>

実行ステージが終了すると、テスト クリーンアップ ステージに入ります。 このステージでは 、BizUnit.PerfmonCountersStep を使用して、前の手順 3 で開始したパフォーマンス モニター カウンターを停止します。

<TestCleanup>
      <!-- Return system to state prior to test -->
      <!-- Stop perfmon counters -->
      <TestStep assemblyPath="" typeName="BizUnit.PerfmonCountersStep" failOnError="false">
         <PerfmonAction>Stop</PerfmonAction>
         <CounterSetName>PerfGuidePerfmonCounters</CounterSetName>
      </TestStep>
   </TestCleanup>
</TestCase>

この例では、BizUnit を LoadGen と組み合わせてパフォーマンス テストを自動化する方法を示しました。 BizUnit 構成ファイルによって記述されるロード テストは、機能テストと同じ方法で Visual Studio のテスト ツールから実行できます。 このアプローチを採用すると、パフォーマンス テスト用のデータを一元的に管理、管理、収集できます。

BizUnit と LoadGen を自動化されたアプローチで使用することで、複数のテスト実行をオフ時間に実行するようにスケジュールすることが非常に簡単になり、通常の勤務時間中の分析に十分なテスト結果が提供されます。 パフォーマンス テストを自動化する場合は、システムを介してさまざまな負荷をモデル化する LoadGen スクリプトの使用を検討してください。たとえば、想定される実稼働メッセージ ボリュームのさまざまな程度 (75%、100%、125%) をシミュレートできます。 ロード テストを実行する場合は、オーバーロードまたは "悪い日" シナリオをテストすることが特に重要です。 システムを運用環境に配置する前に、BizTalk Server 環境の各テスト ケースに対する最大の持続可能なスループット (MST) を把握しておく必要があります。 持続可能なパフォーマンスの最大化の詳細については、BizTalk Server 2009 ドキュメントの「 持続可能なパフォーマンス とは(https://go.microsoft.com/fwlink/?LinkID=132304)」を参照してください。

完全な BizUnit LoadGen サンプル構成ファイル

次の一覧には、前に参照した BizUnit 構成ファイルの内容全体が含まれています。

<TestCase testName="Performance-Guide-Sample-Loadgen-Test">
   <TestSetup>
      <!-- Context property: name of test run -->
      <TestStep assemblyPath="" typeName="BizUnit.ContextManipulatorStep">
         <ContextItem contextKey="TestRunName">
            <ItemTest takeFromCtx="BizUnitTestCaseName"></ItemTest>
            <ItemTest>_%DateTime%</ItemTest>
         </ContextItem>
      </TestStep>
      <!-- Context property: name of test directory to store results -->
      <TestStep assemblyPath="" typeName="BizUnit.ContextManipulatorStep">
         <ContextItem contextKey="TestCaseResultsDir">
            <ItemTest>C:\Dev Work\Perf Guide Demos\PerfResults\</ItemTest>
            <ItemTest takeFromCtx="TestRunName"></ItemTest>
         </ContextItem>
      </TestStep>
      <!-- Context property: perfmon log file -->
      <TestStep assemblyPath="" typeName="BizUnit.ContextManipulatorStep">
         <ContextItem contextKey="PerfMonFilePath">
            <ItemTest takeFromCtx="TestCaseResultsDir"></ItemTest>
            <ItemTest>\PerfCounters.blg</ItemTest>
         </ContextItem>
      </TestStep>
      <!-- Context property: destintation for app event log on BTSSVR-001 -->
      <TestStep assemblyPath="" typeName="BizUnit.ContextManipulatorStep">
         <ContextItem contextKey="DestPath-BTSSVR-001-AppEventLog">
            <ItemTest takeFromCtx="TestCaseResultsDir"></ItemTest>
            <ItemTest>BTSSVR-001_ApplicationLog.evt</ItemTest>
         </ContextItem>
      </TestStep>
      <!-- Clear the application event log on BTSSVR-001 -->
      <TestStep assemblyPath="" typeName="BizUnit.EventLogClearStep">
         <Machine>BIZTALKADMIN01</Machine>
         <EventLog>Application</EventLog>
      </TestStep>
      <!-- Create the directory to save all the test results -->
      <TestStep assemblyPath="" typeName="BizUnit.CreateDirectory">
         <DirectoryName takeFromCtx="TestCaseResultsDir" ></DirectoryName>
      </TestStep>
   </TestSetup>

   <TestExecution>
      <!-- Step 1: Stop BizTalk Hosts -->
      <TestStep assemblyPath="" typeName="BizUnit.HostConductorStep, BizUnit.BizTalkSteps">
         <Action>stop</Action>
         <HostInstanceName>BizTalkServerApplication</HostInstanceName>
         <Server>BizTalkAdmin01</Server>
         <Logon>ServerName\Administrator</Logon>
         <PassWord>Pass@word1</PassWord>
         <GrantLogOnAsService>true</GrantLogOnAsService>
      </TestStep>
      <!-- Step 2: Clean Up MessageBox -->
      <TestStep assemblyPath="" typeName="BizUnit.DBExecuteNonQueryStep">
         <DelayBeforeExecution>1</DelayBeforeExecution>
         <ConnectionString>Persist Security Info=False;Integrated Security=SSPI;database=BizTalkMsgBoxDb;server=BIZTALKADMIN01;Connect Timeout=30</ConnectionString>
         <SQLQuery>
            <RawSQLQuery>[dbo].[bts_CleanupMsgbox]</RawSQLQuery>
         </SQLQuery>
      </TestStep>
      <!-- Step 3: Start Perfmon counters -->
      <TestStep assemblyPath="" typeName="BizUnit.PerfmonCountersStep">
         <PerfmonAction>Start</PerfmonAction>
         <CounterSetName>PerfGuidePerfmonCounters</CounterSetName>
         <CountersListFilePath>C:\Dev Work\Perf Guide Demos\Test_06_PerfCounters.txt</CountersListFilePath>
         <SampleInterval>5</SampleInterval>
         <PerfmonLogFilePath takeFromCtx="PerfMonFilePath"></PerfmonLogFilePath>
      </TestStep>
      <!-- Step 4: Start BizTalk Hosts -->
      <TestStep assemblyPath="" typeName="BizUnit.BizTalkSteps.HostConductorStep, BizUnit.BizTalkSteps, Version=3.0.0.0, Culture=neutral, PublicKeyToken=7eb7d82981ae5162">
         <Action>start</Action>
         <HostInstanceName>BizTalkServerApplication</HostInstanceName>
         <Server>BizTalkAdmin01</Server>
         <Logon>ServerName\Administrator</Logon>
         <PassWord>Pass@word1</PassWord>
         <GrantLogOnAsService>true</GrantLogOnAsService>
      </TestStep>
      <!-- Step 5: Send Priming messages -->
      <TestStep assemblyPath="" typeName="BizUnit.LoadGenExecuteStep, BizUnit.LoadGenSteps">
         <LoadGenTestConfig>C:\Program Files\LoadGen\ConfigFiles\ConsoleConfigFiles\PerfGuideFiletoFile.xml</LoadGenTestConfig>
      </TestStep>
      <!-- Step 6: Read loadgen file into context variable -->
      <TestStep assemblyPath="" typeName="BizUnit.FileReadAndLoadToContext">
         <FilePath>C:\Program Files\LoadGen\ConfigFiles\ConsoleConfigFiles\PerfGuideFiletoFile.xml</FilePath>
         <ContextPropertyName>LoadGenFileContent</ContextPropertyName>
      </TestStep>
      <!-- Step 7: Update test results DB with test start time -->
      <TestStep assemblyPath="" typeName="BizUnit.DBExecuteNonQueryStep">
         <DelayBeforeExecution>1</DelayBeforeExecution>
         <ConnectionString>Persist Security Info=False;Integrated Security=SSPI;database=TestResults;server=BizTalkAdmin01;Connect Timeout=30</ConnectionString>
         <SQLQuery>
            <RawSQLQuery>INSERT INTO tblPerformanceResults (Test_ID, StartTime,LoadGenFile) VALUES ('{0}',GetDate(),'{1}' )</RawSQLQuery>
            <SQLQueryParams>
               <SQLQueryParam takeFromCtx="TestRunName"></SQLQueryParam>
               <SQLQueryParam takeFromCtx="LoadGenFileContent"></SQLQueryParam>
            </SQLQueryParams>
         </SQLQuery>
      </TestStep>
      <!-- Step 8: LoadGen: Load actual perf test -->
      <TestStep assemblyPath="" typeName="BizUnit.LoadGenSteps.LoadGenExecuteStep, BizUnit.LoadGenSteps , Version=3.0.0.0, Culture=neutral, PublicKeyToken=7eb7d82981ae5162">
        <LoadGenTestConfig>C:\Program Files\LoadGen\ConfigFiles\ConsoleConfigFiles\PerfGuideFiletoFile.xml</LoadGenTestConfig>
      </TestStep>
      <!-- Step 9: Delay for 5 secs to allow msgs to start flowing -->
      <TestStep assemblyPath="" typeName="BizUnit.DelayStep">
         <Delay>5000</Delay>
      </TestStep>
      <!-- Step 10: Wait for Orch Host Queue depth to reach one -->
      <TestStep assemblyPath="" typeName="BizUnit.PerfMonCounterMonitorStep">
         <CategoryName>BizTalk:Message Box:Host Counters</CategoryName>
         <CounterName>Host Queue - Length</CounterName>
         <InstanceName>BizTalkServerApplication:biztalkmsgboxdb:BizTalkAdmin01</InstanceName>
         <Server>BizTalkAdmin01</Server>
         <CounterTargetValue>1</CounterTargetValue>
      </TestStep>
      <!-- Step 11: Update test results DB with test stop time -->
      <TestStep assemblyPath="" typeName="BizUnit.DBExecuteNonQueryStep">
         <DelayBeforeExecution>1</DelayBeforeExecution>
         <ConnectionString>Persist Security Info=False;Integrated Security=SSPI;database=TestResults;server=BIZTALKADMIN01;Connect Timeout=30</ConnectionString>
         <SQLQuery>
            <RawSQLQuery>UPDATE tblPerformanceResults SET EndTime = GetDate() WHERE Test_ID = '{0}'</RawSQLQuery>
            <SQLQueryParams>
               <SQLQueryParam takeFromCtx="TestRunName"></SQLQueryParam>
            </SQLQueryParams>
         </SQLQuery>
      </TestStep>
   </TestExecution>

   <TestCleanup>
      <!-- Return system to state prior to test -->
      <!-- Stop perfmon counters -->
      <TestStep assemblyPath="" typeName="BizUnit.PerfmonCountersStep" failOnError="false">
         <PerfmonAction>Stop</PerfmonAction>
         <CounterSetName>PerfGuidePerfmonCounters</CounterSetName>
      </TestStep>
   </TestCleanup>
</TestCase>

こちらもご覧ください

BizUnit を使用した自動テストの容易化