Passaggio 1: Creare uno unit test per inviare documenti a BizTalk Server
I server applicazioni computer, ad esempio BizTalk Server, sono progettati per eseguire attività specifiche per conto degli utenti. Queste attività vengono avviate come richieste client inviate al server applicazioni come messaggi conformi a uno standard compreso dal server applicazioni, tramite un protocollo compreso dal server applicazioni. Ad esempio, i client possono avviare l'elaborazione della posta elettronica inviando messaggi di posta elettronica a un server di posta elettronica tramite il protocollo SMTP. Analogamente, i server Web elaborano richieste HTML o ASP client, i server di database elaborano le richieste SQL client e BizTalk Server possono elaborare i messaggi client formattati in conformità a più standard del settore usando numerosi protocolli standard del settore. La capacità del carico di lavoro di un server applicazioni viene in genere misurata in base al numero di messaggi che il server applicazioni può elaborare in un determinato periodo di tempo. La capacità del carico di lavoro di BizTalk Server viene misurata in modo analogo al numero medio di "documenti ricevuti al secondo", "documenti elaborati al secondo" e/o "orchestrazioni completate al secondo" in un lungo periodo di tempo, ad esempio un giorno lavorativo occupato o anche una settimana lavorativa. La funzionalità di test di carico di Visual Studio 2010 può simulare un profilo di carico fino a centinaia di utenti che accedono contemporaneamente a un'applicazione server. Questa funzionalità di test di carico fornisce metriche in tempo reale per gli indicatori di prestazioni chiave selezionati e la possibilità di archiviare queste metriche in un database per l'analisi futura. Questo documento descrive l'uso dei progetti di test di Visual Studio allo scopo di testare il carico di un'applicazione BizTalk Server, tra cui come creare unit test, come creare test di carico e come configurare i test di carico per acquisire i dati dei contatori delle prestazioni necessari per determinare la velocità effettiva massima sostenibile (MST) di un'applicazione BizTalk Server.
Creazione di uno unit test di Visual Studio per inviare documenti a BizTalk Server
Uno unit test di Visual Studio fa riferimento allo spazio dei nomi Microsoft.VisualStudio.TestTools.UnitTesting (https://go.microsoft.com/fwlink/?LinkID=132293) che fornisce diverse classi che forniscono il supporto per gli unit test. Di particolare importanza, lo spazio dei nomi UnitTesting (https://go.microsoft.com/fwlink/?LinkID=132293) include la classe Microsoft.VisualStudio.TestTools.UnitTesting.TestContext (https://go.microsoft.com/fwlink/?LinkID=208233) per archiviare le informazioni fornite agli unit test e la classe Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute (https://go.microsoft.com/fwlink/?LinkID=208235) viene usata per definire i metodi di test. Ai fini del test di carico BizTalk Server, i metodi di test devono specificare il messaggio da caricare e l'endpoint/URL a cui inviare il messaggio. L'endpoint/URL fungerà quindi da punto di ingresso del messaggio in BizTalk Server quando viene creato un percorso di ricezione BizTalk corrispondente.
Ai fini dell'illustrazione, il codice di esempio in questo argomento descrive i metodi test che utilizzano la classe System.ServiceModel.ChannelFactory(TChannel) () perhttps://go.microsoft.com/fwlink/?LinkID=208238 inviare messaggi agli endpoint di servizio che usano l'endpoint WCF net.tcp e vengono monitorati dall'adapter di ricezione di BizTalk WCF-Custom. Gli endpoint di servizio per i messaggi di test vengono definiti nel file Configurazione applicazione (app.config) del progetto di test.
Per altre informazioni sugli unit test di Visual Studio, vedere Anatomia di uno unit test (https://go.microsoft.com/fwlink/?LinkID=208232).
Seguire la procedura descritta nelle sezioni seguenti per creare un progetto di test con uno unit test per inviare documenti a uno o più computer BizTalk Server. Questi passaggi sono stati completati usando Visual Studio 2010 Ultimate Edition.
Impostare le opzioni del progetto di test di Visual Studio 2010
Avviare Visual Studio 2010 Ultimate Edition. Fare clic su Start, scegliere Tutti i programmi, Microsoft Visual Studio 2010 e quindi Microsoft Visual Studio 2010.
In Visual Studio 2010 fare clic su Strumenti e quindi su Opzioni per visualizzare la finestra di dialogo Opzioni .
Fare clic per espandere Strumenti di test e quindi fare clic su Progetto di test per visualizzare le opzioni per la creazione di nuovi progetti di test.
Impostare il linguaggio di progetto di test predefinito: su Progetto di test visual C#.
Nell'opzione Selezionare i file che verranno aggiunti a ogni nuovo progetto di test, per impostazione predefinita: selezionare Progetto di test Visual C# e deselezionare tutti i tipi di test per i progetti di test Visual C# ad eccezione di Unit Test.
Fare clic su OK per chiudere la finestra di dialogo Opzioni .
Creare una nuova soluzione di Visual Studio 2010 con un progetto di test
Creare la cartella C:\Projects nel computer Visual Studio 2010 Ultimate.
In Visual Studio 2010 fare clic su File, scegliere Nuovoe fare clic su Progetto per visualizzare la finestra di dialogo Nuovo progetto .
In Modelli installati fare clic per espandere Visual C# e fare clic su Test.
Nella parte inferiore della finestra di dialogo Nuovo progetto specificare le opzioni seguenti:
Nome:BTSLoad
Location:C:\Projects\
Nome soluzione:LoadTest
Assicurarsi che l'opzione Crea directory per la soluzione sia selezionata e quindi fare clic su OK.
Aggiungere una cartella al progetto BTSLoad; questa cartella conterrà i messaggi di test da inviare a BizTalk Server. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto BTSLoad, scegliere Aggiungi e fare clic su Nuova cartella. Sotto il progetto BTSLoad verrà visualizzata un'icona di cartella con il testo evidenziato NewFolder1 , digitare TestMessages per modificare il testo evidenziato e premere INVIO per creare la cartella C:\Projects\LoadTest\BTSLoad\TestMessages.
Aggiornare il codice nel progetto di test e aggiungere un file di configurazione dell'applicazione al progetto di test
In Esplora soluzioni fare clic per selezionare UnitTest1.cs e sostituire il codice esistente con il listato di codice di esempio seguente:
#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 } }
Aggiungere un file di configurazione dell'applicazione al progetto di test:
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto BTSLoad, scegliere Aggiungi e fare clic su Nuovo elemento.
Nella finestra di dialogo Aggiungi nuovo elemento , in Modelli installati, fare clic su Generale.
Nell'elenco di elementi visualizzati fare clic per selezionare File di configurazione dell'applicazione e quindi fare clic su Aggiungi.
In Esplora soluzioni selezionare il file app.config e sostituire il contenuto del file app.config con il listato di codice di esempio seguente:
Importante
Per ogni endpoint client definito in questo file, BizTalk Server Computer è un segnaposto per il nome effettivo dei computer BizTalk Server su cui verranno eseguiti i test di carico.
<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>
Fare clic sul menu File in Visual Studio 2010 e quindi su Salva tutto.
Aggiungere un messaggio di test al progetto
Ai fini di questo esempio, BizTalk Server le posizioni di ricezione e le porte di trasmissione verranno configurate per l'uso di pipeline pass-through e non eseguiranno alcuna convalida del documento. Seguire questa procedura per aggiungere un messaggio di test al progetto:
Avviare il Blocco note. Fare clic su Start, scegliere Esegui e digitare Blocco note nella finestra di dialogo Esegui .
Copiare il testo seguente nel Blocco note e salvarlo come "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>
Chiudere il Blocco note.
Importante
Questo file dovrà essere salvato nello stesso percorso usando lo stesso nome di file in ogni computer dell'agente di test di carico se per il test di carico vengono usati più computer dell'agente di test di carico.
Aggiungere i riferimenti necessari al progetto e compilare il progetto di test
In Esplora soluzioni fare clic con il pulsante destro del mouse sulla cartella Riferimenti per il progetto BTSLoad e quindi scegliere Aggiungi riferimento.
Nella finestra di dialogo Aggiungi riferimento fare clic sulla scheda .NET e usare la combinazione ctrl+clic di tastiera/mouse per selezionare contemporaneamente gli spazi dei nomi .NET seguenti:
System.Configuration
System.Runtime.Serialization
System.ServiceModel.Channels
System.ServiceModel
System.Web.Extensions
System.Xml
Dopo aver selezionato gli spazi dei nomi, fare clic su OK per aggiungere questi assembly come riferimenti al progetto BTSLoad Test.
Fare clic con il pulsante destro del mouse sul progetto BTSLoad e quindi scegliere Compila per compilare il progetto nell'assembly BTSLoad.