Groovy Maven 프로잭트에서 jUnit test 실행순서

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

Groovy Maven 프로잭트에서 jUnit test 실행순서

riojung
안녕하세요.

전 캐나다 캘거리에 Replicon 이라는 회사에서 Software Engineer로 일하고 있는 정우만입니다.

Performance/Load testing tool을 찾다가 우연이 nGrinder를 발견하고, 공식적으로 적용하려고 하고 있습니다.
그러던 적용하는데 몇가지 문제점이 있어서 이렇게 질문을 드리려합니다.

Groovy Maven Project로 스크립트를 작성해서 로컬로 테스트 끝내고 script를 Commit한 다음, Vuser를 증가시키면서 테스트를 해보았는데 생각보다 많은 에러가 발생해서 테스트 자체가 fail로 나오더라요.
그래서 Log file을 자세히 드려다보니깐 실행되는 테스트 순서가 thread마다 아니면 process마다 다 다르더군요.
전 Test1() Test2() Test3()를 순차적으로 로컬로 실행되는걸 보고 올려서 막상 실행보니 그렇지 않더군요.

테스트 각자가 전혀 연관이 없으면 괜찮은데, 저희 Service들은 여러가지 json payload을 request body에 넣어줘야해서 테스트가 실행되는 순서가 중요합니다.

JUnit 4.11에서는 Test 이름으로 정렬가능하던데 JUnit 4.8에서는 그런식으로 할 수 없더군요.
혹시 항상 정해진 순서대로 테스트를 실행시키려면 어떻게 해야하는지 알 수 있을까요?

그리고 agent를 vm에서 돌리고 있는데
테스트 끝날때쯤에 다음과 같은 에러로 인해서 에러율이 급격히 상승하더군요.

2014-10-03 19:16:20,597 ERROR Error: net.grinder.engine.process.ShutdownException: Thread has been shut down
2014-10-03 19:16:20,597 ERROR
java.lang.AssertionError:
        at PutTimeEntryV2.PutWorkAndBreakTimeEntries(PutTimeEntryV2.groovy:178) ~[na:na]
        at net.grinder.scriptengine.groovy.junit.GrinderRunner.run(GrinderRunner.java:170) ~[ngrinder-groovy-3.3.jar:na]
        at net.grinder.scriptengine.groovy.GroovyScriptEngine$GroovyWorkerRunnable.run(GroovyScriptEngine.java:148) ~[ngrinder-groovy-3.3.jar:na]
        at net.grinder.engine.process.GrinderThread.run(GrinderThread.java:118) ~[grinder-core-3.9.1.jar:na]

혹시 왜 이런 현상이 일어나는지 알고계시면 조언 좀 부탁드립니다.

감사합니다.

Note: 저는 C# Developer라서 Java에 관한 지식이 좀 부족합니다..ㅠㅠ
Reply | Threaded
Open this post in threaded view
|

Re: Groovy Maven 프로잭트에서 jUnit test 실행순서

junoyoon
Administrator

혹시 항상 정해진 순서대로 테스트를 실행시키려면 어떻게 해야하는지 알 수 있을까요?

==> 원래 JUnit은 테스트간의 실행 순서를 보장하지 않습니다. 그러나 일반적으로는 JavaByte Code에 정의된 순서대로 실행됩니다. 말씀 하신 내용은 아마도 착각에 의해 그렇게 판단하신게 아닐까 싶습니다. 여러개의 THread 가 동시에 실행하고 있다면, 각각의 쓰레드는 각각 완전히 별도로 테스트 메소드들을 수행하기 때문에, 로그만 봐서는 마치 태스트 순서가 맘대로 지정되는 듯 보이는 혼란에 빠지기 쉽습니다.
대신 Thread 를 1개로 지정하고 실행해 보세요.

테스트 끝날때쯤에 다음과 같은 에러로 인해서 에러율이 급격히 상승하더군요.
==> 문제의 이유를 알기 힘들군요. 스크립트를 보여주셨으면 합니다.