¿Cómo llamar a su servicio web tranquilo usando JMeter? Realice una prueba de carga simple y automatización
Publicado: 2018-02-12La transferencia de estado representacional (REST) ha ganado una amplia aceptación en la web como una alternativa más simple a los servicios web basados en SOAP y el lenguaje de descripción de servicios web (WSDL).
La evidencia clave de este cambio en el diseño de la interfaz es la adopción de REST por parte de los principales proveedores de servicios Web 2.0, incluidos Yahoo, Google y Facebook, que han dejado de usar o han pasado de las interfaces basadas en SOAP y WSDL a favor de una más fácil de usar. modelo orientado a los recursos para exponer sus servicios. A veces tienes que probar tu servicio web RESTFul. Puede tener un par de opciones:
- Acceda a su servicio web usando una sola URL
- Use
JMeter
y presione WebService en bucle. Esta prueba también realiza algunaLoad Test
simple.
Aquí, en este ejemplo, le explicaré cómo crear un servicio web Simple Hello World WebService
y acceder al mismo servicio web usando JMeter.
Si tiene alguna de las siguientes preguntas, está en el lugar correcto:
- Prueba de servicios web SOAP/REST con JMeter
- Pruebas de rendimiento de una API RESTful usando JMeter
- REST API Automation en JMeter – Pruebas de rendimiento
- Cómo probar la API REST usando JMeter
- Uso de JMeter para probar un servicio web RESTful (Jersey)
Resumen de acción:
-
Pre-Requisite:
implementar este servicio RESTFul por completo. - Cree una clase Java simple: CrunchifyJMeterTest.java (Servicio al que accederemos usando JMeter).
- Vuelva a implementar la misma aplicación en el servidor web Apache Tomcat.
- Ejecute JMeter y abra el archivo
.jmx
proporcionado a continuación - Ejecute y analice su prueba
Otro debe leer:
- SOAP vs REST: Protocolo simple de acceso a objetos vs. Transferencia de estado representacional
Paso 1
Pre-Requisite:
implementar este servicio RESTFul por completo. Implementar y ejecutar la aplicación.
Avísame si ves algún problema con él.
Paso 2
Crear archivo CrunchifyJMeterTest.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package com . crunchify . restjersey ; import java . io . FileNotFoundException ; import java . io . IOException ; import javax . ws . rs . GET ; import javax . ws . rs . Path ; import javax . ws . rs . Produces ; /** * @author Crunchify * */ @ Path ( "/index" ) public class CrunchifyJMeterTest { @ GET @ Produces ( "text/html" ) public String checkECV ( ) throws InterruptedException , FileNotFoundException , IOException { String result = "<br><div align='center'><h2>Hey This is Crunchify's JMeter Test...</h2></div>" ; System . out . println ( result ) ; Thread . sleep ( 1000 ) ; return result ; } } |
Debería ver a continuación la estructura del directorio de Eclipse:
Paso 3
Vuelva a implementar el mismo proyecto CrunchifyRESTJerseyExample en Tomcat. Pruébelo con su servicio REST.
URL:
http://localhost:8080/CrunchifyRESTJerseyExample/crunchify/index/
Etapa 4
Copie el siguiente código en el archivo y guárdelo como Crunchify-JMeter-Test.jmx
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
<? xml version = "1.0" encoding = "UTF-8" ?> < jmeterTestPlan version = "1.2" properties = "2.4" jmeter = "2.9 r1437961" > < hashTree > < TestPlan guiclass = "TestPlanGui" testclass = "TestPlan" testname = "App Shah Desktop Test" enabled = "true" > < stringProp name = "TestPlan.comments" > < / stringProp > < boolProp name = "TestPlan.functional_mode" > false < / boolProp > < boolProp name = "TestPlan.serialize_threadgroups" > false < / boolProp > < elementProp name = "TestPlan.user_defined_variables" elementType = "Arguments" guiclass = "ArgumentsPanel" testclass = "Arguments" testname = "User Defined Variables" enabled = "true" > < collectionProp name = "Arguments.arguments" / > < / elementProp > < stringProp name = "TestPlan.user_define_classpath" > < / stringProp > < / TestPlan > < hashTree > < ThreadGroup guiclass = "ThreadGroupGui" testclass = "ThreadGroup" testname = "Crunchify's REST Service JMeter Test" enabled = "true" > < stringProp name = "ThreadGroup.on_sample_error" > continue < / stringProp > < elementProp name = "ThreadGroup.main_controller" elementType = "LoopController" guiclass = "LoopControlPanel" testclass = "LoopController" testname = "Loop Controller" enabled = "true" > < boolProp name = "LoopController.continue_forever" > false < / boolProp > < intProp name = "LoopController.loops" > - 1 < / intProp > < / elementProp > < stringProp name = "ThreadGroup.num_threads" > 5 < / stringProp > < stringProp name = "ThreadGroup.ramp_time" > 2 < / stringProp > < longProp name = "ThreadGroup.start_time" > 1367432020000 < / longProp > < longProp name = "ThreadGroup.end_time" > 1367432020000 < / longProp > < boolProp name = "ThreadGroup.scheduler" > false < / boolProp > < stringProp name = "ThreadGroup.duration" > < / stringProp > < stringProp name = "ThreadGroup.delay" > < / stringProp > < / ThreadGroup > < hashTree > < HTTPSamplerProxy guiclass = "HttpTestSampleGui" testclass = "HTTPSamplerProxy" testname = "HTTP Request" enabled = "true" > < boolProp name = "HTTPSampler.postBodyRaw" > true < / boolProp > < elementProp name = "HTTPsampler.Arguments" elementType = "Arguments" > < collectionProp name = "Arguments.arguments" > < elementProp name = "" elementType = "HTTPArgument" > < boolProp name = "HTTPArgument.always_encode" > false < / boolProp > < stringProp name = "Argument.value" > < / stringProp > < stringProp name = "Argument.metadata" > = < / stringProp > < / elementProp > < / collectionProp > < / elementProp > < stringProp name = "HTTPSampler.domain" > localhost < / stringProp > < stringProp name = "HTTPSampler.port" > 8080 < / stringProp > < stringProp name = "HTTPSampler.connect_timeout" > 10000 < / stringProp > < stringProp name = "HTTPSampler.response_timeout" > 10000 < / stringProp > < stringProp name = "HTTPSampler.protocol" > < / stringProp > < stringProp name = "HTTPSampler.contentEncoding" > < / stringProp > < stringProp name = "HTTPSampler.path" > / CrunchifyRESTJerseyExample / crunchify / index < / stringProp > < stringProp name = "HTTPSampler.method" > GET < / stringProp > < boolProp name = "HTTPSampler.follow_redirects" > true < / boolProp > < boolProp name = "HTTPSampler.auto_redirects" > false < / boolProp > < boolProp name = "HTTPSampler.use_keepalive" > true < / boolProp > < boolProp name = "HTTPSampler.DO_MULTIPART_POST" > false < / boolProp > < boolProp name = "HTTPSampler.monitor" > false < / boolProp > < stringProp name = "HTTPSampler.embedded_url_re" > < / stringProp > < / HTTPSamplerProxy > < hashTree / > < ResultCollector guiclass = "StatGraphVisualizer" testclass = "ResultCollector" testname = "Aggregate Graph" enabled = "true" > < boolProp name = "ResultCollector.error_logging" > false < / boolProp > < objProp > < name > saveConfig < / name > < value class = "SampleSaveConfiguration" > < time > true < / time > < latency > true < / latency > < timestamp > true < / timestamp > < success > true < / success > < label > true < / label > < code > true < / code > < message > true < / message > < threadName > true < / threadName > < dataType > true < / dataType > < encoding > false < / encoding > < assertions > true < / assertions > < subresults > true < / subresults > < responseData > false < / responseData > < samplerData > false < / samplerData > < xml > true < / xml > < fieldNames > false < / fieldNames > < responseHeaders > false < / responseHeaders > < requestHeaders > false < / requestHeaders > < responseDataOnError > false < / responseDataOnError > < saveAssertionResultsFailureMessage > false < / saveAssertionResultsFailureMessage > < assertionsResultsToSave > 0 < / assertionsResultsToSave > < bytes > true < / bytes > < / value > < / objProp > < stringProp name = "filename" > < / stringProp > < / ResultCollector > < hashTree / > < ResultCollector guiclass = "StatVisualizer" testclass = "ResultCollector" testname = "Aggregate Report" enabled = "true" > < boolProp name = "ResultCollector.error_logging" > false < / boolProp > < objProp > < name > saveConfig < / name > < value class = "SampleSaveConfiguration" > < time > true < / time > < latency > true < / latency > < timestamp > true < / timestamp > < success > true < / success > < label > true < / label > < code > true < / code > < message > true < / message > < threadName > true < / threadName > < dataType > true < / dataType > < encoding > false < / encoding > < assertions > true < / assertions > < subresults > true < / subresults > < responseData > false < / responseData > < samplerData > false < / samplerData > < xml > false < / xml > < fieldNames > false < / fieldNames > < responseHeaders > false < / responseHeaders > < requestHeaders > false < / requestHeaders > < responseDataOnError > false < / responseDataOnError > < saveAssertionResultsFailureMessage > false < / saveAssertionResultsFailureMessage > < assertionsResultsToSave > 0 < / assertionsResultsToSave > < bytes > true < / bytes > < / value > < / objProp > < stringProp name = "filename" > < / stringProp > < / ResultCollector > < hashTree / > < / hashTree > < / hashTree > < / hashTree > < / jmeterTestPlan > |

Paso-5
- Descarga Apache JMeter.
- Ejecute JMeter usando el archivo jmeter.bat o jmeter.sh
- Haga clic en
File -> Open
- Vaya a la carpeta donde guardó el archivo Crunchify-JMeter-Test.jmx y seleccione el archivo
Paso-6
- Ahora expanda la prueba JMeter del servicio de descanso de Crunchify como se ve en la imagen de abajo
- Haga clic en Solicitud HTTP
- Asegúrese de que los siguientes parámetros sean correctos
Paso-7
Analice el resultado de su prueba.
Resto de automatización de API en JMeter?
Bueno, después de cada ciclo de desarrollo, puede ejecutar la prueba que ya definió en el archivo JMeter en un intervalo específico.
Hay otras formas de cambiar los parámetros de prueba. Juega con él y hazme saber cómo va o si ves algún problema con esto.