本主题介绍如何将 Microsoft BizTalk LoadGen 2007 工具与 BizUnit 配合使用,以自动执行 BizTalk Server 解决方案的性能和稳定性测试。
BizTalk Server 性能测试,分步执行
在调查如何自动执行 BizTalk Server 性能测试之前,了解性能测试中通常执行的步骤非常有用。 以下步骤代表“典型”BizTalk Server 性能测试过程:
创建测试结果目录以存储收集的结果和数据,例如事件日志、跟踪日志、性能监视器数据。
清除测试环境中所有服务器上的事件日志。
停止所有 BizTalk 主机实例。
停止运行独立 BizTalk 主机(例如 SOAP 和 HTTP 接收适配器处理程序)的任何 IIS 实例。
重启运行 BizTalk Server 的计算机使用的所有 SQL Server 实例。
清理 MessageBox 数据库,确保以前的测试运行没有残留数据。 这一点很重要,因为任何剩余数据都可能会扭曲测试结果。
启动 BizTalk 主机实例。
在测试环境中的所有服务器上启动相关的性能监视器计数器。
通过系统发送“启动”消息以初始化系统缓存。
处理启动消息后,在 SQL Server 测试结果数据库中跟踪测试开始时间。
通过启动所有 LoadGen 测试代理来启动性能测试。
等待测试完成 – 通常可以通过测量性能监视器计数器的值(如主机队列长度)来系统地完成此作。
在 SQL 测试结果数据库中跟踪测试结束时间。
停止测试环境中所有服务器上的相关性能监视器计数器。
将测试数据保存到之前创建的测试结果目录。
请进行任何必要的清理,以便进行下一次测试。
仅列出的每个步骤都可以使用 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 Services (WSS)
Windows Communication Foundation (WCF)
消息创建者 是一个可选组件,当你需要生成包含唯一数据的消息时,可以使用该组件。 消息创建者使用两种创建模式之一;同步和异步。 如果指定了同步消息创建模式,LoadGen 仅使用单个线程来创建消息,以确保每个消息都包含唯一的有效负载。 虽然同步模式保证每个消息内的唯一数据,但此模式也会限制可伸缩性。 LoadGen 还提供使用多个执行线程的异步消息创建者;这使 LoadGen 能够达到目标消息速率(因为它只需创建更多线程)。 在异步模式下,消息创建者可配置为随机修改每个消息的数据。 但是,由于它使用多个线程,因此不能保证在测试期间生成的所有消息都将包含唯一的有效负载。
限制控制器 确保在测试运行时通过控制负载生成器以稳定速率传输消息。 LoadGen 还提供自定义调控功能,使你能够根据特定条件来控制消息流,包括:
文件夹中的文件数
数据库表中的行数
MSMQ 或 MQSeries 消息队列的深度
示例 LoadGen 配置文件
所有 LoadGen 配置信息都存储在 xml 文件中。 LoadGen 配置文件包含一个 <CommonSection> 元素,该元素配置 LoadGen 方案中所有 LoadGen 任务的默认设置。 LoadGen 配置文件还可以包含一个或多个 <节> 元素,这些元素为特定的 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 复制到文件投递 C:\Scenarios\FileToFile\Receive <DstFilePath>。 此处使用文件传输,因为这是 CommonSection 元素中 <传输名称> 元素 <中指定的默认> 传输。
谨慎
此示例或指南引用敏感信息,例如连接字符串或用户名和密码。 切勿在代码中硬编码这些值,并确保使用最安全的身份验证来保护机密数据。 有关详细信息,请参阅以下文档:
<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 节。 如果在环境中使用此配置文件,则还需要为 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 用于在步骤 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 组合在一起,以自动执行性能测试。 可以使用与功能测试相同的方式从 Visual Studio 的测试工具执行 BizUnit 配置文件描述的负载测试。 采用此方法可以集中管理、管理和收集性能测试的数据。
通过在自动化方法中使用 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>