Freigeben über


Automatisieren der Leistung und Stabilitätstests mithilfe von BizUnit und LoadGen

Dieses Thema enthält Informationen zur Verwendung des Microsoft BizTalk LoadGen 2007-Tools mit BizUnit zum Automatisieren von Leistungs- und Stabilitätstests einer BizTalk Server Lösung.

BizTalk Server Leistungstests schritt-für-Schritt

Bevor Sie untersuchen, wie BizTalk Server Leistungstests automatisiert werden, ist es nützlich zu wissen, welche Schritte in der Regel in einem Leistungstest ausgeführt werden. Die folgenden Schritte sind repräsentativ für einen "typischen" BizTalk Server Leistungstestprozess:

  1. Erstellen Sie ein Verzeichnis mit Testergebnissen, um gesammelte Ergebnisse und Daten zu speichern, z. B. Ereignisprotokolle, Ablaufverfolgungsprotokolle Leistungsmonitor Daten.

  2. Löschen Sie die Ereignisprotokolle auf allen Servern innerhalb der Testumgebung.

  3. Beenden Sie alle BizTalk-Hostinstanzen.

  4. Beenden Sie alle IIS-Instanzen, auf denen isolierte BizTalk-Hosts wie die SOAP- und HTTP-Empfangsadapterhandler ausgeführt werden.

  5. Starten Sie alle Instanzen von SQL Server neu, die von den Computern verwendet werden, auf denen BizTalk Server ausgeführt wird.

  6. Bereinigen Sie die MessageBox-Datenbank, um sicherzustellen, dass keine Daten aus früheren Testausführungen übrig bleiben. Dies ist wichtig, da alle übrig gebliebenen Daten die Testergebnisse verzerren können.

  7. Starten Sie die BizTalk-Hostinstanzen.

  8. Starten Sie die relevanten Leistungsmonitor-Indikatoren auf allen Servern in der Testumgebung.

  9. Senden Sie "Priming"-Nachrichten über das System, um die Systemcaches zu initialisieren.

  10. Nachdem die Grundnachrichten verarbeitet wurden, verfolgen Sie die Startzeit des Tests in einer SQL Server Testergebnisdatenbank nach.

  11. Starten Sie den Leistungstest, indem Sie alle LoadGen-Test-Agents starten.

  12. Warten Sie, bis der Test abgeschlossen ist. Dies kann häufig systematisch durch Messen des Werts eines Leistungsmonitor Zählers erfolgen, z. B. die Länge der Hostwarteschlange.

  13. Nachverfolgen der Testendzeit in einer SQL-Testergebnisdatenbank.

  14. Beenden Sie die relevanten Leistungsmonitor-Indikatoren auf allen Servern in der Testumgebung.

  15. Speichern Sie die Testdaten in dem zuvor erstellten Verzeichnis der Testergebnisse.

  16. Führen Sie alle erforderlichen Bereinigungen für den nächsten Testlauf aus.

    Jeder einzelne der gerade aufgeführten Schritte kann mit BizUnit automatisiert werden. Durch Die Verwendung der vorhandenen Testschrittressourcen, die BizUnit bereitstellt, können Sie schnell und einfach einen automatisierten Leistungstest für eine BizTalk Server Lösung generieren. Einer der Hauptvorteile der Automatisierung von Leistungstests mithilfe von BizUnit ist die Flexibilität, Tests über Nacht auszuführen – was bedeutet, dass die Ergebnisse morgens zur Analyse bereit sind. Dies reduziert den Aufwand für Leistungstests für ein Projektteam erheblich.

Das Microsoft BizTalk LoadGen 2007-Tool

Das BizTalk LoadGen 2007-Tool (LoadGen) ist ein Auslastungstesttool, das vom Stress- und Leistungstestteam in der Produktgruppe BizTalk Server 2006 entwickelt wurde. LoadGen wurde entwickelt, um schnell, einfach und zuverlässig Auslastungstests zu definieren, die Nachrichtenvolumes auf Produktionsebene simulieren. LoadGen ist multithreaded, konfigurationsgesteuert und unterstützt mehrere Transporte. Die BizTalk-Produktgruppe verwendet LoadGen täglich. Daher können Sie ein hohes Maß an Vertrauen darauf haben, dass das Tool dauerhaft ist, für den Zweck geeignet ist und in der Lage ist, eine Vielzahl von BizTalk-Szenarien zu simulieren.

