Compartir vía


Paso 1: Crear una prueba unitaria para enviar documentos a BizTalk Server

Los servidores de aplicaciones de equipo, como BizTalk Server, están diseñados para realizar tareas concretas en nombre de los usuarios. Estas tareas se inician como solicitudes de cliente enviadas al servidor de aplicaciones como mensajes que cumplen con un estándar que entiende el servidor de aplicaciones a través de un protocolo que el servidor de aplicaciones entiende. Por ejemplo, los clientes pueden iniciar el procesamiento del correo electrónico enviando mensajes de correo electrónico de Internet a un servidor de correo electrónico a través del protocolo SMTP. Del mismo modo, los servidores web procesan solicitudes HTML o ASP de cliente, los servidores de bases de datos procesan solicitudes SQL de cliente y BizTalk Server pueden procesar mensajes de cliente con formato de cumplimiento con varios estándares de mensajes del sector mediante numerosos protocolos estándar del sector. La capacidad de carga de trabajo de un servidor de aplicaciones se mide normalmente por el número de mensajes que el servidor de aplicaciones puede procesar en un período de tiempo determinado. La capacidad de carga de trabajo de BizTalk Server se mide igualmente como el número medio de "documentos recibidos por segundo", "documentos procesados por segundo" o "orquestaciones completadas por segundo" durante un período prolongado de tiempo, como un día laboral ocupado o incluso una semana laboral. La funcionalidad de prueba de carga de Visual Studio 2010 puede simular un perfil de carga de hasta cientos de usuarios al mismo tiempo que acceden a una aplicación de servidor. Esta funcionalidad de pruebas de carga proporciona métricas en tiempo real para los indicadores clave de rendimiento seleccionados, así como la capacidad de almacenar estas métricas en una base de datos para un análisis futuro. En este documento se describe el uso de proyectos de prueba de Visual Studio con el fin de probar la carga de una aplicación de BizTalk Server, incluido cómo crear pruebas unitarias, cómo crear pruebas de carga y cómo configurar pruebas de carga para capturar los datos de contador de rendimiento necesarios para determinar el rendimiento máximo sostenible (MST) de una aplicación de BizTalk Server.

Crear una prueba unitaria de Visual Studio para enviar documentos a BizTalk Server

