マルチモジュールMavenビルドで最も遅いJUnitテストを一覧表示するにはどうすればよいですか?
これは、すべてのモジュールにまたがる必要があります。
ハドソン/ジェンキンスのソリューションでも可能です。
免責事項:bashソリューションは機能し、1行に収まりますが、本当にお詫び申し上げます:-)。せっかちな場合は、一番下に移動します。
まずTEST-*.xml
、によって生成されたすべてのファイルを見つける必要がありますmaven-surefire-plugin
。プロジェクトのルートディレクトリでこれを実行してmvn test
、すべてのサブモジュールのテスト結果を検出します。
$ find . -iname "TEST-*.xml"
幸い、これらのファイルの形式は非常に単純で単純grep
であり、必要なものがあります。
$ grep -h "<testcase" `find . -iname "TEST-*.xml"`
ここsed
で、呼び出し時間、テストケースクラス、およびメソッド名を抽出するための魔法があります。
$ sed 's/<testcase time="\(.*\)" classname="\(.*\)" name="\(.*\)".*/\1\t\2.\3/'
結果を並べ替えて、最も長く実行されているテストを表示するだけで、これ以上何も残りません。
$ sort -rn | head
$ grep -h "<testcase" `find . -iname "TEST-*.xml"` | sed 's/<testcase time="\(.*\)" classname="\(.*\)" name="\(.*\)".*/\1\t\2.\3/' | sort -rn | head
驚くべきことに、結果は妥当に見えます(Activiti 5.1マルチモジュールコードベースを例として取り上げます)。
3.029 org.activiti.examples.variables.jpa.JPAVariableTest.testStoreJPAEntityAsVariable
2.904 org.activiti.engine.test.forms.FormsTest.testTaskFormPropertyDefaultsAndFormRendering
1.594 org.activiti.engine.test.api.mgmt.ManagementServiceTest.testGetJobExceptionStacktrace
1.114 org.activiti.examples.variables.jpa.JPAVariableTest.testUpdateJPAEntityValues
1.006 org.activiti.engine.test.db.EngineRebootProcessDefinitionCacheTest.testStartProcessInstanceByIdAfterReboot
0 org.activiti.engine.test.pvm.PvmVariablesTest.testVariables
0 org.activiti.engine.test.pvm.PvmScopeWaitStateTest.testWaitStateScope
0 org.activiti.engine.test.pvm.PvmScopesAndConcurrencyTest.testConcurrentPathsGoingIntoScope
0 org.activiti.engine.test.pvm.PvmEventTest.testNestedActivitiesEventsOnTransitionEvents
0 org.activiti.engine.test.pvm.PvmEventTest.testEmbeddedSubProcessEvents