LoadGen verwendet ein modulares Design, das aus drei Ebenen besteht: Präsentation, Framework und Komponente. Die Präsentationsebene besteht aus einem Befehlszeilentreiber, der für die Steuerung des Frameworks verantwortlich ist. Die Frameworkebene liest eine Konfigurationsdatei und führt dann die darin angegebenen Komponenten aus. Die Komponentenschicht besteht aus drei Arten von Komponenten: Lastgeneratoren, Nachrichtenersteller und Drosselungscontroller. Jede dieser Komponenten ist erweiterbar, sodass Sie ihre eigenen erstellen und an LoadGen anschließen können, um die Anforderungen Ihres Szenarios zu erfüllen. Da LoadGen von der BizTalk Server Produktgruppe entwickelt wurde, sollten Sie feststellen, dass die sofort einsatzbereiten Komponenten die meisten Ihrer Lasttestanforderungen erfüllen. Jede dieser Komponenten wird hier ausführlicher beschrieben.

  • Lastgeneratoren sind für die Übertragung von Nachrichten über einen bestimmten Transport verantwortlich. Lastgeneratoren werden für die folgenden Transporte bereitgestellt:

    • Datei

    • HTTP

    • Mqseries

    • MSMQLarge

    • MSMQ

    • SOAP

    • Webdiensterweiterungen (Web Services Enhancements, WSE)

    • Windows SharePoint Services (WSS)

    • Windows Communication Foundation (WCF)

  • Nachrichtenersteller sind eine optionale Komponente, die verwendet werden kann, wenn Sie Nachrichten generieren müssen, die eindeutige Daten enthalten. Nachrichtenersteller verwenden einen von zwei Erstellungsmodi; synchron und asynchron. Wenn der synchrone Nachrichtenerstellungsmodus angegeben ist, verwendet LoadGen nur einen einzelnen Thread, um Nachrichten zu erstellen, um sicherzustellen, dass jede Nachricht eine eindeutige Nutzlast enthält. Während der synchrone Modus eindeutige Daten innerhalb jeder Nachricht garantiert, schränkt dieser Modus auch die Skalierbarkeit ein. LoadGen stellt auch asynchrone Nachrichtenersteller bereit, die mehrere Ausführungsthreads verwenden. Dadurch kann LoadGen die Zielnachrichtenrate erreichen (da es einfach mehr Threads erstellen kann). Im asynchronen Modus kann der Nachrichtenersteller so konfiguriert werden, dass daten für jede einzelne Nachricht zufällig geändert werden. Da jedoch mehrere Threads verwendet werden, wird nicht garantiert, dass alle während des Tests generierten Nachrichten eine eindeutige Nutzlast enthalten.

  • Drosselungscontroller stellen sicher, dass Nachrichten mit einer konstanten Rate übertragen werden, indem sie die Auslastungsgeneratoren steuern, während der Test ausgeführt wird. LoadGen macht auch eine benutzerdefinierte Einschränkung verfügbar, mit der Sie den Nachrichtenfluss basierend auf Folgenden Kriterien steuern können:

    • Anzahl der Dateien in einem Ordner

    • Anzahl der Zeilen in einer Datenbanktabelle

    • Tiefe einer MSMQ- oder MQSeries-Nachrichtenwarteschlange

    Das Microsoft BizTalk LoadGen 2007-Tool steht zum Download zur Verfügung.

LoadGen-Beispielkonfigurationsdatei

Alle LoadGen-Konfigurationsinformationen werden in einer XML-Datei gespeichert. Die LoadGen-Konfigurationsdatei enthält ein <CommonSection-Element> , das die Standardeinstellungen für alle LoadGen-Aufgaben im LoadGen-Szenario konfiguriert. Die LoadGen-Konfigurationsdatei kann auch ein oder mehrere <Section-Elemente> enthalten, die Konfigurationseinstellungen für einen bestimmten LoadGen-Task bereitstellen. Einträge in einem <Section-Element> ersetzen alle Standardwerte, die <im CommonSection-Element> angegeben sind.

Die folgende LoadGen-Beispielkonfigurationsdatei ist eine leicht geänderte Version der FileToFileLG.xml Beispielkonfigurationsdatei, die im Unterverzeichnis \ConfigFiles\ConsoleConfigFiles des LoadGen-Installationsverzeichnisses enthalten ist. Dieser Test sendet 25 Nachrichten <LotSizePerInterval> alle 200 Millisekunden <SleepInterval>, 5 Threads pro Auslastungsgenerator <NumThreadsperSection>und beendet den Auslastungstest, nachdem 5000 Nachrichten <NumFiles> gesendet wurden.

