Compartir vía


Uso de BizUnit y LoadGen para automatizar las pruebas de rendimiento y estabilidad

En este tema se proporciona información sobre cómo usar la herramienta LoadGen 2007 de Microsoft BizTalk con BizUnit para automatizar las pruebas de rendimiento y estabilidad de una solución de BizTalk Server.

BizTalk Server pruebas de rendimiento, paso a paso

Antes de investigar cómo automatizar BizTalk Server pruebas de rendimiento, resulta útil saber qué pasos se realizan normalmente en una prueba de rendimiento. Los pasos siguientes son representativos de un proceso de prueba de rendimiento "típico" BizTalk Server:

  1. Cree un directorio de resultados de pruebas para almacenar los resultados y los datos recopilados, por ejemplo, registros de eventos, registros de seguimiento Monitor de rendimiento datos.

  2. Borre los registros de eventos en todos los servidores del entorno de prueba.

  3. Detenga todas las instancias de host de BizTalk.

  4. Detenga todas las instancias de IIS que ejecuten hosts de BizTalk aislados, como los controladores de adaptadores de recepción HTTP y SOAP.

  5. Reinicie todas las instancias de SQL Server usadas por los equipos que ejecutan BizTalk Server.

  6. Limpie la base de datos messageBox para asegurarse de que no hay datos sobrantes de las pruebas anteriores. Esto es importante porque los datos sobrantes podrían sesgar los resultados de las pruebas.

  7. Inicie las instancias de host de BizTalk.

  8. Inicie los contadores de Monitor de rendimiento pertinentes en todos los servidores del entorno de prueba.

  9. Envíe mensajes de "priming" a través del sistema para inicializar las memorias caché del sistema.

  10. Una vez procesados los mensajes de preparación, realice un seguimiento de la hora de inicio de la prueba en una base de datos de resultados de pruebas SQL Server.

  11. Inicie la prueba de rendimiento iniciando todos los agentes de prueba loadGen.

  12. Espere a que se complete la prueba: a menudo esto se puede realizar sistemáticamente mediante la medición del valor de un contador de Monitor de rendimiento, como la longitud de la cola del host.

  13. Realice un seguimiento de la hora de finalización de la prueba en una base de datos de resultados de pruebas SQL.

  14. Detenga los contadores de Monitor de rendimiento pertinentes en todos los servidores del entorno de prueba.

  15. Guarde los datos de prueba en el directorio de resultados de pruebas que se creó anteriormente.

  16. Realice cualquier limpieza necesaria para la siguiente ejecución de prueba.

    Cada uno de los pasos que se muestran se puede automatizar mediante BizUnit. Mediante el uso de los recursos de pasos de prueba existentes que proporciona BizUnit, puede generar de forma rápida y sencilla una prueba de rendimiento automatizada para una solución de BizTalk Server. Una de las principales ventajas de automatizar las pruebas de rendimiento mediante BizUnit es la flexibilidad de ejecutar pruebas durante la noche, lo que significa que los resultados están listos para el análisis por la mañana. Esto reduce considerablemente la carga de las pruebas de rendimiento en un equipo de proyecto.

La herramienta Microsoft BizTalk LoadGen 2007

La herramienta BizTalk LoadGen 2007 (LoadGen) es una herramienta de prueba de carga desarrollada por el equipo de pruebas de esfuerzo y rendimiento del grupo de productos BizTalk Server 2006. LoadGen se diseñó para definir de forma rápida, sencilla y confiable las pruebas de carga que simulan volúmenes de mensajes de nivel de producción. LoadGen es multiproceso, controlado por la configuración y admite varios transportes. El grupo de productos de BizTalk usa LoadGen diariamente; por lo tanto, puede tener un alto grado de confianza de que la herramienta es duradera, cabe para el propósito y puede simular una amplia variedad de escenarios de BizTalk.

