Prerrequisito
Este tutorial contiene estrategias y procedimientos para crear y ejecutar una prueba de carga dinámica contra un servicio de ArcGIS Server y asume que estás familiarizado con algunos conceptos básicos de Apache JMeter. Si eres nuevo en Apache JMeter, por favor consulta nuestro Performance Testing with Apache JMeter (An Introduction).

Estrategias de Prueba con JMeter
Antes de profundizar en los detalles sobre cómo construir y validar una prueba de carga basada en datos, es importante primero discutir algunas estrategias de prueba específicas para JMeter. Estos consejos son diferentes a los elementos listados en nuestro Recommended Strategies for Load Testing an ArcGIS Server Deployment Artículo que está destinado para usarse con cualquier herramienta de prueba (pero también aplicable a JMeter).
Un Buen Plan de Pruebas Comienza con una Estructura de Carpetas Adecuada
Una táctica que puede ayudar a gestionar múltiples pruebas y múltiples informes en JMeter es implementar una estructura de carpetas simple pero consistente para almacenar los diversos elementos de cada prueba. El principal controlador para una prueba JMeter es el archivo JMX… aquí reside toda la lógica de la prueba. Pero a medida que continúas agregando características a tu prueba y ejecutándola varias veces, te expandirás más allá del manejo del solo archivo JMX.
Un poco de organización ayuda mucho… crear manualmente algunos directorios clave puede ayudar a gestionar los diversos archivos JMeter que se acumularán en el disco duro con el tiempo.
Nota: Este enfoque se realiza desde el sistema de archivos del Sistema Operativo y no directamente desde Apache JMeter.
Una estructura de carpetas recomendada:
- name_of_project (el archivo JMX debe almacenarse dentro usando el mismo nombre)
- datasets
- Contendrá archivos de datos que hacen nuestras solicitudes dinámicas con cada iteración de la prueba
- logs
- Contendrá registros de depuración del entorno de prueba JMeter
- reports
- Contendrá informes generados por JMeter
- results
- Contendrá archivos de resultados de pruebas JMeter
- Estos son los archivos RAW de resultados y el artefacto más importante de la prueba
- uploads
- Contendrá archivos que deben ser subidos
Dentro de la carpeta "project", se crearían 5 directorios vacíos: datasets, logs, reports, results y uploads.
Variables Definidas por el Usuario
Al igual que la estructura de carpetas mencionada arriba, utilizar Variables Definidas por el Usuario es una estrategia de construcción de pruebas que favorece la portabilidad, reutilización y compartición del Plan de Pruebas. Algunas variables comunes usadas con una prueba de servicio ArcGIS son:
- ProjectFolder
- WebServerName
- ServerInstanceName
- SecurePort
- ServiceName
En el Plan de Pruebas JMeter, estas variables pueden ser referenciadas fácilmente con la notación como: ${ServiceName}, que automáticamente será reemplazada con el nombre del servicio en tiempo de ejecución. Usar variables es menos propenso a errores que usar valores codificados si alguna vez planeas usar la prueba en otro entorno. Cuando la prueba se ejecuta contra otro despliegue, el probador solo necesita ajustar la definición variable. Para Planes de Prueba con muchas muestras definidas HTTP Request, esto puede ahorrar mucho tiempo.
Elegir el Grupo Thread Correcto
Hay varias opciones cuando se trata de definir tu lógica paso a paso para carga. Todas son similares y ofrecen la misma funcionalidad básica pero tienen algunas diferencias sutiles. Thread Group es una buena opción segura que ofrece máxima portabilidad ya que está incluido con el producto core JMeter.
Dicho esto, usar el JMeter Plugins Manager (instalado como parte del Performance Testing with Apache JMeter (An Introduction)) para agregar los “Custom Thread Groups” puede proporcionar al entorno de prueba algunas otras opciones útiles en esta área.
Añadiendo Soporte para Custom Thread Groups en JMeter
Desde el Plugins Manager dentro de JMeter (Opciones-->Plugins Manager):
- Selecciona Available Plugins
- Encuentra y selecciona Custom Threads Groups
- Selecciona Apply Changes and Restart JMeter

