負荷テストのためにいくつかの統合テストを再利用したいと思います。だから@Ruleでテスト実行を並列化する
@Override
public void evaluate() throws Throwable {
ScheduledExecutorService exe = Executors.newScheduledThreadPool(invocations);
for (int i = 0; i < invocations; i++) {
ScheduledFuture<?> scheduledFuture = exe.schedule(new Runnable() {
@Override
public void run() {
try {
invocated++;
// Request test = Request.method(description.getTestClass(), description.getMethodName());
// new JUnitCore().run(test);
statement.evaluate();
} catch (Throwable e) {
e.printStackTrace();
}
}
}, i * rampUpTime, this.timeUnit);
futures.add(scheduledFuture);
}
}
:私のルールの実装では
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Parallel {
int invocations() default 1;
int rampUpTime() default 0;
}
注釈が評価され、文が設定されている、そのような評価方法があります。私は、アノテーションによってパラメータ化されたルールを実装しましたevaluate
コールはRunnable()
にラップされ、注釈で説明されているようにスケジュールされます。事は:私のルールでは、スケジューリングだけが行われます。ランナーは、テストスイート全体をセットアップするのに必要なすべてのrunablesについて知っていません。だから私はevalute()
への呼び出しをテストランナーに追加しようとしています。最初に、JUnitCore.run(...)
を使用して再帰的に終了しました。
次は、すべての先物を収集し、終了するのを待つことでした。これはテストごとにうまく動作しますが、テストスイート全体を並行して実行したいのです。また、私のテストレポートでは、テストは一度しか実行されません。
私はパラメータ(すべてのテストからすべての先物を収集するオブジェクト)を持つパラメータ付きスイートを使用すると考えましたが、このコンテキストオブジェクトをテストに昇格させる方法は見つけられませんでしたそれ自身のパラメータを持たなければならない。
私のルールから実行中のテストランナーに複数の実行を追加する方法を今質問しています。
http://www.clarkware.com/software/JUnitPerf.htmlの「LoadTest」が役立つかもしれません –
専用のストレスツールを使用しないのはなぜですか? jMeterやGatlingのようなもの? – Chiron
単に既存の統合テストを再利用しないのはなぜですか?私はJMeterでJUnitテストを実行することは可能だが、それは苦痛だ。統合テストはEclipse Plugin単体テストであり、Eclipseテストフレームワークを組み込んだアプリケーションを構築し、これをJMeterで使用することが可能です。 – CodeSeavers