Una prueba unitaria de Visual Studio hace referencia al espacio de nombres Microsoft.VisualStudio.TestTools.UnitTesting (https://go.microsoft.com/fwlink/?LinkID=132293) que proporciona varias clases que proporcionan compatibilidad con las pruebas unitarias. De particular importancia, el espacio de nombres UnitTesting (https://go.microsoft.com/fwlink/?LinkID=132293) incluye la clase Microsoft.VisualStudio.TestTools.UnitTesting.TestContext (https://go.microsoft.com/fwlink/?LinkID=208233) para almacenar información proporcionada a pruebas unitarias y la clase Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute (https://go.microsoft.com/fwlink/?LinkID=208235) se usa para definir métodos Test. Para fines de pruebas de carga BizTalk Server, los métodos test deben especificar el mensaje que se va a cargar y el punto de conexión o dirección URL al que se debe enviar el mensaje. A continuación, el punto de conexión o dirección URL servirá como punto de entrada del mensaje en BizTalk Server cuando se cree una ubicación de recepción de BizTalk correspondiente.

Para fines de ilustración, el código de ejemplo de este tema describe los métodos de prueba que usan la clase System.ServiceModel.ChannelFactory(TChannel) (https://go.microsoft.com/fwlink/?LinkID=208238) para enviar mensajes a los puntos de conexión de servicio que usan el punto de conexión net.tcp de WCF y que el adaptador de recepción de BizTalk WCF-Custom supervisa. Los puntos de conexión de servicio para los mensajes de prueba se definen en el archivo De configuración de la aplicación (app.config) del proyecto De prueba.

Para obtener más información sobre las pruebas unitarias de Visual Studio, vea Anatomía de una prueba unitaria (https://go.microsoft.com/fwlink/?LinkID=208232).

Siga los pasos de las secciones siguientes para crear un proyecto de prueba con una prueba unitaria para enviar documentos a uno o varios equipos BizTalk Server. Estos pasos se completaron con Visual Studio 2010 Ultimate Edition.

Establecer opciones de proyecto de prueba de Visual Studio 2010

  1. Inicie Visual Studio 2010 Ultimate Edition. Haga clic en Inicio, seleccione Todos los programas, Microsoft Visual Studio 2010 y, a continuación, haga clic en Microsoft Visual Studio 2010.

  2. En Visual Studio 2010, haga clic en Herramientas y, a continuación, haga clic en Opciones para mostrar el cuadro de diálogo Opciones .

  3. Haga clic para expandir Herramientas de pruebas y, a continuación, haga clic en Proyecto de prueba para mostrar las opciones para la creación de nuevos proyectos de prueba.

  4. Establezca el lenguaje de proyecto de prueba predeterminado: en Proyecto de prueba de Visual C#.

  5. En la opción Seleccionar los archivos que se agregarán a cada nuevo proyecto de prueba, de forma predeterminada: seleccione Proyecto de prueba de Visual C# y desactive todos los tipos de prueba para proyectos de prueba de Visual C#, excepto prueba unitaria.

  6. Haga clic en Aceptar para cerrar el cuadro de diálogo Opciones.

Creación de una nueva solución de Visual Studio 2010 con un proyecto de prueba

  1. Cree la carpeta C:\Projects en el equipo visual Studio 2010 Ultimate.

  2. En Visual Studio 2010, haga clic en Archivo, seleccione Nuevoy haga clic en Proyecto para mostrar el cuadro de diálogo Nuevo proyecto .

  3. En Plantillas instaladas , haga clic para expandir Visual C# y haga clic en Probar.

  4. En la parte inferior del cuadro de diálogo Nuevo proyecto , especifique las siguientes opciones:

    • Name:BTSLoad

    • Location:C:\Projects\

    • Nombre de la solución:LoadTest

  5. Asegúrese de que la opción Crear directorio para la solución esté activada y, a continuación, haga clic en Aceptar.

  6. Agregue una carpeta al proyecto BTSLoad; esta carpeta contendrá mensajes de prueba que se enviarán a BizTalk Server. En Explorador de soluciones, haga clic con el botón derecho en el proyecto BTSLoad, seleccione Agregar y haga clic en Nueva carpeta. Aparecerá un icono de carpeta con el texto resaltado NewFolder1 en el proyecto BTSLoad, escriba TestMessages para cambiar el texto resaltado y presione la tecla Entrar para crear la carpeta C:\Projects\LoadTest\BTSLoad\TestMessages.

Actualice el código en el proyecto de prueba y agregue un archivo de configuración de aplicación al proyecto de prueba.

  1. En Explorador de soluciones haga clic para seleccionar UnitTest1.cs y reemplace el código existente por la lista de código de ejemplo siguiente:

    #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
        }
    }
    
  2. Agregue un archivo de configuración de aplicación al proyecto de prueba:

    1. En Explorador de soluciones, haga clic con el botón derecho en el proyecto BTSLoad, seleccione Agregar y haga clic en Nuevo elemento.

    2. En el cuadro de diálogo Agregar nuevo elemento , en Plantillas instaladas, haga clic en General.

    3. En la lista de elementos que se muestran, haga clic para seleccionar Archivo de configuración de la aplicación y, a continuación, haga clic en Agregar.

    4. En Explorador de soluciones seleccione el archivo app.config y reemplace el contenido del archivo app.config por la lista de código de ejemplo siguiente:

      Importante

      Para cada punto de conexión de cliente definido en este archivo, BizTalk Server Equipo es un marcador de posición para el nombre real de los equipos de BizTalk Server en los que realizará pruebas de carga.

      
      <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>
      
    5. Haga clic en el menú Archivo de Visual Studio 2010 y, a continuación, haga clic en Guardar todo.

Agregar un mensaje de prueba al proyecto

Para este ejemplo, BizTalk Server ubicaciones de recepción y puertos de envío se configurarán para usar canalizaciones de paso a través y no realizarán ninguna validación de documentos. Siga estos pasos para agregar un mensaje de prueba al proyecto:

  1. Inicie el Bloc de notas. Haga clic en Inicio, haga clic en Ejecutar y escriba Bloc de notas en el cuadro de diálogo Ejecutar .

  2. Copie el texto siguiente en el Bloc de notas y guárdelo como "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>
    
  3. Cierre el Bloc de notas.

Importante

Este archivo tendrá que guardarse en la misma ruta de acceso con el mismo nombre de archivo en cada equipo del Agente de pruebas de carga si se usan varios equipos del Agente de pruebas de carga para las pruebas de carga.

Agregar referencias necesarias al proyecto y compilar el proyecto de prueba

  1. En Explorador de soluciones, haga clic con el botón derecho en la carpeta Referencias del proyecto BTSLoad y, a continuación, haga clic en Agregar referencia.

  2. En el cuadro de diálogo Agregar referencia, haga clic en la pestaña .NET y use la combinación de teclado y mouse CTRL+Clic para seleccionar simultáneamente los siguientes espacios de nombres de .NET:

    • System.Configuration

    • System.Runtime.Serialization

    • System.ServiceModel.Channels

    • System.ServiceModel

    • System.Web.Extensions

    • System.Xml

  3. Después de seleccionar los espacios de nombres, haga clic en Aceptar para agregar estos ensamblados como referencias al proyecto BTSLoad Test.

  4. Haga clic con el botón derecho en el proyecto BTSLoad y, a continuación, haga clic en Compilar para compilar el proyecto en el ensamblado BTSLoad.