Una vez instalado el plugin “Custom Thread Groups”, una alternativa recomendada sobre Thread Group es el bzm – Concurrency Thread Group, ya que permite una configuración paso a paso sencilla que representa visualmente la presión definida, lo cual es una gran característica para validación desde un punto de vista de pruebas.
Usando Transacciones para Agrupar Solicitudes
Añadir Transacciones a tu prueba puede ser una forma útil de agrupar una o más solicitudes similares que pertenecen a la misma “operación”. Por ejemplo, la carga de una aplicación, un zoom navegacional en un mapa o búsqueda en formulario. Usar una transacción así puede ayudar mucho al análisis ya que aisla la operación (por ejemplo búsqueda en formulario) en su propio “contenedor” lógico con solo las solicitudes responsables por su función. Mientras que lanzar muchas solicitudes, para muchas funciones o servicios diferentes en un grupo grande puede hacer muy difícil el estudio post-prueba. Con transacciones, se puede realizar análisis para entender el rendimiento de cada operación, respectivamente.
Nota: Las aplicaciones y flujos del mapa varían; algunas operaciones tendrán transacciones compuestas por muchas solicitudes, otras solo una solicitud.
Nota: El rendimiento de diferentes operaciones en una prueba no siempre escala igual; algunas pueden funcionar mejor que otras; poder identificar operaciones con bajo rendimiento (por un nombre único de transacción) es un buen análisis.
Validar que se Está Recibiendo la Respuesta Correcta
Asegurar que la respuesta esperada regresa del servidor remoto es tan importante como enviar la solicitud. Por varias razones, al probar un recurso ArcGIS como un servicio, confiar solo en el código HTTP status (por ejemplo HTTP 200) es insuficiente.
Una forma para validar la respuesta es buscar palabras clave en el Header o Body. Si se solicita una imagen PNG pero se devuelve un mensaje textual de error en su lugar, una regla Response Assertion buscando “image/png” en el Header marcará el intento como fallido. Si está presente en el Header, se considera una solicitud aprobada .
Nota: Para cada HTTP Request que necesite ser examinado en el Plan de Pruebas JMeter, debe añadirse una regla Response Assertion.
Creando una Prueba Dinámica Data Driven Export Map en JMeter </ SPAN ></ H1 >< P >< SPAN >Usando las estrategias anteriores , se puede crear un Plan flexible y versátil Test Plan JMeter que solicite un área diferente del interés desde un servicio mapa ArcGIS con cada solicitud . Una "prueba dinámica" es ideal ya que puede hacer trabajar más duro los recursos del servidor que si se solicitara siempre los mismos datos . Tal prueba es más representativa condiciones reales . </ SPAN ></ P >< P >Como evaluador rendimiento , queremos tomar algo como la firma export map request abajo y convertirlo en una carga dinámica test JMeter : </ P >< P > </ P >< P > </ P >< P > </ P >< pre class = "lia-code-sample language-markup" >< code >https://yourwebadaptor.domain.com/server/rest/services/SampleWorldCities/MapServer/export?dpi=96&transparent=true&format=png32&layers=show:0,1,2&bbox=-108.76228873935,31.0409016308382,-88.8526618315487,46.9686031570791&bboxSR=4326&imageSR=4326&size=1477,827&f=image</ pre >< P > </ P >< P > </ P >< P > </ P >< P >< SPAN >JMeter ofrece varias metodologías para construir cargas útiles HTTP en un Test Plan tales como : </ SPAN ></ P >< UL >< LI >< SPAN >Crear las solicitudes manualmente (por ejemplo , a mano ) </ SPAN ></ LI >< LI >< SPAN >Usar el grabador incorporado para capturar directamente solicitudes del navegador </ SPAN ></ LI >< LI >< SPAN >Importar de otra fuenteEste artículo se centrará en el primer método para mostrar la práctica manual para crear una prueba en JMeter, cómo ensamblar los componentes de la solicitud y cómo hacer que su comportamiento sea "dinámico". Esta prueba basada en datos llamará al servicio de mapas SampleWorldCities (ejecutándose en su implementación local) a través de la función de exportación. Nota: Según muchas medidas, SampleWorldCities se considera un servicio de mapas pequeño y muy ligero, pero dado que es ubicuo en las implementaciones de ArcGIS Server, es ideal para usarlo para recorrer la creación de una prueba de carga.Crear y Guardar un Nuevo Plan de PruebaDesde el sistema de archivos cree la estructura de carpetas mencionada arriba:El nombre de la carpeta del proyecto será sampleworldcities1Suponga que esto existirá en:C:\JMeter Tests\Crear los directorios de soporte del proyecto:Por ejemplo: datasets, logs, reports, results, uploadsInicie JMeterGuarde el nuevo Plan de Prueba que JMeter crea en la carpeta sampleworldcities1 que acaba de crearLlame al Plan de Prueba: sampleworldcities1.jmxSuponga que la ruta completa del Plan de Prueba jmx es:C:\JMeter Tests\sampleworldcities1\sampleworldcities1.jmx
Desde el sistema de archivos, la carpeta del proyecto se vería como lo siguiente:
Añadiendo Variables al Plan de PruebaDentro de JMeter, haga clic en el Plan de Prueba (por ejemplo sampleworldcities1)En la parte inferior de la sección Variables Definidas por el Usuario, haga clic en AñadirPara Nombre ingrese: ProjectFolderPara Valor ingrese: C:\JMeter Tests\sampleworldcities1Para Nombre ingrese: WebServerNamePara Valor ingrese: yourwebadaptor.domain.comIngrese el nombre del host de su Web Adaptor o ArcGIS ServerPara Nombre ingrese: ServerInstanceNamePara Valor ingrese: serverAlgunas implementaciones usan un valor diferente, por ejemplo arcgisPara Nombre ingrese: SecurePortPara Valor ingrese: 443Si apunta a una instancia de ArcGIS Server, use 6443Para Nombre ingrese: ServiceNamePara Valor ingrese: SampleWorldCities
Añadiendo el bzm – Concurrency Thread Group al Plan de PruebaClic derecho en el Plan de Prueba sampleworldcities1 y bajo Añadir-->Threads (Users), seleccione bzm – Concurrency Thread Group
Bajo el Plan de Prueba sampleworldcities1, haga clic en bzm – Concurrency Thread GroupConfigure la lógica de carga escalonada con lo siguiente:Concurrencia Objetivo: 10Tiempo de Ramp Up (min): 20Contador de Pasos Ramp-Up: 10
Con el plugin bzm – Concurrency Thread Group, la lógica configurada de carga escalonada puede verse fácilmente y confirmarse visualmente en el gráfico arriba. Esta prueba se configurará para ejecutarse durante 20 minutos, aumentará la presión usando 10 pasos diferentes (agregando 1 hilo concurrente a la vez cada 2 minutos), alcanzará un máximo de 10 hilos concurrentes y luego se detendrá.Añadiendo una Transacción a un Plan de PruebaClic derecho en bzm – Concurrency Thread Group y bajo Añadir-->Logic Controller, seleccione Transaction Controller
Una vez añadido, dé al Transaction Controller (por ejemplo la operación del flujo de trabajo) un nombre significativo para distinguirlo de otros que puedan existir en la pruebaPara el nombre ingrese: MapScale_9MEl 9M representa la escala del mapa de 9 Millones (por ejemplo 1: 9,244,649)Uno o más HTTP Requests pueden ahora añadirse a este Transaction ControllerSeleccione "Generate parent sample" desde la sección Transaction ControllerEsta opción puede ayudar con la validación ya que muestra las solicitudes respectivas bajo el objeto Transaction
Añadiendo una Solicitud HTTPAhora queremos crear una solicitud HTTP basada en datos que pedirá una extensión espacial diferente con cada solicitud. Esto se hace con una Solicitud HTTP regular en JMeter.Clic derecho en el Transaction Controller llamado MapScale_9M, y bajo Añadir-->Sampler, seleccione HTTP Request
La nueva Solicitud HTTP vacía debería parecerse a lo siguiente:
Haciendo Dinámica la Solicitud HTTPUna firma de solicitud para export map como: https://yourwebadaptor.domain.com/server/rest/services/SampleWorldCities/MapServer/export?dpi=96&transparent=true&format=png32&layers=show%3A0%2C1%2C2&bbox=-108.76228873935%2C31.0409016308382%2C-88.8526618315487%2C46.9686031570791&bboxSR=4326&imageSR=4326&size=1477%2C827&f=image contiene varios componentes URL que necesitan ir a diferentes lugares en la página Solicitud HTTP (para maximizar flexibilidad y mantenimiento). Comencemos con los pares clave/valor de la solicitud separando los parámetros URL.A continuación, la sección parámetros ha sido modificada para contener varias variables JMeter en lugar de los valores originales. Está bien que algunas partes hagan referencia a nombres variables JMeter que aún no han sido creados en la prueba.Copie lo siguiente y pégalo en la Solicitud HTTP haciendo clic en Añadir desde Portapapeles al final: dpi=96&transparent=true&format=png32&layers=show%3A0%2C1%2C2&bbox=${bbox_9244649}&bboxSR=${sr_9244649}&imageSR=${sr_9244649}&size=${width_9244649}%2C${height_9244649}&f=image Esto ayudará a poner en su lugar varias piezas necesarias para hacer ciertas partes de la Solicitud HTTP dinámicas.
title="keyvaluepairs_httprequest.png" alt="keyvaluepairs_httprequest.png" "/><\/span><\/P>Bajo la sección Web Server:Para Protocol ingrese: https<\/LI>Para Server Name or IP ingrese: ${WebServerName}<\/LI>Para Port Number ingrese: ${SecurePort}<\/LI><\/UL><\/LI>Bajo la sección HTTP Request:Para Path ingrese: \/${ServerInstanceName}\/rest\/services\/${ServiceName}\/MapServer\/export<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P>Agregando una Response Assertion<\/SPAN><\/H2>Haga clic derecho en el HTTP Request, y bajo Add-->Assertions, seleccione Response Assertion<\/LI><\/UL>
<\/span><\/P>Cambie varios de los parámetros de Response Assertion:Bajo Field to Test, seleccione: Response Headers<\/LI>Bajo Pattern Matching Rules seleccione: Contains<\/LI>Bajo Patterns to Test, haga clic en Add e ingrese: image\/png<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P>Agregando un CSV Data Set Config<\/H2>Haga clic derecho en el Test Plan (por ejemplo sampleworldcities1), y bajo Add-->Config Element, seleccione CSV Data Set Config<\/LI><\/UL>
<\/span><\/P>Seleccione el CSV Data Set Config y renómbrelo a CSV Data Set Config -- 9MProporcionar un nombre único puede ayudar con el mantenimiento\u002Fgestin si se usan múltiples archivos de datos dentro de una prueba (por ejemplo un archivo para bounding box de cada escala de mapa)<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P>Usando un editor de texto, complete un archivo CSV vacío con las siguientes 16 líneas de datos:<\/SPAN><\/LI><\/UL>bbox,width,height,mapUnits,sr,scale<\/SPAN><\/FONT><\/P>\u0022-108.76228873935,31.0409016308382,-88.8526618315487,46.9686031570791\u0022,1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>\u002223.1282001284589,34.337748761293,43.03782703626,50.2654502875339\u0022,1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>\u0022-117.052786808947,35.3545948648786,-97.1431599011459,51.2822963911194\u0022,1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>\u0022-100.83549484975,36.0637839078502,-80.9258679419492,51.991485434091\u0022,1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>\u002217.7030587822399,34.3302705716379,37.6126856900409,50.2579720978788\u0022,1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>\u002232.2827904735659,37.2792197897781,52.192417381367,53.2069213160189\u0022,1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>\u00220.222469446585188,35.0562794764081,20.1320963543862,50.9839810026489\u0022,1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>\u0022100.262489726575,20.8660021309943,120.172116634376,36.7937036572352\u0022,1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>\u002272.4186084471192,22.1748804724666,92.3282353549203,38.1025819987075\u0022,1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN>
\u0022-61.2094273153097,-26.7402777397378,-41.2998004075086,-10.812576213497\u0022,
1280,
1024,
esriDecimalDegrees,
4326,
9244649<
/SPAN></
/P>
\u0022-72.5908131920005,-26.6270515481087,-52.6811862841995,-10.6993500218679
99.7474167083529,20.7088254145549,119.657043616154,36.6365269407958',1280,
1024,
esriDecimalDegrees,
4326,
9244649
102.59837658124,20.384726879328,122.508003489041,36.3124284055689',1280,
1024,
esriDecimalDegrees,
4326,
9244649
80.8239612278688,23.4521454643548,100.73358813567,39.3798469905956',1280,
1024,
esriDecimalDegrees,
4326,
9244649
-105.812716128284,31.0536390717042,-85.9030892204829,46.9813405979451',1280,
1024,
esriDecimalDegrees,
4326,
9244649
Guarde el archivo CSV en: C:\JMeter Tests\sampleworldcities1\datasets\bbox_9244649.csv
Desde la ventana CSV Data Set Config haga clic en Browse y navegue hasta el archivo bbox_9244649.csv que acaba de guardar
Configure varios elementos de la fuente de datos:
Cambie Filename de: C:\JMeter Tests\sampleworldcities1\datasets\bbox_9244649.csv
A: ${ProjectFolder}\datasets\bbox_9244649.csv
Para Variable Names agregue: bbox_9244649,width_9244649,height_9244649,sr_9244649
Cambie Ignore first line
A: True
Cambie Allow quoted data?
A: True