LoadGen emplea un diseño modular que consta de tres capas: presentación, marco y componente. La capa de presentación consta de un controlador de línea de comandos, que es responsable de impulsar el marco. La capa de marco lee un archivo de configuración y, a continuación, ejecuta los componentes especificados en él. La capa de componentes consta de tres tipos de componentes: generadores de carga, creadores de mensajes y controladores de limitación. Cada uno de estos componentes es extensible, por lo que puede crear los suyos propios y conectarlos a LoadGen para satisfacer las necesidades de su escenario. Dado que LoadGen fue desarrollado por el grupo de productos BizTalk Server, debería averiguar que los componentes predefinidos cumplirán la mayoría de los requisitos de pruebas de carga. Cada uno de estos componentes se describe con más detalle aquí.

  • Los generadores de carga son responsables de transmitir mensajes a través de un transporte determinado. Se proporcionan generadores de carga para los siguientes transportes:

    • Archivo

    • HTTP

    • MQSeries

    • MSMQLarge

    • MSMQ

    • SOAP

    • Mejoras de servicios web (WSE)

    • Windows SharePoint Services (WSS)

    • Windows Communication Foundation (WCF)

  • Los creadores de mensajes son un componente opcional que se puede usar cuando es necesario generar mensajes que contienen datos únicos. Los creadores de mensajes usan uno de los dos modos de creación; sincrónico y asincrónico. Si se especifica el modo de creación de mensajes sincrónico, LoadGen usa solo un único subproceso para crear mensajes para asegurarse de que cada mensaje contiene una carga única. Aunque el modo sincrónico garantiza datos únicos dentro de cada mensaje, este modo también limita la escalabilidad. LoadGen también proporciona creadores de mensajes asincrónicos que usan varios subprocesos de ejecución; esto permite que LoadGen cumpla la tasa de mensajes de destino (porque simplemente puede crear más subprocesos). En modo asincrónico, el creador del mensaje se puede configurar para modificar aleatoriamente los datos de cada mensaje individual. Sin embargo, dado que usa varios subprocesos, no garantiza que todos los mensajes generados durante la prueba contengan una carga única.

  • Los controladores de limitación garantizan que los mensajes se transmitan a una velocidad estable al controlar los generadores de carga mientras se ejecuta la prueba. LoadGen también expone la limitación personalizada, lo que le permite controlar el flujo de mensajes en función de los criterios, entre los que se incluyen:

    • Número de archivos de una carpeta

    • Número de filas de una tabla de base de datos

    • Profundidad de una cola de mensajes MSMQ o MQSeries

    La herramienta Microsoft BizTalk LoadGen 2007 está disponible para su descarga.

Archivo de configuración loadGen de ejemplo

Toda la información de configuración de LoadGen se almacena en un archivo xml. El archivo de configuración LoadGen contiene un <elemento CommonSection> que configura los valores predeterminados para todas las tareas LoadGen en el escenario loadGen. El archivo de configuración LoadGen también puede contener uno o varios <elementos Section> que proporcionan opciones de configuración para una tarea LoadGen específica. Las entradas de un <elemento Section> reemplazan los valores predeterminados especificados en el <elemento CommonSection> .

El archivo de configuración loadGen de ejemplo que sigue es una versión ligeramente modificada del archivo de configuración de ejemplo de FileToFileLG.xml que se incluye en el subdirectorio \ConfigFiles\ConsoleConfigFiles del directorio de instalación loadGen. Esta prueba envía 25 mensajes <LotSizePerInterval> cada 200 milisegundos SleepInterval>, 5 subprocesos <por generador <de carga NumThreadsperSection>y detendrá la prueba de carga después de que se hayan enviado 5000 mensajes <NumFiles>.

El controlador de limitación de archivos se especifica en la <sección ThrottleController> . El valor de <ThresholdRange> se establece en 1000-2000, lo que significa que si la ubicación del archivo C:\Scenarios\FileToFile\Receive (Parámetros) tiene menos de 1000 o más de 2000 archivos, el controlador de limitación limitará el generador de archivos y aumentará o disminuirá la carga según corresponda. El número de archivos de la ubicación del archivo se comprobará cada 1000 milisegundos <SleepInterval>. El <elemento FileSection> define las propiedades de los mensajes que enviarán los generadores de carga. LoadGen copiará el archivo <FileToFileLG.xml SrcFilePath> en el filedrop C:\Scenarios\FileToFile\Receive <DstFilePath>. El transporte de archivos se usa aquí porque este es el transporte predeterminado especificado en el <elemento Transport Name> dentro del <elemento 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>

Usar BizUnit para controlar LoadGen

BizUnit proporciona LoadGenExecuteStep para facilitar las pruebas automatizadas de rendimiento y estabilidad. La fase TestExecution de un archivo de configuración de BizUnit de ejemplo que usa LoadGenExecuteStep se muestra en el ejemplo de código siguiente. Tenga en cuenta que este paso acepta un único parámetro de configuración, que es la ubicación del archivo de configuración 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>

En el resto de este tema se describe el archivo de configuración de un caso de prueba de BizUnit que automatiza las pruebas de rendimiento con LoadGen.

Nota

Este archivo de configuración se puede usar como plantilla para integrar rápidamente BizUnit y LoadGen como parte de las pruebas de rendimiento. Antes de ejecutar este caso de prueba, deberá personalizar el archivo de configuración para su entorno. Las secciones del archivo de configuración que se deben personalizar se indican en consecuencia.

Para empezar, especifique un valor para el parámetro testName que sea adecuado para la solución de BizTalk.

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

A continuación, agregue variables de contexto a la fase TestSetup . Se hará referencia a estas variables de contexto a lo largo de la duración del caso de prueba. Para usar este archivo de configuración, modifique los valores especificados para TestCaseResultsDir (C:\Dev Work\Perf Guide Demos\PerfResults\) y Machine (BIZTALKADMIN01) para que coincidan con el entorno.

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

Después de completar la fase TestSetup , entramos en la fase TestExecution . El primer paso es detener las instancias de host de BizTalk. Se debe agregar una sección bizUnit.HostConductorStep independiente para cada instancia de host distinta. Si usa este archivo de configuración en su entorno, también deberá especificar los valores adecuados para HostInstanceName, Server, Logon y Password.

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

