Wie rufen Sie Ihren Restful Web Service mit JMeter auf? Führen Sie einen einfachen Lasttest und eine Automatisierung durch
Veröffentlicht: 2018-02-12Representational State Transfer (REST) hat sich im Web als einfachere Alternative zu SOAP- und Web Services Description Language (WSDL)-basierten Webdiensten durchgesetzt.
Ein wichtiger Beweis für diese Veränderung im Schnittstellendesign ist die Einführung von REST durch etablierte Web 2.0-Dienstanbieter – einschließlich Yahoo, Google und Facebook – die SOAP- und WSDL-basierte Schnittstellen zugunsten einer einfacher zu verwendenden, ressourcenorientiertes Modell, um ihre Dienste bereitzustellen. Manchmal müssen Sie Ihren RESTFul-Webdienst testen. Möglicherweise haben Sie mehrere Möglichkeiten:
- Greifen Sie mit einer einzigen URL auf Ihren WebService zu
- Verwenden Sie
JMeter
und klicken Sie in der Schleife auf WebService. Dieser Test führt auch einige einfacheLoad Test
durch.
Hier in diesem Beispiel erkläre ich Ihnen, wie Sie einen einfachen Hello World WebService
erstellen und denselben WebService mit JMeter erreichen.
Wenn Sie eine der folgenden Fragen haben, sind Sie hier richtig:
- Testen von SOAP/REST-Webdiensten mit JMeter
- Leistungstest einer RESTful-API mit JMeter
- Rest-API-Automatisierung in JMeter – Leistungstests
- So testen Sie die REST-API mit JMeter
- Verwenden von JMeter zum Testen eines RESTful-Webdienstes (Jersey)
Zusammenfassung der Aktion:
- Voraussetzung
Pre-Requisite:
Implementieren Sie diesen RESTFul-Dienst vollständig. - Erstellen Sie eine einfache Java-Klasse: CrunchifyJMeterTest.java (Dienst, den wir mit JMeter treffen werden).
- Stellen Sie dieselbe Anwendung erneut auf dem Apache Tomcat-Webserver bereit.
- Führen Sie JMeter aus und öffnen Sie die unten bereitgestellte
.jmx
-Datei - Führen Sie Ihren Test aus und analysieren Sie ihn
Ein weiteres muss gelesen werden:
- SOAP vs. REST: Simple Object Access Protocol vs. Vertretungsstaatliche Übertragung
Schritt 1
Voraussetzung Pre-Requisite:
Implementieren Sie diesen RESTFul-Dienst vollständig. Anwendung bereitstellen und ausführen.
Lassen Sie mich wissen, wenn Sie ein Problem damit sehen.
Schritt 2
Erstellen Sie CrunchifyJMeterTest.java
Datei
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 ; } } |
Sie sollten unten die Eclipse-Verzeichnisstruktur sehen:
Schritt 3
Stellen Sie dasselbe CrunchifyRESTJerseyExample-Projekt erneut auf Tomcat bereit. Testen Sie Ihren REST-Service.
URL:
http://localhost:8080/CrunchifyRESTJerseyExample/crunchify/index/
Schritt 4
Kopieren Sie den folgenden Code in eine Datei und speichern Sie ihn als 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 > |

Schritt-5
- Laden Sie Apache JMeter herunter.
- Führen Sie JMeter mit der Datei jmeter.bat oder jmeter.sh aus
- Klicken Sie auf
File -> Open
- Gehen Sie zu dem Ordner, in dem Sie die Datei Crunchify-JMeter-Test.jmx gespeichert haben, und wählen Sie die Datei aus
Schritt-6
- Erweitern Sie nun Crunchifys Rest Service JMeter Test, wie Sie im folgenden Bild sehen
- Klicken Sie auf HTTP-Anfrage
- Stellen Sie sicher, dass die folgenden Parameter korrekt sind
Schritt-7
Analysieren Sie Ihr Testergebnis.
Rest-API-Automatisierung in JMeter?
Nun, nach jedem Entwicklungszyklus können Sie in bestimmten Intervallen Tests ausführen, die Sie bereits in der JMeter-Datei definiert haben.
Es gibt eine Reihe anderer Möglichkeiten, wie Sie Ihre Testparameter ändern können. Spielen Sie damit und lassen Sie mich wissen, wie es läuft oder ob Sie ein Problem damit sehen.