파일에서 테스트 url 로드 시 실행 관련 문의

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

파일에서 테스트 url 로드 시 실행 관련 문의

mulder
안녕하세요.

전에 문의 드린 파일 로드 및 동시 실행 관련해서 스크립트를 작성했습니다.

# -*- coding:utf-8 -*-
from net.grinder.script import Test
from net.grinder.script.Grinder import grinder
from net.grinder.plugin.http import HTTPPluginControl, HTTPRequest
control = HTTPPluginControl.getConnectionDefaults()
connectionDefaults = HTTPPluginControl.getConnectionDefaults()
httpUtilities = HTTPPluginControl.getHTTPUtilities()                                                        
 
test1 = Test(1, "Test1")
request1 = HTTPRequest()
test_host = "http://www.google.co.kr/"
request1 = test1.wrap(HTTPRequest(url=test_host))

# Make any method call on request increase TPS
test1.record(request1)

#load from file
test_query_file = "D:\url_all.txt" #(로컬 테스트용)
 
class TestRunner:

    def __init__(self):

        grinder.statistics.delayReports=True        
        self.urlCount = 0
        self.urlList = []

        try:
            fpQuery = open(test_query_file, "r")
            for line in fpQuery:
                self.urlList.append(line)
                self.urlCount = self.urlCount + 1
                print line
        except:
            print("error")
#        finally:
#            print(self.urlCount)
        self.phase1CompleteBarrier = grinder.barrier("Phase 1")
   
    def __call__(self):
        # Wait for all worker threads to reach this point before proceeding.
        self.phase1CompleteBarrier.await()

        for line in self.urlList:
            result1 = request1.GET(line)
           
            if result1.getStatusCode() == 200 :
                grinder.statistics.forLastTest.success = 1
            elif result1.getStatusCode() in (301, 302) :
                grinder.logger.warn("Warning. The response may not be correct. The response code was %d." %  result1.getStatusCode())
                grinder.statistics.forLastTest.success = 1
            else :
                print(result1.getStatusCode())
                grinder.statistics.forLastTest.success = 0

url_all.txt에는 테스트 데이터가 저장되어있습니다. (10개의 테스트 될 각기 다른 url)

테스트 되어야할 대상 url을 url_all.txt 파일에서 읽어와서 배열에 넣고
동시에 읽어온 url을 호출하려는 의도입니다.
코드가 적절한지 한번 리뷰 부탁 드립니다.

그리고, 실제 for문으로 배려에서 읽어온 url을 호출하게 되어있는데,
이부분이 동시에 실행이 가능한 지 여부(랑데뷰 포인트),
쓰레드 10개로 설정한 경우 한개의 쓰레드에서 for문에서 반복되는 횟수만큼 실행이 되는건지요?(url이 10개인 경우)
총 100개의 url 호출되는 효과인지?

만일 유일하게 1개의 쓰레드에서 파일에서 로드된 1개의 유일한 url을 호출하고자 하는 경우에는 어떻게 처리해야하는지
확인 부탁 드립니다.

처음 접하다 보니 어렵네요. ㅠㅠ

감사합니다.
Reply | Threaded
Open this post in threaded view
|

Re: 파일에서 테스트 url 로드 시 실행 관련 문의

junoyoon
Administrator
정확히 어떤 시나리오를 테스트 하시려고 하는지 잘 모르겠습니다.

만약 각 쓰레드에게 다른 일을 시키시려고 하시면 다음 자료를 참고하시기 바랍니다.



2014년 3월 11일 오후 12:50, mulder [via ngrinder] <[hidden email]>님이 작성:
안녕하세요.

전에 문의 드린 파일 로드 및 동시 실행 관련해서 스크립트를 작성했습니다.

# -*- coding:utf-8 -*-
from net.grinder.script import Test
from net.grinder.script.Grinder import grinder
from net.grinder.plugin.http import HTTPPluginControl, HTTPRequest
control = HTTPPluginControl.getConnectionDefaults()
connectionDefaults = HTTPPluginControl.getConnectionDefaults()
httpUtilities = HTTPPluginControl.getHTTPUtilities()                                                        
 
