jython2.7 standalone 사용시 레코드가 안되는거같습니다.

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

jython2.7 standalone 사용시 레코드가 안되는거같습니다.

spiros
안녕하세요

웹소켓 기반의 프로젝트를 성능테스트 하기위하여 파이썬 websocket_client-0.35.0
를 사용하기위해 jython 2.7.1b 버전을 lib 폴더에 올려서 쓰고있는데요.

웹소켓연결해서 send recv는 확인 하였는데
해당 트랜잭션들을 레코드 하기위해
Test(1, "websocket test").record(TestRunner.create_user)
와 같은 방식으로 사용하면 에러가 발생 하였습니다.
ngrinder에서 사용하는 grinder3.11에 jython2.7 사용에 문제가 있는지 궁급합니다.
jython2.7 jar를 라이브러리 폴더에서 제거하고 테스트해보니 레코딩 소스는 정상 동작 확인 하였습니다.

답변 부탁 드립니다.

에러 전문 입니다
ERROR Aborting process - Java exception initialising test script
net.grinder.scriptengine.jython.JythonScriptExecutionException: Java exception initialising test script
        Test(1, "NNI-LookupServer Test").record(TestRunner.create_user)
        File "${NGRINDER_HOME}/script/myhome/Myhome_WS.py", line 85, in <module>
java.lang.NoSuchFieldError: im_func
        at net.grinder.scriptengine.jython.instrumentation.dcr.AbstractJythonDCRInstrumenter.instrument(AbstractJythonDCRInstrumenter.java:127) ~[grinder-core-3.9.1.jar:na]
        at net.grinder.scriptengine.AbstractDCRInstrumenter.instrument(AbstractDCRInstrumenter.java:93) ~[grinder-core-3.9.1.jar:na]
        at net.grinder.scriptengine.CompositeInstrumenter.instrument(CompositeInstrumenter.java:103) ~[grinder-core-3.9.1.jar:na]
        at net.grinder.engine.process.MasterInstrumenter.instrument(MasterInstrumenter.java:85) ~[grinder-core-3.9.1.jar:na]
        at net.grinder.scriptengine.CompositeInstrumenter.instrument(CompositeInstrumenter.java:90) ~[grinder-core-3.9.1.jar:na]
        at net.grinder.engine.process.TestData.instrument(TestData.java:113) ~[grinder-core-3.9.1.jar:na]
        at net.grinder.script.Test.record(Test.java:113) ~[grinder-core-3.9.1.jar:na]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_79]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_79]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_79]
        at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_79]
        at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:186) ~[jython-standalone-2.7.1b3.jar:na]
        at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:204) ~[jython-standalone-2.7.1b3.jar:na]
        at org.python.core.PyObject.__call__(PyObject.java:497) ~[jython-standalone-2.7.1b3.jar:na]
        at org.python.core.PyObject.__call__(PyObject.java:501) ~[jython-standalone-2.7.1b3.jar:na]
        at org.python.core.PyMethod.__call__(PyMethod.java:141) ~[jython-standalone-2.7.1b3.jar:na]
        at org.python.pycode._pyx1.f$0(${NGRINDER_HOME}/script/myhome/Myhome_WS.py:85) ~[na:na]
        at org.python.pycode._pyx1.call_function(${NGRINDER_HOME}/script/myhome/Myhome_WS.py) ~[na:na]
        at org.python.core.PyTableCode.call(PyTableCode.java:167) ~[jython-standalone-2.7.1b3.jar:na]
        at org.python.core.PyCode.call(PyCode.java:18) ~[jython-standalone-2.7.1b3.jar:na]
        at org.python.core.Py.runCode(Py.java:1401) ~[jython-standalone-2.7.1b3.jar:na]
        at org.python.core.__builtin__.execfile_flags(__builtin__.java:535) ~[jython-standalone-2.7.1b3.jar:na]
        at org.python.util.PythonInterpreter.execfile(PythonInterpreter.java:286) ~[jython-standalone-2.7.1b3.jar:na]
        at net.grinder.scriptengine.jython.JythonScriptEngine.<init>(JythonScriptEngine.java:119) ~[grinder-core-3.9.1.jar:na]
        at net.grinder.scriptengine.jython.JythonScriptEngineService.createScriptEngine(JythonScriptEngineService.java:104) ~[ngrinder-runtime-3.3.jar:na]
        at net.grinder.engine.process.ScriptEngineContainer.getScriptEngine(ScriptEngineContainer.java:105) ~[grinder-core-3.9.1.jar:na]
        at net.grinder.engine.process.GrinderProcess.run(GrinderProcess.java:329) ~[ngrinder-runtime-3.3.jar:na]
        at net.grinder.engine.process.WorkerProcessEntryPoint.run(WorkerProcessEntryPoint.java:87) [grinder-core-3.9.1.jar:na]
        at net.grinder.engine.process.WorkerProcessEntryPoint.main(WorkerProcessEntryPoint.java:60) [grinder-core-3.9.1.jar:na]

Reply | Threaded
Open this post in threaded view
|

Re: jython2.7 standalone 사용시 레코드가 안되는거같습니다.

spiros
ngrinder 3.3이 grinder 3.9.1을 사용하는건 가요?

콘솔 화면에 The Grinder version 3.9.1 으로 표시되어서요
ngrinder에서 사용하는 grinder 버전을 변경 하는 방법이 있을까요?
http://comments.gmane.org/gmane.comp.java.grinder.user/9827
비슷한 이슈인거같은데요
java의 websocket.jar 로 하는 방법말곤 없을까요?
Reply | Threaded
Open this post in threaded view
|

Re: jython2.7 standalone 사용시 레코드가 안되는거같습니다.

Gisoo.Gwon
말씀해주신대로 ngrinder에서는 grinder 3.9.1을 사용하고, jython 2.5.3을 사용하고 있습니다.

작성해주신 new Test().record(..)는 Instrumentation이란 byte code 삽입을 수행하는 것인데요.
이 byte code 삽입으로 실제 스크립트 코드 전후로 데이터 수집 코드가 들어가게 됩니다.
문제는 Instrumenation이 jython 2.5 버전에 맞게 수행하고 추가적으로는 2.1과 2.2 버전까지만 호환을 보장하고 있습니다.

그래서 lib 폴더에 jython 2.7을 추가할 경우 이 Instrumentation이 실패하게 되는 것 같습니다.
ngrinder에서 grinder 버전을 올리는 것은 어려운 작업이라서, 말씀해주신대로 JDK 1.7하위에서 동작하는 java 라이브러리를 통해 스크립팅을 하는게 좋을 것 같습니다.