Der Dateidrosselungscontroller wird im <Abschnitt ThrottleController> angegeben. Der Wert für <ThresholdRange> ist auf 1000-2000 festgelegt. Dies bedeutet, dass der Drosselungscontroller den Dateigenerator drosselt, wenn der Dateispeicherort C:\Scenarios\FileToFile\Receive (Parameters) weniger als 1000 oder mehr als 2000 Dateien aufweist. Die Anzahl der Dateien im Dateispeicherort wird alle 1000 Millisekunden <sleepInterval> überprüft. Das <FileSection-Element> definiert die Eigenschaften für die Nachrichten, die von den Lastgeneratoren gesendet werden sollen. Die FileToFileLG.xml Datei <SrcFilePath> wird von LoadGen in das filedrop C:\Scenarios\FileToFile\Receive <DstFilePath> kopiert. Der Dateitransport wird hier verwendet, da dies der Standardtransport ist, der <im Transport Name-Element> innerhalb des <CommonSection-Elements> angegeben ist.

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

Verwenden von BizUnit zum Steuern von LoadGen

BizUnit stellt loadGenExecuteStep bereit, um automatisierte Leistungs- und Stabilitätstests zu erleichtern. Die TestExecution-Phase einer BizUnit-Beispielkonfigurationsdatei, die LoadGenExecuteStep verwendet, wird im folgenden Codebeispiel gezeigt. Beachten Sie, dass dieser Schritt einen einzelnen Konfigurationsparameter akzeptiert, der der Speicherort der LoadGen-Konfigurationsdatei ist.

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

Im weiteren Verlauf dieses Themas wird die Konfigurationsdatei für einen BizUnit-Testfall beschrieben, der Leistungstests mit LoadGen automatisiert.

Hinweis

Diese Konfigurationsdatei kann als Vorlage verwendet werden, um BizUnit und LoadGen im Rahmen Ihrer Leistungstests schnell zu integrieren. Bevor Sie diesen Testfall ausführen, müssen Sie die Konfigurationsdatei für Ihre Umgebung anpassen. Abschnitte der Konfigurationsdatei, die angepasst werden müssen, werden entsprechend angegeben.

Geben Sie zunächst einen Wert für den testName-Parameter an, der für die BizTalk-Lösung geeignet ist.

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

Fügen Sie dann der TestSetup-Phase Kontextvariablen hinzu. Auf diese Kontextvariablen wird während der gesamten Dauer des Testfalls verwiesen. Um diese Konfigurationsdatei zu verwenden, ändern Sie die werte für TestCaseResultsDir (C:\Dev Work\Perf Guide Demos\PerfResults\) und Machine (BIZTALKADMIN01) an Ihre Umgebung.

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

Nach Abschluss der TestSetup-Phase treten wir in die TestExecution-Phase ein. Der erste Schritt besteht darin, die BizTalk-Hostinstanzen zu beenden. Für jeden einzelnen Host instance muss ein separater BizUnit.HostConductorStep-Abschnitt hinzugefügt werden. Wenn Sie diese Konfigurationsdatei in Ihrer Umgebung verwenden, müssen Sie auch die entsprechenden Werte für HostInstanceName, Server, Anmeldung und Kennwort eingeben.

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

Nachdem wir alle Hostinstanzen beendet haben, sauber wir die BizTalk MessageBox-Datenbank mithilfe der bts_CleanupMsgBox gespeicherten Prozedur auf. Um diesen Schritt zu verwenden, müssen Sie den Wert für ConnectionString so ändern, dass er ihrer Umgebung entspricht.

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

Schritt 3 der TestExecution-Phase startet Leistungsmonitor -Indikatoren (PerfMon), die in einer Vorlagendatei angegeben sind. Eine Beispielvorlagendatei ist unter dem Beispiel BizUnit.PerfmonCountersStep unten aufgeführt. Um die Vorlagendatei zu verwenden, müssen Sie den für CountersListFilePath angegebenen Wert so ändern, dass er Ihrer Umgebung entspricht. Ändern Sie die Beispiel-Leistungsindikatorvorlagendatei so, dass sie alle PerfMon-Leistungsindikatoren einschließt, die Sie überwachen oder entfernen möchten, die für Ihr Szenario nicht relevant sind.

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

Beispiel Leistungsmonitor Leistungsindikatorvorlagendatei (Test_06_PerfCounters.txt vom BizUnit.PerfmonCountersStep referenziert):

\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(*)\*

