테스트 결과에 대해 문의드립니다.

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

테스트 결과에 대해 문의드립니다.

selectA
안녕하세요.

하나의 성능테스트에 여러 url을 요청하여 수행하는 스크립트를 작성 후
local에서 테스트한 결과에 대해서 궁금한 점이 있어서 문의드립니다.

<테스트 설정>
1. 에이전트 1대(한 PC에 Controller 와 agent을 같이 설치함)
2. 에이전트별 가상사용자 : 10 (프로세스 : 2, 쓰레드 : 5)
3. 실행횟수 : 10
4. 샘플링 주기 : 2
5. Ramp-up 사용하지 않음


질문 1-1) 에이전트 수(1) * 에이전트별 가상사용자(10) * 실행횟수(10) 으로 총 100번 테스트를 수행하는 걸로 알고 있는데 실제 테스트 결과 총 실행 테스트는 270개 정도 나오고 있습니다. 총 실행 테스트 수를 어떻게 보는 것이 맞는건가요?
질문 1-2) 또 샘플링 주기에 따라 총 실행 테스트 수가 다르던데.. 샘플링 주기와 실행 테스트 수의 관계를 어떻게 보고 활용하면 될까요?

질문 2) JMeter는 url별로 TPS와 기타 관련된 데이터가 따로 저장이 되는데 ngrinder에서는 url별로 저장이 되는것이 아니라 성능테스트 전체에 대해서만 나오고 있습니다.
ngrinder에서도 url별로 TPS 그래프와 csv 결과값을 따로 저장하는 방법은 없을까요?

질문 3) csv를 다운로드하여 보면 DateTime에 따라 데이터값들이 정리되어 나오던데 어떤 datatime에 대한 기준으로 표로 정리하여 나오는지 궁금합니다.




혹시 몰라 작성한 스크립트도 같이 첨부합니다.
import static net.grinder.script.Grinder.grinder
import static org.hamcrest.Matchers.*
import static org.junit.Assert.*
import net.grinder.plugin.http.HTTPPluginControl
import net.grinder.plugin.http.HTTPRequest
import net.grinder.script.GTest
import net.grinder.script.Grinder
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 HTTPClient.Cookie
import HTTPClient.CookieModule
import HTTPClient.HTTPResponse
import HTTPClient.NVPair

/**
 * A simple example using the HTTP plugin that shows the retrieval of a
 * single page via HTTP.
 *
 * This script is automatically generated by ngrinder.
 *
 * @author admin
 */
@RunWith(GrinderRunner)
class TestRunner {

        public static GTest test
        public static HTTPRequest request
        public static Cookie[] cookies

        @BeforeProcess
        public static void beforeProcess() {
                HTTPPluginControl.getConnectionDefaults().timeout = 6000
                /* redirection 처리 */
                HTTPPluginControl.getConnectionDefaults().followRedirects = true
                test = new GTest(1, "127.0.0.1")
                request = new HTTPRequest()
                test.record(request)
                grinder.logger.info("before process.")
        }


        @BeforeThread
        public void beforeThread() {
                grinder.statistics.delayReports=true
                grinder.logger.info("before thread.")
                       
               
                NVPair param1 = new NVPair("id","admin");
                NVPair param2 = new NVPair("pw","1234");
               
                NVPair[] params = [param1, param2]
               
               
                /* reset to the all cookies */
                Object threadContext = HTTPPluginControl.getThreadHTTPClientContext();
                cookies = CookieModule.listAllCookies(threadContext)
               
                for (c in cookies) {
                        grinder.logger.info("cookies : {}",c)
                        CookieModule.removeCookie(c, threadContext)
                }
               
                /* Login URL */
                HTTPResponse result = request.POST("http://localhost:8090/board/cookie/login_proc.jsp",params)
               
                grinder.logger.warn("statusCode {}",result.statusCode)
               
                /* save to the login info in cookies */
                cookies = CookieModule.listAllCookies(threadContext)
               
        }

        @Test
        public void test(){
                       
                /* Set to the cookies for login */
                Object threadContext = HTTPPluginControl.getThreadHTTPClientContext()
                for (c in cookies) {
                        CookieModule.addCookie(c, threadContext)
                }
               
                //Request with login
                HTTPResponse result
                int i = 0
                String s = "test"
                /* set parameters */
               
                while(i++<10) {
                        def str = s.concat(i.toString())
                        NVPair param3 = new NVPair("reg_title",str)
                        NVPair param4 = new NVPair("reg_contents",str)
                        NVPair param5 = new NVPair("reg_pwd","1234")
                        NVPair[] params = [param3,param4,param5]
                        //post 방식
                        result = request.POST("http://localhost:8090/board/views/register_ok.jsp",params)
                }
                       
                //get 방식
                result = request.GET("http://localhost:8090/board/views/delete.jsp?idx=2")
               
               
               
                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: 테스트 결과에 대해 문의드립니다.

songeunwoo
안녕하세요.

1. 스크립트 작성 하기에 따라 다양한 방법이 존재 합니다.
작성해 주신 스크립트는 request 를 record 하였기 때문에 모든 request에 대해서 테스트 수로 측정이 된듯 합니다.
에이전트 수(1) * 에이전트별 가상사용자(10) * 실행횟수(10) 일때 100건의 테스트가 나오고 싶으시다면 test() 메서드를 record하면 될듯 합니다.
아래 링크를 보시면 이해가 좀 더 편하실 겁니다.
http://junoyoon.tistory.com/entry/Groovy-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B5%AC%EC%A1%B0

참고로 10번의 수행 결과로는 그래프가 그려지지 않습니다. 에이전트와 컨트롤러간에 최소한의 시간이 있기 때문에 1초도 안되는 시간 으로는 그래프가 작성이 안됩니다.

샘플링주기는 그래프를 그리는 주기로 테스트 카운트와는 관계가 없습니다. 총 테스트를 좀 길게 테스트 해보시면 아실듯 합니다.


2. 각각의 url 별로 tps 그래프와 csv 파일로 저장하는건 불가능 합니다.
아래 링크를 보시면 사용자가 원하시는 데로 그래프 작성이 가능 합니다. 활용 하시면 좋을듯 합니다.
http://www.cubrid.org/wiki_ngrinder/entry/user-defined-statistic-in-ngrinder

3. datatime은 테스트의 샘플링 주기로 지정하신 시간에 따라서 각 에이전트로부터 받은 데이터들을 취합한 값들 입니다.
그러므로 질문주신 내용은 컨트롤러의 샘플링 주기라고 보시면 되겠습니다.