스크립트 작성 문의

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

스크립트 작성 문의

kim hyoseok
This post was updated on .
저번에 문의에 대한 빠른 답변이 감사해서
또 찾게 되었습니다.

이번에는 스크립트 작성에 대해 문의를 드리려고 합니다.

지금 TCP Socket 서버 test를 하려고 하는데,
socket connection이 실패하게 되면 에러 카운트를 올려서
결과 리포트에 보이게 하고 싶습니다

참고 스크립트 소스--------------------------------------------------------------
try:
                sock.connect((HOST, PORT))
        except socket.error, msg:
                sys.stderr.write("[ERROR] %s\n" % msg[1])
                grinder.statistics.forLastTest.success = 0
------------------------------------------------------------------------------

위의 API를 사용하면 될 줄 알았는데, connection refused가 발생하게 해서 스크립트 검증을 했더니
아래와 같은 에러를 출력하였습니다.

참고 스크립트 에러--------------------------------------------------------------------------------------
013-03-11 01:11:21,697 ERROR Aborted run: Java exception calling TestRunner
net.grinder.scriptengine.jython.JythonScriptExecutionException: Java exception calling TestRunner
        grinder.statistics.forLastTest.success = 0
        File "${NGRINDER_HOME}\script\kimdals\Test_TCP.py", line 41, in __call__
        grinder.statistics.forLastTest.success = 0
        File "${NGRINDER_HOME}\script\kimdals\Test_TCP.py", line 41, in __call__
net.grinder.script.InvalidContextException: No tests have been performed by this thread.
        at net.grinder.engine.process.ScriptStatisticsImplementation.getForLastTest(ScriptStatisticsImplementation.java:130) ~[grinder-core-3.9.1.jar:na]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_07]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_07]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_07]
        at java.lang.reflect.Method.invoke(Method.java:601) ~[na:1.7.0_07]
        at org.python.core.PyBeanProperty._doget(PyBeanProperty.java:33) ~[jython-standalone-2.5.3.jar:na]
        at org.python.core.PyObject._doget(PyObject.java:1072) ~[jython-standalone-2.5.3.jar:na]
        at org.python.core.PyObject.__get__(PyObject.java:3674) ~[jython-standalone-2.5.3.jar:na]
        at org.python.core.PyObject.object___findattr__(PyObject.java:3706) ~[jython-standalone-2.5.3.jar:na]
        at org.python.core.PyObject.object___getattribute__(PyObject.java:3690) ~[jython-standalone-2.5.3.jar:na]
        at org.python.core.PyObject$object___getattribute___exposer.__call__(Unknown Source) ~[jython-standalone-2.5.3.jar:na]
        at org.python.core.Deriveds.__findattr_ex__(Deriveds.java:59) ~[jython-standalone-2.5.3.jar:na]
        at org.python.core.PyObjectDerived.__findattr_ex__(PyObjectDerived.java:983) ~[jython-standalone-2.5.3.jar:na]
        at org.python.core.PyObject.__getattr__(PyObject.java:923) ~[jython-standalone-2.5.3.jar:na]
        at org.python.pycode._pyx1.__call__$3(${NGRINDER_HOME}\script\kimdals\Test_TCP.py:79) ~ na:na]
        at org.python.pycode._pyx1.call_function(${NGRINDER_HOME}\script\kimdals\Test_TCP.py) ~[na:na]
        at org.python.core.PyTableCode.call(PyTableCode.java:165) ~[jython-standalone-2.5.3.jar:na]
        at org.python.core.PyBaseCode.call(PyBaseCode.java:301) ~[jython-standalone-2.5.3.jar:na]
        at org.python.core.PyBaseCode.call(PyBaseCode.java:194) ~[jython-standalone-2.5.3.jar:na]
        at org.python.core.PyFunction.__call__(PyFunction.java:387) ~[jython-standalone-2.5.3.jar:na]
        at org.python.core.PyMethod.instancemethod___call__(PyMethod.java:220) ~[jython-standalone-2.5.3.jar:na]
        at org.python.core.PyMethod.__call__(PyMethod.java:211) ~[jython-standalone-2.5.3.jar:na]
        at org.python.core.PyMethod.__call__(PyMethod.java:206) ~[jython-standalone-2.5.3.jar:na]
        at org.python.core.PyObject.invoke(PyObject.java:3555) ~[jython-standalone-2.5.3.jar:na]
        at org.python.core.PyInstance.instance___call__(PyInstance.java:351) ~[jython-standalone-2.5.3.jar:na]
        at org.python.core.PyInstance.__call__(PyInstance.java:342) ~[jython-standalone-2.5.3.jar:na]
        at org.python.core.PyObject.__call__(PyObject.java:371) ~[jython-standalone-2.5.3.jar:na]
        at net.grinder.scriptengine.jython.JythonScriptEngine$JythonWorkerRunnable.run(JythonScriptEngine.java:250) ~[grinder-core-3.9.1.jar:na]
        at net.grinder.engine.process.GrinderThread.run(GrinderThread.java:118) ~[grinder-core-3.9.1.jar:na]
        at java.lang.Thread.run(Thread.java:722) [na:1.7.0_07]
-------------------------------------------------------------------------------------------------------

아 말이 두서없이 길었는데,
요점은 결과 리포트에 에러를 체크할 수 있는 API가 무엇이 있는지 궁금합니다.
Reply | Threaded
Open this post in threaded view
|

Re: 스크립트 작성 문의

junoyoon
Administrator
forLastTest 는 현재 쓰레드가 바인딩된 테스트가 한개 이상 실행되었을 때만 동작합니다.

위 경우는 socket 을
Test(1, "wow").record(socket)

라고 하셔서 instrument 된 socket 으로 작업을 하시거나 아니면

def doTest(socket)
   socket.. # 여기에서 소켓 호출을 하시고..

Test(1, "wow").record(doTest)


class TestRunner :

  def __call__(self) :
       try :
          doTest(Socket(host, port))
       except :
          # 여기서 lastTest.success 를 체크하세요.


이렇게 하시면 될 겁니다.
Reply | Threaded
Open this post in threaded view
|

Re: 스크립트 작성 문의

kim hyoseok
아~정말 감사합니다!
늦은 시간에 댓글도 달아주시고!
도움이 많이 되고 있습니다~

아래와 같은 방식을 사용하여 에러처리가 되는 것을 확인했습니다