test1 = Test(1, "Test1")
request1 = HTTPRequest()
test_host = "http://www.google.co.kr/"
request1 = test1.wrap(HTTPRequest(url=test_host))

# Make any method call on request increase TPS
test1.record(request1)

#load from file
test_query_file = "D:\url_all.txt" #(로컬 테스트용)
 
class TestRunner:

    def __init__(self):

        grinder.statistics.delayReports=True        
        self.urlCount = 0
        self.urlList = []

        try:
            fpQuery = open(test_query_file, "r")
            for line in fpQuery:
                self.urlList.append(line)
                self.urlCount = self.urlCount + 1
                print line
        except:
            print("error")
#        finally:
#            print(self.urlCount)
        self.phase1CompleteBarrier = grinder.barrier("Phase 1")
   
    def __call__(self):
        # Wait for all worker threads to reach this point before proceeding.
        self.phase1CompleteBarrier.await()

        for line in self.urlList:
            result1 = request1.GET(line)
           
            if result1.getStatusCode() == 200 :
                grinder.statistics.forLastTest.success = 1
            elif result1.getStatusCode() in (301, 302) :
                grinder.logger.warn("Warning. The response may not be correct. The response code was %d." %  result1.getStatusCode())
                grinder.statistics.forLastTest.success = 1
            else :
                print(result1.getStatusCode())
                grinder.statistics.forLastTest.success = 0

url_all.txt에는 테스트 데이터가 저장되어있습니다. (10개의 테스트 될 각기 다른 url)

테스트 되어야할 대상 url을 url_all.txt 파일에서 읽어와서 배열에 넣고
동시에 읽어온 url을 호출하려는 의도입니다.
코드가 적절한지 한번 리뷰 부탁 드립니다.

그리고, 실제 for문으로 배려에서 읽어온 url을 호출하게 되어있는데,
이부분이 동시에 실행이 가능한 지 여부(랑데뷰 포인트),
쓰레드 10개로 설정한 경우 한개의 쓰레드에서 for문에서 반복되는 횟수만큼 실행이 되는건지요?(url이 10개인 경우)
총 100개의 url 호출되는 효과인지?

만일 유일하게 1개의 쓰레드에서 파일에서 로드된 1개의 유일한 url을 호출하고자 하는 경우에는 어떻게 처리해야하는지
확인 부탁 드립니다.

처음 접하다 보니 어렵네요. ㅠㅠ

감사합니다.



If you reply to this email, your message will be added to the discussion below:
http://ngrinder.642.n7.nabble.com/url-tp1375.html
To start a new topic under ngrinder-user-kr, email [hidden email]
To unsubscribe from ngrinder-user-kr, click here.
NAML

Reply | Threaded
Open this post in threaded view
|

Re: 파일에서 테스트 url 로드 시 실행 관련 문의

mulder
This post was updated on .
그대로 옮기다보니 리소스 부분 수정을 안해서 발생한 문제입니다.
해결되었습니다. 감사합니다.
======================================================

말씀해주신 부분 적용해서 쓰레드별로 유일한 url을 호출하도록 수정하였습니다.
다만, 로컬 환경(eclipse+jython)에서 정상 동작하지만,
nGrinder에 올려서 테스트하면 실행 시 오류가 발생합니다.

# -*- coding:utf-8 -*-
from net.grinder.script import Test
from net.grinder.script.Grinder import grinder
from net.grinder.plugin.http import HTTPPluginControl, HTTPRequest
control = HTTPPluginControl.getConnectionDefaults()
connectionDefaults = HTTPPluginControl.getConnectionDefaults()
httpUtilities = HTTPPluginControl.getHTTPUtilities()                                                        
 
test1 = Test(1, "Test1")
request1 = HTTPRequest()
test_host = "http://www.google.co.kr/"
request1 = test1.wrap(HTTPRequest(url=test_host))

# Make any method call on request increase TPS
test1.record(request1)

#load from file
test_query_file = "D:\url_all.txt"
 