Nun starten wir die BizTalk Server Hostinstanzen. Ein separater BizUnit.HostConductorStep-Abschnitt muss für jeden einzelnen Host instance hinzugefügt werden (distinct umfasst mehrere Serverinstanzen eines Hosts). Wenn Sie diese Konfigurationsdatei in Ihrer Umgebung verwenden, müssen Sie auch die entsprechenden Werte für HostInstanceName, Server, Anmeldung und Kennwort eingeben.

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

Schritt 5 "primet" das System, indem einige Nachrichten mithilfe von BizUnit.LoadGenExecuteStep an BizTalk Server gesendet werden. Ändern Sie den Wert des LoadGenTestConfig-Parameters so, dass er Ihrer Umgebung entspricht.

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

Schritt 6 schreibt die LoadGen-Konfigurationsdatei in den Arbeitsspeicher, sodass sie nach Abschluss des Tests in die Testergebnisdatenbank geschrieben werden kann.


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

Nun schreiben wir die Startzeit des Tests in eine Testergebnisdatenbank. Ändern Sie die Parameter ConnectionString und RawSQLQuery an Ihre Umgebung.

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

In Schritt 8 wird der tatsächliche Leistungstest mit BizUnit.LoadGenExecuteStep initiiert. In diesem Schritt wird dieselbe LoadGen-Konfigurationsdatei angegeben, die in Schritt 5 verwendet wurde. Sie können jedoch hier eine beliebige gültige LoadGen-Konfigurationsdatei angeben. BizUnit.DelayStep wird in Schritt 9 verwendet, um eine Verzögerung von 5 Sekunden zu erzwingen, damit die Zeit für Nachrichten beginnt, das System zu durchlaufen. Die Länge der Hostwarteschlange wird mithilfe von BizUnit.PerMonCounterMonitorStep berechnet. Wenn dieser Parameter den in Schritt 10 angegebenen Wert 1 erreicht, wird der Test abgeschlossen. Ändern Sie die Werte für die Parameter InstanceName und Server so, dass sie dem Namen des Hosts instance und Servers entsprechen, die Sie in Ihrer Umgebung überwachen möchten.

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

Am Ende des Tests verwenden wir BizUnit.DBExecuteNonQueryStep , um die Testergebnisdatenbank zu aktualisieren. Der Abschluss dieses Schritts bedeutet das Ende der Testausführungsphase, wie durch das schließende <Tag /TestExecution> angegeben. Auch hier müssen Sie die Parameter ConnectionString und RawSQLQuery so ändern, dass sie ihrer Umgebung entsprechen.

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

Nach Abschluss der Ausführungsphase treten wir in die Testbereinigungsphase ein. In dieser Phase wird BizUnit.PerfmonCountersStep verwendet, um die zuvor (in Schritt 3) gestarteten Leistungsmonitor Leistungsindikatoren zu beenden.

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

In diesem Beispiel wurde veranschaulicht, wie BizUnit mit LoadGen kombiniert werden kann, um Leistungstests zu automatisieren. Der auslastungstest, der in der BizUnit-Konfigurationsdatei beschrieben wird, kann über die Testtools von Visual Studio auf die gleiche Weise wie der Funktionstest ausgeführt werden. Mit diesem Ansatz können Sie Daten für Ihre Leistungstests zentral verwalten, verwalten und sammeln.

Durch die Verwendung von BizUnit und LoadGen in einem automatisierten Ansatz ist es sehr einfach, mehrere Testläufe außerhalb der Geschäftszeiten zu planen, was genügend Testergebnisse für die Analyse während der normalen Arbeitszeiten liefert. Erwägen Sie beim Automatisieren von Leistungstests die Verwendung von LoadGen-Skripts, die unterschiedliche Lasten über das System modellieren, z. B. möchten Sie unterschiedliche Grade (75 %, 100 % und 125 %) des erwarteten Produktionsnachrichtenvolumens simulieren. Beim Ausführen von Auslastungstests ist es besonders wichtig, das Überladungs- oder "Schlechte-Tag"-Szenario zu testen. Bevor Sie das System in die Produktion bringen, sollten Sie wissen, wie der maximale nachhaltige Durchsatz (MST) für jeden Testfall in der BizTalk Server-Umgebung ist. Weitere Informationen zur maximalen nachhaltigen Leistung finden Sie unter Was ist nachhaltige Leistung? (https://go.microsoft.com/fwlink/?LinkID=132304) in der Dokumentation BizTalk Server 2009.

Die vollständige BizUnit LoadGen-Beispielkonfigurationsdatei

Die folgende Liste enthält den gesamten Inhalt der BizUnit-Konfigurationsdatei, auf die zuvor verwiesen wurde.

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

Weitere Informationen

Vereinfachen der automatisierten Tests mithilfe von BizUnit