1개의 test scope 안에서 http request/response 여러번 가능한 지 궁금 합니다. !!

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

1개의 test scope 안에서 http request/response 여러번 가능한 지 궁금 합니다. !!

zpsx
안녕하세요 덕분에 하나 해결했는데,

또 하나의 질문이 생겨 버렸습니다.

코드를 보면 아시겠지만

계정을 생성 하고 그 계정으로 로그인을 해서 세션키를 받아서

일련의 로그인 스텝을 검중 하고 싶어서  스크립트를 작성 중입니다.

근데,

HTTPResponse result_login = request.POST("http://serverip/api/v1/User/Login", builder.getBytes(), headers());

에서 에러가 나는 듯 한데, http request 는 하나의 테스트 블럭 안에서 두 번 사용 하면 안되는 건가요?

만약 안된다고 하면

다른 테스트를 몇 개 만들어서 사용할수 있을거 같은데,

그 경우 혹시 변수 할당해서 그 변수를 넘길수 있는 방법이

있을까요?

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
import groovy.json.JsonBuilder
import groovy.json.JsonOutput
   
     @RunWith(GrinderRunner)
     class LoginDemo
     {
          public static GTest test
          public static HTTPRequest request
         
                  // 프로세스 당 1 번 실행 !!!
          @BeforeProcess public static void beforeProcess()
          {
                HTTPPluginControl.getConnectionDefaults().timeout = 6000
                test = new GTest(1, "http://serverip/swagger/")
                               
                                request = new HTTPRequest()
                                test.record(request);
                               
                                grinder.logger.info("before process.");                    
                        }
             // 쓰레드 당 1 번 실행 !!!
                        @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("================ createid test_start");
                                def json = '{}';
                                HTTPResponse result = request.POST("http://server/api/v1/User/CreateID", json.getBytes(), headers());
                                 
                                grinder.logger.info(result.getText());

                                def message = new JsonSlurper().parseText(result.getText())
                                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));
                                }
                                // =================================================================
                                grinder.logger.info("================  login test_start");
                               
                                def login_json_str ='{"id": "" , "connectedIP": "string" , "os_ver" : 1}';
                                def slurp = new JsonSlurper().parseText(login_json_str)  
                                def builder = new JsonBuilder(slurp)  
                                builder.content.id = message.id;
                               
                                println builder.toPrettyString()
                               
                                HTTPResponse result_login = request.POST("http://serverip/api/v1/User/Login", builder.getBytes(), headers());
                /*
                ERROR No signature of method: net.grinder.plugin.http.HTTPRequest.POST() is applicable for argument types: (String, LinkedHashMap, [LHTTPClient.NVPair;) values: [http://serverip/api/v1/User/Login, [getBytes:[:]], [HTTPClient.NVPair[name=Content-type,value=application/json;charset=UTF-8]]]
Possible solutions: POST(), POST(java.lang.String, [LHTTPClient.NVPair;), POST(java.lang.String, [B, [LHTTPClient.NVPair;), POST(java.lang.String, [LHTTPClient.NVPair;, [LHTTPClient.NVPair;), POST(java.lang.String, java.io.InputStream, [LHTTPClient.NVPair;), POST([LHTTPClient.NVPair;)
groovy.lang.MissingMethodException: No signature of method: net.grinder.plugin.http.HTTPRequest.POST() is applicable for argument types: (String, LinkedHashMap, [LHTTPClient.NVPair;) values: [http://serverip/api/v1/User/Login, [getBytes:[:]], [HTTPClient.NVPair[name=Content-type,value=application/json;charset=UTF-8]]]
Possible solutions: POST(), POST(java.lang.String, [LHTTPClient.NVPair;), POST(java.lang.String, [B, [LHTTPClient.NVPair;), POST(java.lang.String, [LHTTPClient.NVPair;, [LHTTPClient.NVPair;), POST(java.lang.String, java.io.InputStream, [LHTTPClient.NVPair;), POST([LHTTPClient.NVPair;)
        at LoginDemo.test1(cr3.groovy:96)
        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)
                */
                                grinder.logger.info(result_login.getText());
                               
                               
                                if (result_login.statusCode == 301 || result_login.statusCode == 302)
                                {
                                        grinder.logger.warn("Warning. The response may not be correct. The response code was {}.", result_login.statusCode);
                                }
                                else
                                {
                                        assertThat(result_login.statusCode, is(200));
                                }
                         }
                 }


Reply | Threaded
Open this post in threaded view
|

Re: 1개의 test scope 안에서 http request/response 여러번 가능한 지 궁금 합니다. !!

zpsx
아,

HTTPResponse result_login = request.POST("http://server.com/api/v1/User/Login", builder.toPrettyString().getBytes(), headers());

하니까 로그인도 잘 됩니다...형식이 달랐던 것,.,때문에 안되었었네요....

제가 자바 쪽은 전혀 무뇌한이라...

혹시 이런 문제 겪으실 분들을 위해 그대로 두겠습니다.!!!