Validando el Test Plan
- Use el View Results Tree listener para ayudar a validar la respuesta en la GUI desde el servidor remoto
- Haga clic derecho en el Test Plan (sampleworldcities1) y bajo Add-->Listener seleccione View Results Tree
p >
</ span >
ul >Seleccione View Results Tree , luego haga clic en el triángulo verde en la parte superior de la GUI Apache JMeter </ li ></ ul >
p >< span class ='lia-inline-image-display-wrapper lia-image-align-center' image-alt ='play_viewresultstree.png' style ='width:945px;'>
</ span >
ul >Después de la carga configurada por pasos , JMeter comenzará enviando solicitudes repetidamente , (inicialmente) una a la vez .
ul class ='lia-list-style-type-circle'>
l i >El escudo verde con una marca de verificación es una señal de una solicitud exitosa , si esto se ve , espere varios segundos para que se envíen varias solicitudes y se reciban respuestas . </ li >
l i >Al hacer clic en uno de los escudos verdes MapScale_9M mostrará la pestaña Sampler result que muestra información como:
ul class ='lia-list-style-type-square'>
l i >Load tiempo (tiempo de respuesta)<\/LI>Tamaño en bytes (Encabezado y Cuerpo)<\/LI>Conteo de Errores<\/LI>Código de Respuesta<\/LI>ContentType<\/LI><\/UL><\/LI><\/UL><\/LI><\/UL>Nota: Esta información es excelente para validar la reproducción de la prueba pero también útil para la resolución de problemas de rendimiento<\/FONT><\/STRONG><\/P>
<\/span><\/P>Dado que esta prueba está ejercitando la función export map, una visualización de la imagen solicitada también ayudaría con la validación del Plan de Prueba.Hacer clic en la pestaña Response data y expandir la transacción MapScale_9M debería mostrar la imagen solicitada.Repetir según sea necesario para otras transacciones MapScale_9M<\/LI><\/UL><\/LI>Navegar a través de varias solicitudes debería mostrar diferentes imágenes lo que valida la creación de una prueba de carga export map impulsada por datos en JMeter<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P> <\/P>
<\/span><\/P>Guardando Cambios Recientes<\/H2>Se hicieron muchos cambios desde el último Guardado.<\/P>Guardar el Plan de PruebaArchivo-->Guardar<\/LI><\/UL><\/LI><\/UL>Para descargar el Apache JMeter Test Plan usado en este Artículo vea: sampleworldcities1.zip<\/A><\/P>Para descargar una versión de este Apache JMeter Test Plan con más detalle cubriendo escalas de mapa adicionales vea:
sampleworldcities2.zip<\/A><\/P>