ngrinder Test관련 여러가지 질문있습니다

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

ngrinder Test관련 여러가지 질문있습니다

nucknuck
This post was updated on .
안녕하세요 덕분에 nGrinder 잘 이용하고 있습니다. 여러 방법으로 test하면서 궁금한 점들이 있어서 이렇게 질문드립니다.
현재 nGrinder는 3.5.2 버전을 사용하고 있습니다.

1. Transaction이 Test.record('객체')에 있는 '객체'의 어떤 함수가 호출될 때마다 transaction이 증가하는 것으로 알고 있어서
Test.record(TestRunner.__call__) 과 Test.record(request) 두 가지 모두 같은 환경에서 사용해봤습니다.
먼저 __call__을 record 했을 때 결과입니다.

처음에 2초동안 2명의 유저가 52번 요청을 해서 TPS가 26으로 찍혔는데 이 의미는 2초동안 2명의 유저가 지속적으로 52번 요청을 보냈다는 의미인가요?
이번엔 request객체를 record했을 때 입니다.

아까와는 달리 2초동안 2명이 66번을 날린 것을 볼 수 있고 그 이후에는 훨씬 격차가 벌어지는 것을 볼 수 있습니다. 저는 오히려 request객체를 record했을 때 더 적게 카운트 될 것이라고 생각했는데 왜 이러는지 알려주시면 감사하겠습니다.

2. stress test 하다가 중간에 TPS가 너무 낮다며 중간에 중단되서 검색하다가 성공률이 30%이하면 자동으로 test가 중단된다는 글을 봤습니다. 이 글이 맞는지 궁금하고, 맞다면 stress test는 이런 상황이 많이 발생할 텐데 어떻게 stress test를 해야할 지 궁금합니다.

3. vuser를 5 ~ 1000명까지 올라가도록 설정하고 테스트 했는데 600명까지 잘 올라가다가 더이상 올라가지 않고 자기 마음대로 vuser가 변경되면서 테스트가 진행됐었습니다. 이런 현상에 대한 원인이 궁금합니다.

4. vuser를 5~600명까지 올라가도록 설정하고 테스트하고 나서 result csv 파일을 보면 Tests 항목이 처음에 급증하다가 계속 일정하게 유지되는데 이게 정상적인 결과인가요? 저는 vuser에 따라서 Tests수는 증가하고 server의 상태에 따라서 TPS가 결정될 것이라고 예상했는데, 제 예상과는 너무 달라서 여쭤봅니다

글 읽어주셔서 감사하고 답변 달아주시면 감사하겠습니다

----------------------------------------------------------
test1 = Test(1, "Test1")
request = HTTPRequest()
tempEndPoint = "***"
tempToken = "***"
class TestRunner:
        # initlialize a thread
        def __init__(self):
                test1.record(request) # TestRunner.__call__도 시도해봄
                f = open("./resources/sample.bin", "rb")
                self.sample_bin = f.read()
                f.close()
                pass
       
        def before(self):
                headers = [NVPair("**", "**")]
                request.headers = headers
               
        # test method
        def __call__(self):
                self.before()
                result = request.POST(tempEndPoint, self.sample_bin)

                if result.getStatusCode() == 200 :
                        grinder.logger.info("------------------------------")
                        grinder.logger.info("Success!!")
                        grinder.logger.info("------------------------------")
                        return
                elif result.getStatusCode() in (301, 302) :
                        grinder.logger.warn("Warning. The response may not be correct. The response code was %d." %  result.getStatusCode())
                        return
                elif result.getStatusCode() in (500, 501, 503) :
                        grinder.logger.warn("Warning. Server Internal Error. The response code was %d." %  result.getStatusCode())
                else :
                        raise