class TestRunner:

    def __init__(self):

        grinder.statistics.delayReports=True

        # 에이전트당 프로세스 개수를 가져옵니다.
        totalProcessCount = grinder.getProperties().getInt("grinder.processes", 1)
        # 프로세스당 쓰레드 개수를 가져옵니다.
        totalThreadCount = grinder.getProperties().getInt("grinder.threads", 1)
        # 현재 이 쓰레드가 동작하는 에이전트의 번호를 가져옵니다. (0부터 시작)
        agentNumber = grinder.agentNumber
        # 현재 이 쓰레디가 동작하는 프로세스의 번호를 가져옵니다. (0부터 시작)
        processNumber = grinder.processNumber
        # 현재 이 쓰레드의 번호를 가져옵니다.
        threadNumber = grinder.threadNumber
        # 현재 쓰레드의 Unique ID를 계산합니다.
        self.curNumber = (agentNumber * totalProcessCount * totalThreadCount) + (processNumber * totalThreadCount) + threadNumber;        
               
        self.urlCount = 0
        self.urlList = []

        try:
            fpQuery = open(test_query_file, "r")
            for line in fpQuery:
                self.urlList.append(line)
        except:
            print("error")
       
        self.phase1CompleteBarrier = grinder.barrier("Phase 1")
   
    def __call__(self):
        # Wait for all worker threads to reach this point before proceeding.
        self.phase1CompleteBarrier.await()
       
        url = self.urlList[self.curNumber]
        result1 = request1.GET(url)
       
        if result1.getStatusCode() == 200 :
            grinder.statistics.forLastTest.success = 1
        elif result1.getStatusCode() in (301, 302) :
            grinder.logger.warn("Warning. The response may not be correct. The response code was %d." %  result1.getStatusCode())
            grinder.statistics.forLastTest.success = 1
        else :
            print(result1.getStatusCode())
#            grinder.statistics.forLastTest.success = 0  



아래 부분에서 오류가 발생합니다.
        result1 = request1.GET(url)
index out of range: 0 이라고 오류가 발생하는데 무슨 문제인지 확인 부탁 드립니다.
감사합니다.
Reply | Threaded
Open this post in threaded view
|

Re: 파일에서 테스트 url 로드 시 실행 관련 문의

mulder
In reply to this post by junoyoon
nGrinder 실행 중에 이상한 점이 발생하여 문의 드립니다.

vUser를 차츰 증가 시키면서 테스트 했는데,
400명 정상, 800명 정상, 1200명 정상, 1600명 오류 발생
1600명 오류 발생 이후에 적은 수의 vUser로 테스트 해도 오류가 발생하여 실행이 안됩니다.
에이전트 리스타트 이후 정상 동작함.

아래는 에이전트 로그인데, 무슨 문제인지 알수가 없습니다.
도움 부탁 드립니다.

감사합니다.

<Agent1 error>

2014-03-11 17:41:06,408 INFO  agent daemon: received a stop message
2014-03-11 17:41:06,408 INFO  agent daemon: Don't start anymore by message from
controller.
2014-03-11 17:41:06,440 INFO  agent daemon: communication shut down
2014-03-11 17:41:06,440 INFO  s-lr1-0: Waiting for threads to terminate
2014-03-11 17:41:06,876 ERROR agent daemon: Error while pumping up the AgentProc
essReportMessage
2014-03-11 17:41:06,939 INFO  s-lr1-0: Report to console failed
net.grinder.communication.CommunicationException: Exception whilst sending messa
ge
        at net.grinder.communication.AbstractSender.send(AbstractSender.java:57)
 ~[grinder-core-3.9.1.jar:na]
        at net.grinder.communication.QueuedSenderDecorator.flush(QueuedSenderDec
orator.java:60) ~[grinder-core-3.9.1.jar:na]
        at net.grinder.engine.process.GrinderProcess.sendStatusMessage(GrinderPr
ocess.java:544) ~[ngrinder-runtime-3.3.jar:na]
        at net.grinder.engine.process.GrinderProcess.access$1100(GrinderProcess.
java:83) ~[ngrinder-runtime-3.3.jar:na]
        at net.grinder.engine.process.GrinderProcess$ReportToConsoleTimerTask.ru
