JMeter를 사용하여 편안한 웹 서비스를 호출하는 방법은 무엇입니까? 간단한 부하 테스트 및 자동화 수행
게시 됨: 2018-02-12REST(Representational State Transfer)는 SOAP 및 WSDL(Web Services Description Language) 기반 웹 서비스에 대한 간단한 대안으로 웹 전반에 걸쳐 널리 받아들여지고 있습니다.
인터페이스 디자인의 이러한 변화에 대한 주요 증거는 사용하기 쉬운 쪽으로 SOAP 및 WSDL 기반 인터페이스를 더 이상 사용하지 않거나 전달한 주류 Web 2.0 서비스 제공업체(야후, 구글, 페이스북 포함)의 REST 채택입니다. 그들의 서비스를 노출하는 자원 지향 모델. 때로는 RESTFul 웹 서비스를 테스트해야 합니다. 다음과 같은 몇 가지 옵션이 있습니다.
- 단일 URL을 사용하여 WebService를 누르십시오.
-
JMeter
를 사용하고 루프에서 WebService를 누르십시오. 이 테스트는 또한 일부 단순Load Test
를 수행합니다.
여기 이 예에서 JMeter를 사용하여 Simple Hello World WebService
를 만들고 동일한 WebService를 실행하는 방법에 대해 설명하겠습니다.
아래 질문 중 하나라도 있는 경우 올바른 위치에 있습니다.
- JMeter를 사용하여 SOAP/REST 웹 서비스 테스트
- JMeter를 사용한 RESTful API의 성능 테스트
- JMeter의 Rest API 자동화 – 성능 테스트
- JMeter를 사용하여 REST API를 테스트하는 방법
- JMeter를 사용하여 RESTful 웹 서비스 테스트(Jersey)
작업 요약:
- 전제 조건
Pre-Requisite:
이 RESTFul 서비스를 완전히 구현하십시오. - 간단한 Java 클래스 생성: CrunchifyJMeterTest.java(JMeter를 사용하여 적중할 서비스).
- Apache Tomcat 웹 서버에 동일한 애플리케이션을 재배포합니다.
- JMeter를 실행하고 제공된
.jmx
파일 아래에서 엽니다. - 테스트 실행 및 분석
다른 사람은 다음을 읽어야 합니다.
- SOAP 대 REST: 단순 개체 액세스 프로토콜 대. 대표 상태 이전
1 단계
전제 조건 Pre-Requisite:
이 RESTFul 서비스를 완전히 구현하십시오. 애플리케이션을 배포하고 실행합니다.
문제가 있으면 알려주십시오.
2 단계
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 ; } } |
아래 Eclipse 디렉토리 구조가 표시되어야 합니다.
3단계
Tomcat에 동일한 CrunchifyRESTJerseyExample 프로젝트를 재배포하십시오. REST 서비스를 테스트하십시오.
URL:
http://localhost:8080/CrunchifyRESTJerseyExample/crunchify/index/
4단계
아래 코드를 파일로 복사하여 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 > |

5단계
- Apache JMeter를 다운로드합니다.
- jmeter.bat 또는 jmeter.sh 파일을 사용하여 JMeter 실행
-
File -> Open
- Crunchify-JMeter-Test.jmx 파일을 저장한 폴더로 이동하여 파일 선택
6단계
- 이제 아래 이미지에서 볼 수 있듯이 Crunchify의 Rest Service JMeter Test를 확장합니다.
- HTTP 요청 클릭
- 아래 매개변수가 올바른지 확인하십시오.
7단계
테스트 결과를 분석합니다.
JMeter의 Rest API 자동화?
음, 각 개발 주기가 끝나면 JMeter 파일에 이미 정의한 테스트를 특정 간격으로 실행할 수 있습니다.
테스트 매개변수를 변경할 수 있는 다른 방법이 많이 있습니다. 그것을 가지고 놀고 어떻게 진행되는지 또는 이것에 문제가 있으면 알려주십시오.