http json response 관련 송수신 질문 입니다.

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

http json response 관련 송수신 질문 입니다.

zpsx
This post was updated on .
안녕하세요

nGrinder 를 이번에 처음 접한 유저 입니다.~

아래와 같은 그루비 스크립트로

계정 생성 하는 스크립트는 성공을 했는데요

이제
1. 계정 생성 CreatID
2. 계정으로 로그인 Login 하면 response 로 sessionkey 발급  
3. 세션키로 유저 정보 GetUser 하면 유저정보 내려주고

하는 일련의
시나리오로 테스트 를진 행
해 보려하는데요 json을 가지고 하는것이 잘안되는데, 혹시 샘플같은 것이 있을까요?

CreateID 하면
http response 로

{"result":0,"id":"d0efcfde-6683-40af-aece-907cb61360ab"}

이런식으로 현재 로그는 잘찍히고 있습니다. 이 데이터에서 id 만 다시 로그인 에서 사용하려고 하는 케이스 입니다.

맨 아래 소스쪽 주석 풀고 하면 나오는 에러 로그 가 바로 밑 입니다.
-------------------
No signature of method: groovy.json.JsonSlurper.parseText() is applicable for argument types: (HTTPClient.HTTPResponse) values: [HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Date: Fri, 23 Apr 2021 08:21:05 GMT
Server: nginx/1.16.1
]
Possible solutions: parseText(java.lang.String), parse([B), parse([C), parse(java.io.File), parse(java.io.InputStream), parse(java.io.Reader)
groovy.lang.MissingMethodException: No signature of method: groovy.json.JsonSlurper.parseText() is applicable for argument types: (HTTPClient.HTTPResponse) values: [HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Date: Fri, 23 Apr 2021 08:21:05 GMT
Server: nginx/1.16.1
]
Possible solutions: parseText(java.lang.String), parse([B), parse([C), parse(java.io.File), parse(java.io.InputStream), parse(java.io.Reader)
        at LoginDemo.test1(cr3.groovy:83)
        at net.grinder.scriptengine.groovy.junit.GrinderRunner.run(GrinderRunner.java:164)
        at net.grinder.scriptengine.groovy.GroovyScriptEngine$GroovyWorkerRunnable.run(GroovyScriptEngine.java:147)
        at net.grinder.engine.process.GrinderThread.run(GrinderThread.java:118)
------------------

import HTTPClient.HTTPResponse
import HTTPClient.NVPair
import ch.qos.logback.classic.Level
import net.grinder.plugin.http.HTTPPluginControl
import net.grinder.plugin.http.HTTPRequest
import net.grinder.script.GTest
import net.grinder.scriptengine.groovy.junit.GrinderRunner
import net.grinder.scriptengine.groovy.junit.annotation.BeforeProcess
import net.grinder.scriptengine.groovy.junit.annotation.BeforeThread
import org.junit.Test
import org.junit.runner.RunWith
import org.slf4j.LoggerFactory
import static net.grinder.script.Grinder.grinder
import static org.hamcrest.Matchers.is
import static org.junit.Assert.assertThat /** * Created by nd-xm-mac5 on 15/12/24. */
import groovy.json.JsonSlurper
   
     @RunWith(GrinderRunner)
     class LoginDemo
     {
          public static GTest test
          public static HTTPRequest request
         
          @BeforeProcess public static void beforeProcess()
          {
                HTTPPluginControl.getConnectionDefaults().timeout = 6000
                                test = new GTest(1, "http://server.com/swagger/")
                                request = new HTTPRequest()
                                test.record(request);
                                grinder.logger.info("before process.");
                   
                        }
                   
                         @BeforeThread public void beforeThread()
                         {
                                 LoggerFactory.getLogger("worker").setLevel(Level.DEBUG)
                                 grinder.statistics.delayReports = true;
                                 grinder.logger.info("before thread.");
                         }
                       
                         private NVPair[] headers()
                         {
                                 return [ new NVPair("Content-type", "application/json;charset=UTF-8") ];
                         }
                         @Test public void test1()
                         {
                                 grinder.logger.info("test_start");
                                 def json = '{}';
                                 
                                 HTTPResponse result = request.POST("http://server.com/api/v1/User/CreateID", json.getBytes(), headers());
                                 
                                grinder.logger.info(result.getText());
                                 
// 아래 때문에 에러 나서요
//
// def message = """
// {
// "result":"0","id":"dsadasdsadsadsadsa"
// }"
// message = new JsonSlurper().parseText(result)
// grinder.logger.info(message.id)
                 
                                 
                                 if (result.statusCode == 301 || result.statusCode == 302)
                                 {
                                         grinder.logger.warn("Warning. The response may not be correct. The response code was {}.", result.statusCode);
                                 }
                                 else
                                 {
                                         assertThat(result.statusCode, is(200));
                                 }
                         }
                 }
Reply | Threaded
Open this post in threaded view
|

Re: http json response 관련 송수신 질문 입니다.

imbyungjun
Administrator
안녕하세요!

`parseText()` 메서드에 잘못된 파라미터를 전달하여서 발생하는 오류로 보입니다.
`new JsonSlurper().parseText(result)`로 작성하셨는데 이렇게되면 HTTPResponse 객체를 파라미터로 전달하게 됩니다. `new JsonSlurper().parseText(result.getText())`와 같은 방법으로 response의 body를 String 형태로 반환받아서 parseText() 메서드 파라미터로 전달하면 스크립트가 정상적으로 동작할 것 같습니다.
Reply | Threaded
Open this post in threaded view
|

Re: http json response 관련 송수신 질문 입니다.

zpsx
하 정말...간단한 것을 몰랐네요 잘 동작 합니다.!!!!

정말 감사드립니다.!!!!