n(GrinderProcess.java:528) ~[ngrinder-runtime-3.3.jar:na]
        at java.util.TimerThread.mainLoop(Unknown Source) [na:1.7.0_51]
        at java.util.TimerThread.run(Unknown Source) [na:1.7.0_51]
Caused by: java.net.SocketException: Software caused connection abort: socket wr
ite error
        at java.net.SocketOutputStream.socketWrite0(Native Method) ~[na:1.7.0_51
]
        at java.net.SocketOutputStream.socketWrite(Unknown Source) ~[na:1.7.0_51
]
        at java.net.SocketOutputStream.write(Unknown Source) ~[na:1.7.0_51]
        at java.io.BufferedOutputStream.flushBuffer(Unknown Source) ~[na:1.7.0_5
1]
        at java.io.BufferedOutputStream.flush(Unknown Source) ~[na:1.7.0_51]
        at java.io.ObjectOutputStream$BlockDataOutputStream.flush(Unknown Source
) ~[na:1.7.0_51]
        at java.io.ObjectOutputStream.flush(Unknown Source) ~[na:1.7.0_51]
        at net.grinder.communication.AbstractSender.writeMessageToStream(Abstrac
tSender.java:90) ~[grinder-core-3.9.1.jar:na]
        at net.grinder.communication.StreamSender.writeMessage(StreamSender.java
:70) ~[grinder-core-3.9.1.jar:na]
        at net.grinder.communication.AbstractSender.send(AbstractSender.java:53)
 ~[grinder-core-3.9.1.jar:na]
        ... 6 common frames omitted
2014-03-11 17:41:11,447 INFO  agent daemon: Terminating unresponsive processes b
y force
2014-03-11 17:41:11,634 INFO  agent daemon: All workers are finished
2014-03-11 17:41:11,634 INFO  agent daemon: Test shuts down.
2014-03-11 17:41:11,634 INFO  agent controller: Send log for test_71
2014-03-11 17:41:11,634 INFO  agent controller: Clean up the perftest logs
Reply | Threaded
Open this post in threaded view
|

Re: 파일에서 테스트 url 로드 시 실행 관련 문의

junoyoon
Administrator


2014-03-11 17:54 GMT+09:00 mulder [via ngrinder] <[hidden email]>:
nGrinder 실행 중에 이상한 점이 발생하여 문의 드립니다.

vUser를 차츰 증가 시키면서 테스트 했는데,
400명 정상, 800명 정상, 1200명 정상, 1600명 오류 발생
1600명 오류 발생 이후에 적은 수의 vUser로 테스트 해도 오류가 발생하여 실행이 안됩니다.
에이전트 리스타트 이후 정상 동작함.

아래는 에이전트 로그인데, 무슨 문제인지 알수가 없습니다.
도움 부탁 드립니다.

감사합니다.

<Agent1 error>

2014-03-11 17:41:06,408 INFO  agent daemon: received a stop message
2014-03-11 17:41:06,408 INFO  agent daemon: Don't start anymore by message from
controller.
2014-03-11 17:41:06,440 INFO  agent daemon: communication shut down
2014-03-11 17:41:06,440 INFO  s-lr1-0: Waiting for threads to terminate
2014-03-11 17:41:06,876 ERROR agent daemon: Error while pumping up the AgentProc
essReportMessage
2014-03-11 17:41:06,939 INFO  s-lr1-0: Report to console failed
net.grinder.communication.CommunicationException: Exception whilst sending messa
ge
        at net.grinder.communication.AbstractSender.send(AbstractSender.java:57)
 ~[grinder-core-3.9.1.jar:na]
        at net.grinder.communication.QueuedSenderDecorator.flush(QueuedSenderDec
orator.java:60) ~[grinder-core-3.9.1.jar:na]
        at net.grinder.engine.process.GrinderProcess.sendStatusMessage(GrinderPr
ocess.java:544) ~[ngrinder-runtime-3.3.jar:na]
        at net.grinder.engine.process.GrinderProcess.access$1100(GrinderProcess.
java:83) ~[ngrinder-runtime-3.3.jar:na]
        at net.grinder.engine.process.GrinderProcess$ReportToConsoleTimerTask.ru
