Partager via


Utilisation de BizUnit et LoadGen pour automatiser les tests de performances et de stabilité

Cette rubrique fournit des informations sur l’utilisation de l’outil Microsoft BizTalk LoadGen 2007 avec BizUnit pour automatiser les tests de performances et de stabilité d’une solution BizTalk Server.

BizTalk Server des tests de performances, pas à pas

Avant d’examiner comment automatiser BizTalk Server tests de performances, il est utile de savoir quelles étapes sont généralement effectuées dans un test de performances. Les étapes suivantes sont représentatives d’un processus de test de performances « standard » BizTalk Server :

  1. Créez un répertoire de résultats de test pour stocker les résultats et les données collectées, par exemple les journaux des événements, les journaux de trace, les données Analyseur de performances.

  2. Effacez les journaux des événements sur tous les serveurs de l’environnement de test.

  3. Arrêtez toutes les instances d’hôte BizTalk.

  4. Arrêtez toutes les instances IIS qui exécutent des hôtes BizTalk isolés, tels que les gestionnaires d’adaptateurs de réception SOAP et HTTP.

  5. Redémarrez toutes les instances de SQL Server utilisées par les ordinateurs exécutant BizTalk Server.

  6. Nettoyez la base de données MessageBox pour vous assurer qu’il n’y a pas de données restantes des exécutions de tests précédentes. Cela est important, car toutes les données restantes peuvent fausser les résultats des tests.

  7. Démarrez les instances d’hôte BizTalk.

  8. Démarrez les compteurs de Analyseur de performances appropriés sur tous les serveurs de l’environnement de test.

  9. Envoyer des messages de préparation via le système pour initialiser les caches système.

  10. Une fois les messages de préparation traités, suivez l’heure de début du test dans une base de données de résultats de test SQL Server.

  11. Démarrez le test de performances en démarrant tous les agents de test LoadGen.

  12. Attendez que le test se termine : souvent, cela peut être effectué systématiquement en mesurant la valeur d’un compteur de Analyseur de performances, comme la longueur de la file d’attente de l’hôte.

  13. Suivez l’heure de fin du test dans une base de données de résultats de test SQL.

  14. Arrêtez les compteurs de Analyseur de performances appropriés sur tous les serveurs de l’environnement de test.

  15. Enregistrez les données de test dans le répertoire des résultats des tests créé précédemment.

  16. Effectuez tout nettoyage nécessaire pour la prochaine série de tests.

    Chacune des étapes qui viennent d’être répertoriées peut être automatisée à l’aide de BizUnit. En utilisant les ressources d’étape de test existantes que BizUnit fournit, vous pouvez générer rapidement et facilement un test de performances automatisé pour une solution BizTalk Server. L’un des principaux avantages de l’automatisation des tests de performances à l’aide de BizUnit est la flexibilité d’exécuter des tests pendant la nuit, ce qui signifie que les résultats sont prêts à être analysés le matin. Cela réduit considérablement la charge des tests de performances sur une équipe de projet.

Outil Microsoft BizTalk LoadGen 2007

L’outil BizTalk LoadGen 2007 (LoadGen) est un outil de test de charge qui a été développé par l’équipe test de stress et de performances du groupe de produits BizTalk Server 2006. LoadGen a été conçu pour définir rapidement, facilement et de manière fiable des tests de charge qui simulent des volumes de messages au niveau de la production. LoadGen est multithread, piloté par la configuration, et prend en charge plusieurs transports. Le groupe de produits BizTalk utilise LoadGen quotidiennement ; Par conséquent, vous pouvez avoir un degré élevé de confiance que l’outil est durable, adapté à cet objectif et capable de simuler une grande variété de scénarios BizTalk.

LoadGen utilise une conception modulaire qui se compose de trois couches : présentation, infrastructure et composant. La couche de présentation se compose d’un pilote de ligne de commande, qui est responsable de la conduite de l’infrastructure. La couche framework lit un fichier de configuration, puis exécute les composants qui y sont spécifiés. La couche de composants se compose de trois types de composants : les générateurs de charge, lescréateurs de messages et les contrôleurs de limitation. Chacun de ces composants étant extensible, vous pouvez créer les vôtres et les brancher dans LoadGen pour répondre aux besoins de votre scénario. Étant donné que LoadGen a été développé par le groupe de produits BizTalk Server, vous devez constater que les composants prêtes à l’emploi répondent à la plupart de vos exigences de test de charge. Chacun de ces composants est décrit plus en détail ici.

  • Les générateurs de charge sont responsables de la transmission des messages via un transport particulier. Des générateurs de charge sont fournis pour les transports suivants :

    • Fichier

    • HTTP

    • Mqseries

    • MSMQLarge

    • MSMQ

    • SOAP

    • Améliorations des services web (WSE)

    • Windows SharePoint Services (WSS)

    • Windows Communication Foundation (WCF)

  • Les créateurs de messages sont un composant facultatif qui peut être utilisé lorsque vous devez générer des messages contenant des données uniques. Les créateurs de messages utilisent l’un des deux modes de création suivants : synchrone et asynchrone. Si le mode de création de message synchrone est spécifié, LoadGen utilise un seul thread pour créer des messages afin de s’assurer que chaque message contient une charge utile unique. Bien que le mode synchrone garantisse des données uniques dans chaque message, ce mode limite également la scalabilité. LoadGen fournit également des créateurs de messages asynchrones qui utilisent plusieurs threads d’exécution ; Cela permet à LoadGen d’atteindre le taux de message cible (car il peut simplement créer plus de threads). En mode asynchrone, le créateur de message peut être configuré pour modifier de manière aléatoire les données de chaque message individuel. Toutefois, étant donné qu’il utilise plusieurs threads, il ne garantit pas que tous les messages générés pendant le test contiennent une charge utile unique.

  • Les contrôleurs de limitation garantissent que les messages sont transmis à un rythme stable en gouvernant les générateurs de charge pendant l’exécution du test. LoadGen expose également une limitation personnalisée, qui vous permet de contrôler le flux de messages en fonction de critères, notamment :

    • Nombre de fichiers dans un dossier

    • Nombre de lignes dans une table de base de données

    • Profondeur d’une file d’attente de messages MSMQ ou MQSeries

    L’outil Microsoft BizTalk LoadGen 2007 est disponible en téléchargement.

