Ant Junitのテストは、IDE経由よりもAnt経由ではるかに遅く実行されています。


9

junitテストをant経由で実行していて、IDE経由よりもかなり遅く実行されています。私の蟻の呼び出しは次のとおりです。

<junit fork="yes" forkmode="once" printsummary="off"> 
     <classpath refid="test.classpath"/> 
     <formatter type="brief" usefile="false"/> 
     <batchtest todir="${test.results.dir}/xml"> 
      <formatter type="xml"/> 
      <fileset dir="src" includes="**/*Test.java" /> 
     </batchtest> 
    </junit> 

Antを介して実行するとき、私のIDEで瞬時に近くで実行同じテスト(0.067s)は4.632sをとります。これまで、私はjunit forkパラメータを使ってこのようなテストの問題をスピードアップすることができましたが、この場合は役に立たないようです。これらのテストを高速化するために、どのような特性やパラメータを検討できますか?

さらに詳しい情報:

のJUnitタスクを出力することを、私は時間対IDEから報告された時間を使用しています。これは、アリの終了時に報告された合計時間ではありません。

奇妙なことに、この問題は解決しました。この問題の原因は何でしたか?システムはローカルディスク上で動作するため、問題はありません。

+1

フォークはありません=はい新しいテストを実行してパフォーマンスを低下させますか?あなたがそれを使用しないときの結果は何ですか? 23 9月. 082008-09-23 19:13:09

+1

forkmode = "once"私はすべてのjunitテストを1つのスレッドで実行すると思っていました。 23 9月. 082008-09-23 19:20:11

  0

Antの報告された実行時間またはJUnitのを使用していますか?Antは実行中のテストよりもはるかに多くのテストを実行しています(実行するテスト、おそらくコンパイル)。 IDE経由でのテスト 23 9月. 082008-09-23 21:18:10

1

この情報では分かりにくいです。まず最初に行うことは、テスト結果を見て、すべての個別テストが均一に遅く実行されているかどうか、またはテストケースの特定のサブセットに絞ることができるかどうかを判断することです。

(私はどうなるzero'th事は私のAntタスクは、Eclipseと同じJVMを使用していることと、クラスパスの依存関係や輸入JARは本当に、本当に同一であることを確認している)

+1

JarsとJVMは同じですが、IDEで1.0秒未満で実行されるテストは、3.5から4.5秒の間にant経由で実行されるようです。 23 9月. 082008-09-23 19:21:22


1

たぶん、あなたはそれを見ていますEclipseはインクリメンタル・コンパイルを行い、Antは実行しないためです。この時間がテストターゲットでのみ無駄であることを確認できますか?

  0

私は 'junit'タスクも見ていますJUnitによって報告された実際の時間は低いです(例えば、 'テスト実行:21、失敗:0、エラー:0、時間経過:0.034秒')ので、時間がかかると思っています。 IntelliJですべてのテストを実行するのに約2秒かかりますが、Antの 'junit'タスクで実行するのに20秒ほどかかります。 30 12月. 122012-12-30 19:14:26


4

ここでは曖昧な推測です:<jvmarg>タグを入れ子にして-Xmxオプションを設定することによって、フォークされたVMで使用可能な最大ヒープサイズを増やしてみてください。

  0

Antで利用可能なヒープサイズを増やすそれ自体も同様です。 24 10月. 082008-10-24 19:21:33


0

記録上、問題が見つかりました。このプロジェクトではコード難読化ツールを使用していますが、その難読化ツールの文字列暗号化部分は「最大」に設定されています。これにより、文字列が存在するすべての操作が遅くなりました。

文字列の暗号化を高速モードにすると、問題が解決しました。


4

あなたのantscriptが結果をXMLファイルに出力しているのに対して、IDEはそれらをメモリに保存しているからです。ファイルを書き込むよりも、ファイルを書き込むよりも時間がかかります。そのディレクトリに結果を固執することを伝えます< batchtest>コールの一部だ

todir="${test.results.dir}/xml" 

。それを放置したままにしておくと、結果は「現在のディレクトリ」に固定されます。一見すると、私はそれを一気にオフにする何も見ませんでした。


0

これらの値にフォーク、forkmodeとスレッドを設定してみてください:

<junit fork="yes" forkmode="perTest" printsummary="off" threads="4"> 
    <classpath refid="test.classpath"/> 
    <formatter type="brief" usefile="false"/> 
    <batchtest todir="${test.results.dir}/xml"> 
     <formatter type="xml"/> 
     <fileset dir="src" includes="**/*Test.java" /> 
    </batchtest> 
</junit> 

はまた<junit>要素のforkmode="once"を追加し、<formatter>要素のusefile="false"を追加すると、テストは非常に実行可能、私にとってhttps://ant.apache.org/manual/Tasks/junit.html


0

を見ますもっと早く。必要のないフォーマッターも削除してください。