n(GrinderProcess.java:528) ~[ngrinder-runtime-3.3.jar:na]
        at java.util.TimerThread.mainLoop(Unknown Source) [na:1.7.0_51]
        at java.util.TimerThread.run(Unknown Source) [na:1.7.0_51]
Caused by: java.net.SocketException: Software caused connection abort: socket wr
ite error
        at java.net.SocketOutputStream.socketWrite0(Native Method) ~[na:1.7.0_51
]
        at java.net.SocketOutputStream.socketWrite(Unknown Source) ~[na:1.7.0_51
]
        at java.net.SocketOutputStream.write(Unknown Source) ~[na:1.7.0_51]
        at java.io.BufferedOutputStream.flushBuffer(Unknown Source) ~[na:1.7.0_5
1]
        at java.io.BufferedOutputStream.flush(Unknown Source) ~[na:1.7.0_51]
        at java.io.ObjectOutputStream$BlockDataOutputStream.flush(Unknown Source
) ~[na:1.7.0_51]
        at java.io.ObjectOutputStream.flush(Unknown Source) ~[na:1.7.0_51]
        at net.grinder.communication.AbstractSender.writeMessageToStream(Abstrac
tSender.java:90) ~[grinder-core-3.9.1.jar:na]
        at net.grinder.communication.StreamSender.writeMessage(StreamSender.java
:70) ~[grinder-core-3.9.1.jar:na]
        at net.grinder.communication.AbstractSender.send(AbstractSender.java:53)
 ~[grinder-core-3.9.1.jar:na]
        ... 6 common frames omitted
2014-03-11 17:41:11,447 INFO  agent daemon: Terminating unresponsive processes b
y force
2014-03-11 17:41:11,634 INFO  agent daemon: All workers are finished
2014-03-11 17:41:11,634 INFO  agent daemon: Test shuts down.
2014-03-11 17:41:11,634 INFO  agent controller: Send log for test_71
2014-03-11 17:41:11,634 INFO  agent controller: Clean up the perftest logs


If you reply to this email, your message will be added to the discussion below:
http://ngrinder.642.n7.nabble.com/url-tp1375p1382.html
To start a new topic under ngrinder-user-kr, email [hidden email]
To unsubscribe from ngrinder-user-kr, click here.
NAML

Reply | Threaded
Open this post in threaded view
|

Re: 파일에서 테스트 url 로드 시 실행 관련 문의

mulder
This post was updated on .
안녕하세요.
리눅스가 아니라 윈도우인데 질문에서 빠뜨렸네요. 죄송합니다.
윈도우 환경에서 조정하는 방법 부탁 드립니다.
windows server 2008 R2(x64)

감사합니다.
Reply | Threaded
Open this post in threaded view
|

Re: 파일에서 테스트 url 로드 시 실행 관련 문의

junoyoon
Administrator
윈도우 환경이라면.. 위 문제는 발생하지 않습니다. 
대신 이 문제는 가용메모리가 작아서 에이전트가 오동작 했을 가능성이 있군요.
메모리를 올리시거나, 아니면 프로세스 개수를 작게 하셔서 실행해보세요.


2014-03-11 18:51 GMT+09:00 mulder [via ngrinder] <[hidden email]>:
안녕하세요.
리눅스가 아니라 윈도우인데 질문에서 빠뜨렸네요. 죄송합니다.
윈도우 환경에서 조정하는 방법 부탁 드립니다.

감사합니다.


If you reply to this email, your message will be added to the discussion below:
http://ngrinder.642.n7.nabble.com/url-tp1375p1385.html
To start a new topic under ngrinder-user-kr, email [hidden email]
To unsubscribe from ngrinder-user-kr, click here.
NAML

Reply | Threaded
Open this post in threaded view
|

Re: 파일에서 테스트 url 로드 시 실행 관련 문의