Exemple de fichier de configuration LoadGen

Toutes les informations de configuration LoadGen sont stockées dans un fichier xml. Le fichier de configuration LoadGen contient un <élément CommonSection> qui configure les paramètres par défaut pour toutes les tâches LoadGen dans le scénario LoadGen. Le fichier de configuration LoadGen peut également contenir un ou plusieurs <éléments Section> qui fournissent des paramètres de configuration pour une tâche LoadGen spécifique. Les entrées d’un <élément Section> remplacent toutes les valeurs par défaut spécifiées dans l’élément <CommonSection> .

L’exemple de fichier de configuration LoadGen qui suit est une version légèrement modifiée du FileToFileLG.xml exemple de fichier de configuration inclus dans le sous-répertoire \ConfigFiles\ConsoleConfigFiles du répertoire d’installation LoadGen. Ce test envoie 25 messages <LotSizePerInterval> toutes les 200 millisecondes <SleepInterval>, 5 threads par générateur <de charge NumThreadsperSection>et arrête le test de charge après l’envoi de 5 000 messages <NumFiles> .

Le contrôleur de limitation de fichier est spécifié dans la <section ThrottleController> . La valeur de <ThresholdRange> est définie sur 1000-2000, ce qui signifie que si l’emplacement du fichier C :\Scenarios\FileToFile\Receive (Parameters) contient moins de 1 000 ou plus de 2 000 fichiers, le contrôleur de limitation limite le générateur de fichiers et augmente/diminue la charge selon les besoins. Le nombre de fichiers à l’emplacement du fichier est vérifié toutes les 1 000 millisecondes <SleepInterval>. L’élément <FileSection> définit les propriétés des messages à envoyer par les générateurs de charge. Le fichier <FileToFileLG.xml SrcFilePath> sera copié par LoadGen dans le fichier C :\Scenarios\FileToFile\Receive <DstFilePath>. Le transport de fichiers est utilisé ici, car il s’agit du transport par défaut spécifié dans l’élément <Transport Name> au sein de l’élément <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>

Utilisation de BizUnit pour piloter LoadGen

BizUnit fournit loadGenExecuteStep pour faciliter les tests automatisés de performances et de stabilité. L’étape TestExecution d’un exemple de fichier de configuration BizUnit qui utilise LoadGenExecuteStep est illustrée dans l’exemple de code suivant. Notez que cette étape accepte un paramètre de configuration unique, qui est l’emplacement du fichier de configuration 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>

Le reste de cette rubrique décrit le fichier de configuration d’un cas de test BizUnit qui automatise les tests de performances avec LoadGen.

Notes

Ce fichier de configuration peut être utilisé comme modèle pour intégrer rapidement BizUnit et LoadGen dans le cadre de vos tests de performances. Avant d’exécuter ce cas de test, vous devez personnaliser le fichier de configuration pour votre environnement. Les sections du fichier de configuration qui doivent être personnalisées sont indiquées en conséquence.

Pour commencer, spécifiez une valeur pour le paramètre testName approprié pour la solution BizTalk.

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

Ajoutez ensuite des variables de contexte à l’étape TestSetup . Ces variables de contexte seront référencées pendant toute la durée du cas de test. Pour utiliser ce fichier de configuration, modifiez les valeurs spécifiées pour TestCaseResultsDir (C :\Dev Work\Perf Guide Demos\PerfResults\) et Machine (BIZTALKADMIN01) pour qu’elles correspondent à votre environnement.

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

Une fois l’étape TestSetup terminée, nous entrons dans la phase TestExecution . La première étape consiste à arrêter les instances d’hôte BizTalk. Une section BizUnit.HostConductorStep distincte doit être ajoutée pour chaque instance hôte distinct. Si vous utilisez ce fichier de configuration dans votre environnement, vous devez également entrer les valeurs appropriées pour HostInstanceName, Server, Logon et 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>

