次の方法で共有


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

    • SOAP

    • 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>、ロード ジェネレーター <NumThreadsperSection>ごとに 5 つのスレッドを送信し、5000 メッセージ <NumFiles> が送信された後にロード テストを停止します。

ファイル スロットル コントローラーは、ThrottleController> セクションで<指定します。 ThresholdRange> の<値は 1000 から 2000 に設定されています。つまり、ファイルの場所 C:\Scenarios\FileToFile\Receive (Parameters) が 1000 未満または 2000 を超えるファイルの場合、スロットル コントローラーはファイル ジェネレーターを調整し、必要に応じて負荷を増減します。 ファイルの場所にあるファイルの数は、SleepInterval> の 1000 ミリ秒<ごとに確認されます。 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 テスト ケースの構成ファイルについて説明します。

Note

この構成ファイルは、パフォーマンス テストの一環として 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 セクションを追加する必要があります。 環境でこの構成ファイルを使用している場合は、 HostInstanceNameサーバーログオンおよびパスワードの適切な値も入力する必要があります。

<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>

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

\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 セクションを追加する必要があります (個別には、サーバー間のホストの複数のインスタンスが含まれます)。 環境内でこの構成ファイルを使用している場合は、 HostInstanceNameサーバーログオンおよびパスワードの適切な値も入力する必要があります。

<!-- 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 は、メッセージがシステム経由で流れ始める時間を許容するために 5 秒の遅延を課すために、手順 9 で使用されます。 ホスト キューの長さは、 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 の使用