junoyoon
Administrator
In reply to this post by mulder
result1 = request1.GET(url) 에서는 index out of range: 0 에러가 발생하지 않습니다. 다른 문제를 오해하신 듯 합니다.
아무래도 파이선 프로그레밍에 익숙하지 않으셔서 nGrinder 를 사용하시는데 어려움을 느끼시는 것 같습니다.
자바가 친숙하시다면 Groovy를 사용하시기 바라며, 만약 자바도 익숙하지 않으시다면 

LoadRunner 와 같이 외부 기술 지원을 받으실 수 있는 제품을 사용하시는 편이 더 나을 것 같습니다.


2014-03-11 16:03 GMT+09:00 mulder [via ngrinder] <[hidden email]>:
말씀해주신 부분 적용해서 쓰레드별로 유일한 url을 호출하도록 수정하였습니다.
다만, 로컬 환경(eclipse+jython)에서 정상 동작하지만,
nGrinder에 올려서 테스트하면 실행 시 오류가 발생합니다.

# -*- coding:utf-8 -*-
from net.grinder.script import Test
from net.grinder.script.Grinder import grinder
from net.grinder.plugin.http import HTTPPluginControl, HTTPRequest
control = HTTPPluginControl.getConnectionDefaults()
connectionDefaults = HTTPPluginControl.getConnectionDefaults()
httpUtilities = HTTPPluginControl.getHTTPUtilities()                                                        
 
test1 = Test(1, "Test1")
request1 = HTTPRequest()
test_host = "http://www-qa.ticketmonster.co.kr/"
request1 = test1.wrap(HTTPRequest(url=test_host))

# Make any method call on request increase TPS
test1.record(request1)

#load from file
test_query_file = "D:\url_all.txt"
 
class TestRunner:

    def __init__(self):

        grinder.statistics.delayReports=True

        # 에이전트당 프로세스 개수를 가져옵니다.
        totalProcessCount = grinder.getProperties().getInt("grinder.processes", 1)
        # 프로세스당 쓰레드 개수를 가져옵니다.
        totalThreadCount = grinder.getProperties().getInt("grinder.threads", 1)
        # 현재 이 쓰레드가 동작하는 에이전트의 번호를 가져옵니다. (0부터 시작)
        agentNumber = grinder.agentNumber
        # 현재 이 쓰레디가 동작하는 프로세스의 번호를 가져옵니다. (0부터 시작)
        processNumber = grinder.processNumber
        # 현재 이 쓰레드의 번호를 가져옵니다.
        threadNumber = grinder.threadNumber
        # 현재 쓰레드의 Unique ID를 계산합니다.
        self.curNumber = (agentNumber * totalProcessCount * totalThreadCount) + (processNumber * totalThreadCount) + threadNumber;        
               
        self.urlCount = 0
        self.urlList = []

        try:
            fpQuery = open(test_query_file, "r")
            for line in fpQuery:
                self.urlList.append(line)
        except:
            print("error")
       
        self.phase1CompleteBarrier = grinder.barrier("Phase 1")
   
    def __call__(self):
        # Wait for all worker threads to reach this point before proceeding.
        self.phase1CompleteBarrier.await()
       
        url = self.urlList[self.curNumber]
        result1 = request1.GET(url)
       
        if result1.getStatusCode() == 200 :
            grinder.statistics.forLastTest.success = 1
        elif result1.getStatusCode() in (301, 302) :
            grinder.logger.warn("Warning. The response may not be correct. The response code was %d." %  result1.getStatusCode())
            grinder.statistics.forLastTest.success = 1
        else :
            print(result1.getStatusCode())
#            grinder.statistics.forLastTest.success = 0  



아래 부분에서 오류가 발생합니다.
        result1 = request1.GET(url)
index out of range: 0 이라고 오류가 발생하는데 무슨 문제인지 확인 부탁 드립니다.
감사합니다.


If you reply to this email, your message will be added to the discussion below:
http://ngrinder.642.n7.nabble.com/url-tp1375p1379.html
To start a new topic under ngrinder-user-kr, email [hidden email]
To unsubscribe from ngrinder-user-kr, click here.
NAML