Après avoir arrêté toutes les instances de l’hôte, nous propre la base de données BizTalk MessageBox à l’aide de la procédure stockée bts_CleanupMsgBox. Pour utiliser cette étape, vous devez modifier la valeur de ConnectionString pour qu’elle corresponde à votre environnement.

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

L’étape 3 de l’étape TestExecution démarre Analyseur de performances compteurs (PerfMon) spécifiés dans un fichier de modèle. Un exemple de fichier de modèle est répertorié sous l’exemple BizUnit.PerfmonCountersStep ci-dessous. Pour utiliser le fichier de modèle, vous devez modifier la valeur spécifiée pour CountersListFilePath afin qu’elle corresponde à votre environnement. Modifiez l’exemple de fichier de modèle de compteur de l’analyseur de performances pour inclure tous les compteurs PerfMon que vous souhaitez surveiller ou supprimer ceux qui ne sont pas pertinents pour votre scénario.

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

Exemple de fichier de modèle de compteur Analyseur de performances (Test_06_PerfCounters.txt référencé par 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(*)\*

Maintenant, nous commençons les instances hôtes BizTalk Server. Une section BizUnit.HostConductorStep distincte doit être ajoutée pour chaque instance hôte distinct (distinct inclut plusieurs instances d’un hôte sur plusieurs serveurs). Si vous utilisez ce fichier de configuration dans votre environnement, vous devez également entrer les valeurs appropriées pour HostInstanceName, Server, Logon et 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>

Étape 5 « prime » le système en envoyant quelques messages à BizTalk Server à l’aide de BizUnit.LoadGenExecuteStep ; modifiez la valeur du paramètre LoadGenTestConfig pour qu’il corresponde à votre environnement.

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

L’étape 6 écrit le fichier de configuration LoadGen en mémoire afin qu’il puisse ensuite être écrit dans la base de données de résultats de test une fois le test terminé.


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

Nous écrivons maintenant l’heure de début des tests dans une base de données de résultats de test. Modifiez les paramètres ConnectionString et RawSQLQuery pour qu’ils correspondent à votre environnement.

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

À l’étape 8, le test de performances réel est lancé à l’aide de BizUnit.LoadGenExecuteStep. Cette étape spécifie le même fichier de configuration LoadGen que celui utilisé à l’étape 5, mais vous pouvez spécifier n’importe quel fichier de configuration LoadGen valide ici. BizUnit.DelayStep est utilisé à l’étape 9 pour imposer un délai de 5 secondes afin de laisser le temps aux messages de commencer à circuler dans le système. La longueur de la file d’attente de l’hôte est calculée à l’aide de BizUnit.PerMonCounterMonitorStep. Lorsque ce paramètre atteint la valeur 1, comme spécifié à l’étape 10, le test est terminé. Modifiez les valeurs des paramètres InstanceName et Server pour qu’ils correspondent au nom de l’hôte instance et du serveur que vous souhaitez surveiller dans votre environnement.

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

À la fin du test, nous utilisons BizUnit.DBExecuteNonQueryStep pour mettre à jour la base de données des résultats de test. L’achèvement de cette étape signifie la fin de l’étape d’exécution du test, comme indiqué par la balise /TestExecution> fermante<. Là encore, vous devez modifier les paramètres ConnectionString et RawSQLQuery pour qu’ils correspondent à votre environnement.

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

Une fois la phase d’exécution terminée, nous entrons dans la phase de nettoyage de test. Cette étape utilise BizUnit.PerfmonCountersStep pour arrêter les compteurs Analyseur de performances démarrés précédemment (à l’étape 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>

Cet exemple illustre la façon dont BizUnit peut être associé à LoadGen pour automatiser les tests de performances. Le test de charge décrit par le fichier de configuration BizUnit peut être exécuté à partir des outils de test de Visual Studio de la même manière que le test fonctionnel. L’adoption de cette approche vous permet de gérer, d’administrer et de collecter de manière centralisée des données pour vos tests de performances.

En utilisant BizUnit et LoadGen dans une approche automatisée, il est très facile de planifier plusieurs séries de tests pendant les heures creuses, ce qui fournit de nombreux résultats de test pour l’analyse pendant les heures normales de travail. Lors de l’automatisation des tests de performances, envisagez d’utiliser des scripts LoadGen qui modélisent différentes charges via le système. Par exemple, vous pouvez simuler des degrés variables (75 %, 100 % et 125 %) du volume de messages de production attendu. Lors d’un test de charge, il est particulièrement important de tester le scénario de surcharge ou de « mauvais jour ». Avant de mettre le système en production, vous devez savoir quel est le débit maximal durable (MST) pour chaque cas de test dans l’environnement BizTalk Server. Pour plus d’informations sur les performances durables maximales, consultez Qu’est-ce que les performances durables (https://go.microsoft.com/fwlink/?LinkID=132304) dans la documentation BizTalk Server 2009.

L’exemple de fichier de configuration Complet BizUnit LoadGen

La liste suivante contient l’intégralité du contenu du fichier de configuration BizUnit référencé précédemment.

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

Voir aussi

Utilisation de BizUnit pour faciliter les tests automatisés