Étape 1 : créer un test unitaire pour envoyer des documents à BizTalk Server
Les serveurs d’applications informatiques tels que BizTalk Server sont conçus pour effectuer des tâches particulières pour le compte des utilisateurs. Ces tâches sont lancées en tant que demandes clientes envoyées au serveur d’applications en tant que messages conformes à une norme que le serveur d’applications comprend, via un protocole que le serveur d’applications comprend. Par exemple, les clients peuvent lancer le traitement du courrier électronique en envoyant des messages électroniques Internet à un serveur de messagerie via le protocole SMTP. De même, les serveurs web traitent les requêtes HTML ou ASP du client, les serveurs de base de données traitent les requêtes SQL du client et BizTalk Server peuvent traiter les messages clients mis en forme conformément à plusieurs normes de message du secteur à l’aide de nombreux protocoles standard du secteur. La capacité de charge de travail d’un serveur d’applications est généralement mesurée par le nombre de messages que le serveur d’applications peut traiter au cours d’une période donnée. La capacité de charge de travail de BizTalk Server est également mesurée comme le nombre moyen de « documents reçus par seconde », de « documents traités par seconde » et/ou d'« orchestrations effectuées par seconde » sur une période prolongée, comme une journée de travail occupée ou même une semaine de travail. La fonctionnalité de test de charge de Visual Studio 2010 peut simuler un profil de charge pouvant atteindre des centaines d’utilisateurs accédant simultanément à une application serveur. Cette fonctionnalité de test de charge fournit des métriques en temps réel pour certains indicateurs de performances clés, ainsi que la possibilité de stocker ces métriques dans une base de données pour une analyse ultérieure. Ce document décrit l’utilisation de projets de test Visual Studio dans le but de tester la charge d’une application BizTalk Server, notamment comment créer des tests unitaires, créer des tests de charge et configurer des tests de charge pour capturer les données de compteur de performances requises pour déterminer le débit maximal durable (MST) d’une application BizTalk Server.
Création d’un test unitaire Visual Studio pour envoyer des documents à BizTalk Server
Un test unitaire Visual Studio référence l’espace de noms Microsoft.VisualStudio.TestTools.UnitTesting (https://go.microsoft.com/fwlink/?LinkID=132293) qui fournit plusieurs classes qui prennent en charge les tests unitaires. D’une importance particulière, l’espace de noms UnitTesting (https://go.microsoft.com/fwlink/?LinkID=132293) inclut la classe Microsoft.VisualStudio.TestTools.UnitTesting.TestContext (https://go.microsoft.com/fwlink/?LinkID=208233) pour stocker les informations fournies aux tests unitaires et la classe Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute (https://go.microsoft.com/fwlink/?LinkID=208235) est utilisée pour définir les méthodes de test. À des fins de test de charge BizTalk Server, les méthodes de test doivent spécifier le message à charger et le point de terminaison/URL auquel le message doit être envoyé. Le point de terminaison/URL sert ensuite de point d’entrée de message dans BizTalk Server lorsqu’un emplacement de réception BizTalk correspondant est créé.
À titre d’illustration, l’exemple de code de cette rubrique décrit les méthodes de test qui utilisent la classe System.ServiceModel.ChannelFactory(TChannel) (https://go.microsoft.com/fwlink/?LinkID=208238) pour envoyer des messages aux points de terminaison de service qui utilisent le point de terminaison net.tcp WCF et sont surveillés par l’adaptateur de réception bizTalk WCF-Custom. Les points de terminaison de service pour les messages de test sont définis dans le fichier De configuration d’application (app.config) du projet test.
Pour plus d’informations sur les tests unitaires Visual Studio, consultez Anatomie d’un test unitaire (https://go.microsoft.com/fwlink/?LinkID=208232).
Suivez les étapes décrites dans les sections ci-dessous pour créer un projet test avec un test unitaire afin d’envoyer des documents à un ou plusieurs ordinateurs BizTalk Server. Ces étapes ont été effectuées à l’aide de Visual Studio 2010 Édition Ultimate.
Définir les options du projet de test Visual Studio 2010
Lancez Visual Studio 2010 Édition Ultimate. Cliquez sur Démarrer, pointez sur Tous les programmes, sur Microsoft Visual Studio 2010 , puis sur Microsoft Visual Studio 2010.
Dans Visual Studio 2010, cliquez sur Outils , puis sur Options pour afficher la boîte de dialogue Options .
Cliquez pour développer Outils de test, puis cliquez sur Projet de test pour afficher les options de création de nouveaux projets de test.
Définissez le langage du projet de test par défaut : sur projet de test Visual C#.
Sous l’option Sélectionner les fichiers qui seront ajoutés à chaque nouveau projet de test, par défaut : sélectionnez Projet de test Visual C#, puis décochez tous les types de test pour les projets de test Visual C#, à l’exception de Test unitaire.
Cliquez sur OK pour fermer la boîte de dialogue Options .
Créer une solution Visual Studio 2010 avec un projet de test
Créez le dossier C :\Projects sur l’ordinateur Visual Studio 2010 Ultimate.
Dans Visual Studio 2010, cliquez sur Fichier, pointez sur Nouveau, puis cliquez sur Projet pour afficher la boîte de dialogue Nouveau projet .
Sous Modèles installés , cliquez pour développer Visual C#, puis cliquez sur Tester.
En bas de la boîte de dialogue Nouveau projet , spécifiez les options suivantes :
Nom :BTSLoad
Location :C :\Projects\
Nom de la solution :LoadTest
Vérifiez que l’option Créer un répertoire pour la solution est cochée, puis cliquez sur OK.
Ajoutez un dossier au projet BTSLoad ; ce dossier contient des messages de test à soumettre à BizTalk Server. Dans Explorateur de solutions, cliquez avec le bouton droit sur le projet BTSLoad, pointez sur Ajouter, puis cliquez sur Nouveau dossier. Une icône de dossier avec le texte en surbrillance NewFolder1 s’affiche sous le projet BTSLoad, tapez TestMessages pour modifier le texte en surbrillance et appuyez sur la touche Entrée pour créer le dossier C :\Projects\LoadTest\BTSLoad\TestMessages.
Mettre à jour le code dans le projet de test et ajouter un fichier de configuration d’application au projet de test
Dans Explorateur de solutions cliquez pour sélectionner UnitTest1.cs et remplacer le code existant par l’exemple de liste de code suivant :
#region Using Directives using System; using System.IO; using System.Diagnostics; using System.Text; using System.Configuration; using System.Collections.Generic; using System.Linq; using System.Xml; using System.ServiceModel; using System.ServiceModel.Channels; using Microsoft.VisualStudio.TestTools.UnitTesting; #endregion namespace Microsoft.BizTalk.Samples { [TestClass] public class BTSLoadTest { #region Constants private const int MaxBufferSize = 2097152; private const string Source = "BTS Load Test"; private const string Star = "*"; private const string TestMessageFolderParameter = "testMessageFolder"; private const string TestMessageFolderDefault = @"C:\Projects\LoadTest\BTSLoad\TestMessages"; private const string TestMessageFolderFormat = @"Test Message Folder = {0}"; private const string TestXmlDocument = "testxmldocument.xml"; #endregion #region Private Instance Fields private TestContext testContextInstance; #endregion #region Private ThreadStatic Fields [ThreadStatic] private static ChannelFactory<IRequestChannel> channelFactory; [ThreadStatic] private static IRequestChannel channel = null; [ThreadStatic] private static byte[] buffer = null; #endregion #region Private Static Fields private static string testMessageFolder = null; #endregion #region Public Instance Constructor public BTSLoadTest() { } #endregion #region Public Static Constructor static BTSLoadTest() { try { testMessageFolder = ConfigurationManager.AppSettings[TestMessageFolderParameter]; if (string.IsNullOrEmpty(testMessageFolder)) { testMessageFolder = TestMessageFolderDefault; } } catch (Exception ex) { Trace.WriteLine(ex.Message); EventLog.WriteEntry(Source, ex.Message, EventLogEntryType.Error); } } #endregion #region Public Properties /// <summary> ///Gets or sets the test context which provides ///information about and functionality for the current test run. ///</summary> public TestContext TestContext { get { return testContextInstance; } set { testContextInstance = value; } } #endregion #region Test Methods [TestMethod] public void BTSMessaging() { InvokeBizTalkReceiveLocation("BTSMessagingEP", testMessageFolder, TestXmlDocument, MessageVersion.Default, SessionMode.Allowed); } [TestMethod] public void BTSMessaging2() { InvokeBizTalkReceiveLocation("BTSMessagingEP2", testMessageFolder, TestXmlDocument, MessageVersion.Default, SessionMode.Allowed); } [TestMethod] public void BTSOrchestration() { InvokeBizTalkReceiveLocation("BTSOrchestrationEP", testMessageFolder, TestXmlDocument, MessageVersion.Default, SessionMode.Allowed); } #endregion #region Helper Methods public void InvokeBizTalkReceiveLocation(string endpointConfigurationName, string requestMessageFolder, string requestMessageName, MessageVersion messageVersion, SessionMode sessionMode) { XmlTextReader xmlTextReader = null; Message requestMessage = null; Message responseMessage = null; try { if (channel == null || channel.State != CommunicationState.Opened) { channelFactory = new ChannelFactory<IRequestChannel>(endpointConfigurationName); channelFactory.Endpoint.Contract.SessionMode = sessionMode; channel = channelFactory.CreateChannel(); } if (buffer == null) { string path = Path.Combine(requestMessageFolder, requestMessageName); string message; using (StreamReader reader = new StreamReader(File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read))) { message = reader.ReadToEnd(); } buffer = Encoding.UTF8.GetBytes(message); } MemoryStream stream = new MemoryStream(buffer); xmlTextReader = new XmlTextReader(stream); requestMessage = Message.CreateMessage(messageVersion, Star, xmlTextReader); TestContext.BeginTimer(requestMessageName); responseMessage = channel.Request(requestMessage); } catch (FaultException ex) { HandleException(ex); throw; } catch (CommunicationException ex) { HandleException(ex); throw; } catch (TimeoutException ex) { HandleException(ex); throw; } catch (Exception ex) { HandleException(ex); throw; } finally { TestContext.EndTimer(requestMessageName); CloseObjects(xmlTextReader, requestMessage, responseMessage); } } private void HandleException(Exception ex) { try { Trace.WriteLine(ex.Message); EventLog.WriteEntry(Source, ex.Message, EventLogEntryType.Error); } catch (Exception) { } } private void CloseObjects(XmlTextReader xmlTextReader, Message requestMessage, Message responseMessage) { try { if (xmlTextReader != null) { xmlTextReader.Close(); } if (requestMessage != null) { requestMessage.Close(); } if (responseMessage != null) { responseMessage.Close(); } } catch (Exception) { } } #endregion } }
Ajoutez un fichier de configuration d’application au projet de test :
Dans Explorateur de solutions, cliquez avec le bouton droit sur le projet BTSLoad, pointez sur Ajouter, puis cliquez sur Nouvel élément.
Dans la boîte de dialogue Ajouter un nouvel élément , sous Modèles installés, cliquez sur Général.
Dans la liste des éléments affichés, cliquez pour sélectionner Fichier de configuration d’application , puis cliquez sur Ajouter.
Dans Explorateur de solutions sélectionnez le fichier app.config et remplacez le contenu du fichier app.config par l’exemple de liste de code ci-dessous :
Important
Pour chaque point de terminaison client défini dans ce fichier, BizTalk Server Ordinateur est un espace réservé pour le nom réel du ou des ordinateurs BizTalk Server sur lesquels vous allez effectuer un test de charge.
<configuration> <system.serviceModel> <!-- Bindings used by client endpoints --> <bindings> <netTcpBinding> <binding name="netTcpBinding" closeTimeout="01:10:00" openTimeout="01:10:00" receiveTimeout="01:10:00" sendTimeout="01:10:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="100" maxBufferPoolSize="1048576" maxBufferSize="10485760" maxConnections="400" maxReceivedMessageSize="10485760"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" /> <security mode="None"> <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" /> <message clientCredentialType="Windows" /> </security> </binding> </netTcpBinding> </bindings> <client> <!-- Client endpoints used to exchange messages with WCF Receive Locations --> <!-- BTSMessagingEP --> <endpoint address="net.tcp://BizTalk Server Computer:8123/btsloadtest" binding="netTcpBinding" bindingConfiguration="netTcpBinding" contract="System.ServiceModel.Channels.IRequestChannel" name="BTSMessagingEP" /> <endpoint address="net.tcp://BizTalk Server Computer:8123/btsloadtest" binding="netTcpBinding" bindingConfiguration="netTcpBinding" contract="System.ServiceModel.Channels.IRequestChannel" name="BTSMessagingEP" /> <!-- BTSOrchestrationEP --> <endpoint address="net.tcp://BizTalk Server Computer:8122/btsloadtest" binding="netTcpBinding" bindingConfiguration="netTcpBinding" contract="System.ServiceModel.Channels.IRequestChannel" name="BTSOrchestrationEP" /> </client> </system.serviceModel> <appSettings> <!-- Folder containing test messages --> <add key="testMessageFolder" value="C:\Projects\LoadTest\BTSLoad\TestMessages" /> <add key="ClientSettingsProvider.ServiceUri" value="" /> </appSettings> </configuration>
Cliquez sur le menu Fichier dans Visual Studio 2010, puis cliquez sur Enregistrer tout.
Ajouter un message de test au projet
Pour les besoins de cet exemple, BizTalk Server emplacement de réception et les ports d’envoi sont configurés pour utiliser des pipelines de passage et n’effectuent aucune validation de document. Pour ajouter un message de test au projet, procédez comme suit :
Lancez le Bloc-notes. Cliquez sur Démarrer, cliquez sur Exécuter et tapez Bloc-notes dans la boîte de dialogue Exécuter .
Copiez le texte suivant dans le Bloc-notes et enregistrez -le en tant que « C:\Projects\LoadTest\BTSLoad\TestMessages\TestXmlDocument.xml »
<BTSLoadTest xmlns="http://Microsoft.BizTalk.Samples.BTSLoadTest"> <MessageText> This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. </MessageText> </BTSLoadTest>
Fermez le Bloc-notes.
Important
Ce fichier doit être enregistré dans le même chemin d’accès à l’aide du même nom de fichier sur chaque ordinateur de l’Agent de test de charge si plusieurs ordinateurs de l’Agent de test de charge sont utilisés pour le test de charge.
Ajouter les références nécessaires au projet et générer le projet de test
Dans Explorateur de solutions, cliquez avec le bouton droit sur le dossier Références du projet BTSLoad, puis cliquez sur Ajouter une référence.
Dans la boîte de dialogue Ajouter une référence, cliquez sur l’onglet .NET et utilisez la combinaison Ctrl+Clic clavier/souris pour sélectionner simultanément les espaces de noms .NET suivants :
System.Configuration
System.Runtime.Serialization
System.ServiceModel.Channels
System.ServiceModel
System.Web.Extensions
System.Xml
Après avoir sélectionné les espaces de noms, cliquez sur OK pour ajouter ces assemblys en tant que références au projet BTSLoad Test.
Cliquez avec le bouton droit sur le projet BTSLoad , puis cliquez sur Générer pour compiler le projet dans l’assembly BTSLoad.