共用方式為


使用 BizUnit 和 LoadGen 將效能和穩定性測試自動化

本主題提供如何搭配 BizUnit 使用 Microsoft BizTalk LoadGen 2007 工具的資訊,以自動化 BizTalk Server 解決方案的效能和穩定性測試。

BizTalk Server 效能測試,逐步指南

在調查如何自動化 BizTalk Server 效能測試之前,瞭解效能測試中通常會執行哪些步驟會很有用。 下列步驟代表「一般」BizTalk Server 效能測試程式:

  1. 建立測試結果目錄來儲存所收集的數據,例如事件記錄檔、追蹤記錄、性能監視器數據。

  2. 清除測試環境內所有伺服器上的事件記錄檔。

  3. 停止所有 BizTalk 主機實例。

  4. 停止任何執行隔離 BizTalk 主機的 IIS 實例,例如 SOAP 和 HTTP 接收配接器處理程式。

  5. 重新啟動執行 BizTalk Server 的電腦所使用的所有 SQL Server 實例。

  6. 清除 MessageBox 資料庫,以確保先前的測試執行中沒有剩餘的數據。 這很重要,因為任何剩餘的數據可能會扭曲測試結果。

  7. 啟動 BizTalk 主機實例。

  8. 在測試環境中的所有伺服器上啟動相關的性能監視器計數器。

  9. 透過系統傳送「priming」訊息,以初始化系統快取。

  10. 處理預備訊息之後,請在 SQL Server 測試結果資料庫中追蹤測試開始時間。

  11. 啟動所有 LoadGen 測試代理程式,以啟動效能測試。

  12. 等候測試完成——這通常可以透過有系統地測量性能監視器的計數器值來實現,例如主機佇列長度。

  13. 追蹤 SQL 測試結果資料庫中的測試結束時間。

  14. 停止測試環境中所有伺服器上的相關性能監視器計數器。

  15. 將測試數據儲存至稍早建立的測試結果目錄。

  16. 為下一次測試執行任何必要的清理。

    每個剛才列出的步驟都可以使用 BizUnit 自動化。 藉由利用 BizUnit 提供的現有測試步驟資產,您可以快速且輕鬆地為 BizTalk Server 解決方案產生自動化效能測試。 使用 BizUnit 將效能測試自動化的主要優點之一,是一夜之間執行測試的彈性,這表示結果已準備好在上午進行分析。 這可大幅減輕專案小組的效能測試負擔。

Microsoft BizTalk LoadGen 2007 工具

BizTalk LoadGen 2007 工具 (LoadGen) 是 BizTalk Server 2006 產品群組中壓力和效能測試小組開發的負載測試工具。 LoadGen 設計為快速、輕鬆且可靠地定義模擬生產層級訊息量的負載測試。 LoadGen 是多線程、組態驅動,並支援多個傳輸。 BizTalk 產品群組會每天使用LoadGen;因此,您可以高度相信此工具很持久、適合用途,而且能夠模擬各種不同的 BizTalk 案例。

LoadGen 採用由三層組成的模組化設計: 簡報架構元件。 表示層是由命令行驅動程式所組成,負責驅動架構。 架構層會讀取元件檔,然後執行其中指定的元件。 元件層包含三種類型的元件:負載產生器訊息建立者和節流控制器。 這些元件都是可延伸的,因此您可以建立自己的元件,並將其插入LoadGen中,以解決案例的需求。 由於 LoadGen 是由 BizTalk Server 產品群組所開發,因此您應該發現現成的元件會滿足大部分的負載測試需求。 這裡會更詳細地說明這些元件。

  • 負載產生器 負責透過特定傳輸傳輸訊息。 為下列的傳輸提供負載生成器:

    • 檔案

    • HTTP

    • MQSeries

    • MSMQLarge

    • MSMQ

    • 肥皂

    • Web 服務增強功能 (WSE)

    • Windows SharePoint 服務 (WSS)

    • Windows Communication Foundation (WCF)

  • 訊息建立者 是選擇性的元件,可在您需要產生包含唯一數據的訊息時使用。 訊息建立者使用兩種建立模式之一;同步和異步。 如果指定同步訊息建立模式,LoadGen 只會使用單一線程來建立訊息,以確保每個訊息都包含唯一的承載。 雖然同步模式保證每個訊息內的唯一數據,但此模式也會限制延展性。 LoadGen 也提供使用多個執行線程的異步訊息建立者;這可讓LoadGen符合目標訊息速率(因為它可以直接建立更多線程)。 在異步模式中,訊息建立者可以設定為隨機修改每個個別訊息的數據。 不過,因為它使用多個線程,因此不保證測試期間產生的所有訊息都會包含唯一的承載。

  • 節流控制器 可確保在測試執行時管理負載產生器,以穩定速率傳輸訊息。 LoadGen 也提供客制化節流功能,可讓您根據某些準則控制訊息的流程,包括:

    • 資料夾中的檔案數目

    • 資料庫數據表中的數據列數目

    • MSMQ 或 MQSeries 消息佇列的深度

    Microsoft BizTalk LoadGen 2007 工具 可供下載。

範例 LoadGen 組態檔

所有 LoadGen 組態信息都會儲存在 xml 檔案中。 LoadGen 組態檔包含 <CommonSection> 元素,可設定 LoadGen 案例中所有 LoadGen 工作的預設設定。 LoadGen 組態檔也可以包含一或多個 <Section> 元素,提供特定 LoadGen 工作的組態設定。 <Section> 元素中的條目會取代 <CommonSection> 元素中指定的任何預設值。

以下的範例 LoadGen 組態檔是位於 LoadGen 安裝目錄中的 \ConfigFiles\ConsoleConfigFiles 子目錄內 FileToFileLG.xml 範例組態檔的稍作修改版本。 此測試每 200 毫秒< 傳送< 25 個訊息> LotSizePerInterval>,每個負載產生器有 5 個線程 <NumThreadsperSection>,並在傳送 5000 則訊息後 <NumFiles> 停止負載測試。

在 <ThrottleController> 區段中指定檔案節流控制器。 ThresholdRange> 的值<設定為 1000-2000,這表示如果檔案位置 C:\Scenarios\FileToFile\Receive (Parameters) 小於 1000 或超過 2000 個檔案,節流控制器會適當地節流檔案產生器並增加/減少負載。 檔案位置中的檔案數目會每隔 1000 毫秒 <檢查一次 SleepInterval>。 <FileSection> 元素會定義負載產生器所傳送之訊息的屬性。 FileToFileLG.xml 檔案 <SrcFilePath> 將會由 LoadGen 複製到 filedrop 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組態檔的位置。

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

本主題的其餘部分說明 BizUnit 測試案例的組態檔,該配置檔會使用 LoadGen 將效能測試自動化。

備註

此組態檔可作為範本,以快速整合 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>

現在,我們會將測試開始時間寫入測試結果資料庫。 修改 ConnectionStringRawSQLQuery 參數,以符合您的環境。

<!-- 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 中指定的值時,就會結束測試。 變更 InstanceNameServer 參數的值,以符合您想要在環境中監視的主機實例和伺服器名稱。

<!-- 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> 卷標所指示。 同樣地,您必須修改 ConnectionStringRawSQLQuery 參數,以符合您的環境。

   <!-- 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 促進自動化測試