Bagaimana Memanggil Layanan Web Tenang Anda Menggunakan JMeter? Lakukan Pengujian dan Otomatisasi Beban Sederhana
Diterbitkan: 2018-02-12Representational State Transfer (REST) telah diterima secara luas di seluruh Web sebagai alternatif yang lebih sederhana untuk layanan Web berbasis SOAP dan Web Services Description Language (WSDL).
Bukti utama dari pergeseran dalam desain antarmuka ini adalah adopsi REST oleh penyedia layanan Web 2.0 utama—termasuk Yahoo, Google, dan Facebook—yang telah menghentikan atau meneruskan antarmuka berbasis SOAP dan WSDL demi antarmuka yang lebih mudah digunakan, model berorientasi sumber daya untuk mengekspos layanan mereka. Terkadang Anda harus menguji layanan web RESTFul Anda. Anda mungkin memiliki beberapa opsi:
- Tekan Layanan Web Anda menggunakan satu URL
- Gunakan
JMeter
dan tekan WebService secara berulang. Tes ini juga melakukan beberapaLoad Test
Sederhana.
Di sini, dalam contoh ini saya akan menjelaskan kepada Anda tentang cara Membuat Layanan Web Hello World WebService
Sederhana dan menekan Layanan Web yang sama menggunakan JMeter.
Jika Anda memiliki pertanyaan di bawah ini, Anda berada di tempat yang tepat:
- Menguji Layanan Web SOAP/REST Menggunakan JMeter
- Pengujian Kinerja RESTful API menggunakan JMeter
- Istirahatkan Otomatisasi API di JMeter – Pengujian Kinerja
- Cara menguji REST API menggunakan JMeter
- Menggunakan JMeter untuk menguji layanan web RESTful (Jersey)
Ringkasan Tindakan:
-
Pre-Requisite:
Terapkan layanan RESTFul ini sepenuhnya. - Buat kelas Java sederhana: CrunchifyJMeterTest.java (Layanan yang akan kita tekan menggunakan JMeter).
- Menyebarkan Ulang Aplikasi yang Sama di Server Web Apache Tomcat.
- Jalankan JMeter dan buka file
.jmx
yang disediakan di bawah ini - Jalankan dan Analisis pengujian Anda
Yang lain harus membaca:
- SOAP vs REST: Protokol Akses Objek Sederhana Vs. Transfer Perwakilan Negara
Langkah 1
Pre-Requisite:
Terapkan layanan RESTFul ini sepenuhnya. Deploy dan Jalankan Aplikasi.
Beri tahu saya jika Anda melihat ada masalah dengannya.
Langkah 2
Buat File 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 ; } } |
Anda akan melihat di bawah Struktur Direktori Eclipse:
Langkah-3
Terapkan kembali Proyek CrunchifyRESTJerseyExample yang sama di Tomcat. Uji Layanan REST Anda.
URL:
http://localhost:8080/CrunchifyRESTJerseyExample/crunchify/index/
Langkah-4
Salin Kode di bawah ini ke file dan simpan sebagai 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 > |

Langkah-5
- Unduh Apache JMeter.dll.
- Jalankan JMeter menggunakan file jmeter.bat atau jmeter.sh
- Klik
File -> Open
- Buka folder tempat Anda menyimpan file Crunchify-JMeter-Test.jmx dan pilih file
Langkah-6
- Sekarang perluas Uji JMeter Layanan Istirahat Crunchify seperti yang Anda lihat pada gambar di bawah ini
- Klik pada Permintaan HTTP
- Pastikan parameter di bawah ini benar
Langkah-7
Analisis Hasil Tes Anda.
Istirahatkan Otomatisasi API di JMeter?
Nah, setelah setiap siklus pengembangan, Anda dapat menjalankan tes yang telah Anda tetapkan dalam file JMeter pada interval tertentu.
Ada beberapa cara lain untuk mengubah parameter pengujian Anda. Mainkan dan beri tahu saya bagaimana kelanjutannya atau jika Anda melihat masalah dengan ini.