負荷テストの目的でいくつかの統合テストを再利用したいと考えています。注釈によってパラメーター化されるルールを実装しました。
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Parallel {
int invocations() default 1;
int rampUpTime() default 0;
}
私のルール実装では、アノテーションが評価され、次のような evaluate メソッドを持つステートメントが設定されます。
@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);
}
}
そのため、evaluate
呼び出しは注釈で説明されているように でラップされ、Runnable()
スケジュールされます。問題は、私のルールでは、スケジューリングのみが行われ、ランナーは、テスト スイート全体をセットアップするのに必要な期間だけ実行されるすべての実行可能ファイルについては知りません (または気にしません)。だから私は呼び出しをevalute()
テストランナーに追加しようとしています。最初の試みはJUnitCore.run(...)
、もちろん再帰で終わるものを使用することでした。
次の試みは、すべての先物を収集し、それらが終了するのを待つことでした. これはテストごとにうまく機能しますが、テスト スイート全体を並行して実行したいと考えています。また、私のテスト レポートでは、テストが 1 回しか実行されていません。
それで、コンテキスト(すべてのテストからすべての先物を収集するオブジェクト)をパラメーターとして使用してパラメーター化されたスイートを使用すると考えましたが、このコンテキストオブジェクトをテストに昇格させる方法が見つかりませんでした。各テストには独自のパラメーター。
ルールを実行しているテスト ランナーに、ルールから複数の実行を追加する方法を求めています。