Después de detener todas las instancias de host, limpiamos la base de datos de Cuadro de mensajes de BizTalk mediante el procedimiento almacenado bts_CleanupMsgBox. Para usar este paso, debe modificar el valor de ConnectionString para que coincida con el entorno.

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

El paso 3 de la fase TestExecution inicia Monitor de rendimiento (PerfMon) contadores especificados en un archivo de plantilla. Un archivo de plantilla de ejemplo aparece debajo del ejemplo BizUnit.PerfmonCountersStep siguiente. Para usar el archivo de plantilla, debe modificar el valor especificado para que CountersListFilePath coincida con el entorno. Modifique el archivo de plantilla de contador del monitor de rendimiento de ejemplo para incluir los contadores de PerfMon que quiera supervisar o quitar los que no sean relevantes para su escenario.

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

Archivo de plantilla de contador de Monitor de rendimiento de ejemplo (Test_06_PerfCounters.txt al que hace referencia 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(*)\*

Ahora se inician las instancias de host de BizTalk Server. Se debe agregar una sección bizUnit.HostConductorStep independiente para cada instancia de host distinta (distinct incluye varias instancias de un host entre servidores). Si usa este archivo de configuración en su entorno, también deberá especificar los valores adecuados para HostInstanceName, Server, Logon y Password.

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

Paso 5 "primos" del sistema mediante el envío de un par de mensajes a BizTalk Server mediante BizUnit.LoadGenExecuteStep; cambie el valor del parámetro LoadGenTestConfig para que coincida con el entorno.

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

En el paso 6 se escribe el archivo de configuración loadGen en la memoria para que se pueda escribir en la base de datos de resultados de pruebas cuando se complete la prueba.


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

Ahora se escribe la hora de inicio de la prueba en una base de datos de resultados de pruebas. Modifique los parámetros ConnectionString y RawSQLQuery para que coincidan con el entorno.

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

El paso 8 es donde se inicia la prueba de rendimiento real mediante BizUnit.LoadGenExecuteStep. Este paso especifica el mismo archivo de configuración de LoadGen que se usó en el paso 5, pero puede especificar cualquier archivo de configuración loadGen válido aquí. BizUnit.DelayStep se usa en el paso 9 para imponer un retraso de 5 segundos para permitir que los mensajes empiecen a fluir por el sistema. La longitud de la cola de host se calcula con BizUnit.PerMonCounterMonitorStep. Cuando este parámetro alcanza un valor de 1 como se especifica en el paso 10, se concluye la prueba. Cambie los valores de los parámetros InstanceName y Server para que coincidan con el nombre de la instancia de host y el servidor que desea supervisar en su entorno.

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

Al concluir la prueba, usamos BizUnit.DBExecuteNonQueryStep para actualizar la base de datos de resultados de pruebas. La finalización de este paso significa el final de la fase de ejecución de pruebas, como se indica en la etiqueta /TestExecution> de cierre<. De nuevo, debe modificar los parámetros ConnectionString y RawSQLQuery para que coincidan con el entorno.

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

Después de finalizar la fase de ejecución, entramos en la fase de limpieza de pruebas. En esta fase se usa BizUnit.PerfmonCountersStep para detener los contadores de Monitor de rendimiento que se iniciaron anteriormente (en el paso 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>

En este ejemplo se muestra cómo se puede combinar BizUnit con LoadGen para automatizar las pruebas de rendimiento. La prueba de carga descrita por el archivo de configuración de BizUnit se puede ejecutar desde las herramientas de pruebas de Visual Studio de la misma manera que las pruebas funcionales. La adopción de este enfoque le permite administrar, administrar y recopilar datos de forma centralizada para las pruebas de rendimiento.

Mediante el uso de BizUnit y LoadGen en un enfoque automatizado, es muy fácil programar varias ejecuciones de pruebas para que se produzcan durante las horas de espera, lo que proporcionará resultados de pruebas amplios para el análisis durante el horario laboral normal. Al automatizar las pruebas de rendimiento, considere la posibilidad de usar scripts LoadGen que modelen diferentes cargas a través del sistema, por ejemplo, puede simular distintos grados (75 %, 100 % y 125 %) del volumen de mensajes de producción esperado. Al realizar pruebas de carga, es especialmente importante probar el escenario de sobrecarga o "día incorrecto". Antes de colocar el sistema en producción, debe saber cuál es el rendimiento máximo sostenible (MST) para cada caso de prueba en el entorno de BizTalk Server. Para obtener más información sobre el rendimiento máximo sostenible, consulte ¿Qué es el rendimiento sostenible? (https://go.microsoft.com/fwlink/?LinkID=132304) en la documentación de BizTalk Server 2009.

Archivo de configuración de ejemplo de BizUnit LoadGen completo

La lista siguiente contiene todo el contenido del archivo de configuración de BizUnit al que se hace referencia anteriormente.

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

Consulte también

Uso de BizUnit para facilitar las pruebas automatizadas