1

大規模な公開システムに対して何百ものテストを実行しており、TestNG を使用してテストを並列化したいと考えています。ただし、これを行う簡単な方法が見つかりません。各テスト ケースは、このパブリッシャーのインスタンスをインスタンス化し、いくつかのメッセージを送信し、それらのメッセージがパブリッシュされるのを待ってから、パブリッシュ キューの内容をダンプし、予想される結果と比較します。非常に多くのテストでこれを行う (スレッドを使用して並列化しても、完了するまでに非常に長い時間がかかります (1 日以上))。

この種のシステムをテストする際には、システムを一度起動し、すべてのテストを実行してメッセージを送信し、発行が完了するのを待ち、すべての出力をダンプし、出力をテストと照合して検証するのが最善であることがわかりました。たとえば、次の代わりに:

@Test
public void testRule1() {
  Publisher pub = new Publisher();
  pub.sendRule(new Rule("test1-a"));
  sleep(10); // wait 10 seconds
  pub.dumpRules();
  verifyRule("test1-a");
}

次のようなことをしたかったのです。

@Test
public void testRule1(bool sendMode) {
  if(sendMode) {
    this.pub.sendRule(new Rule("test1-a"));
  }
  else {
    verifyRule("test1-a");
  }
}

dataProvider を使用してすべてのテストを実行してからsendMode = true実行dumpAllRules()し、続いて ですべてのテストを再度実行しsendMode = falseます。sendMode = true問題は、 TestNGが同じメソッドを 2 回呼び出すことsendMode = falseです。TestNGでこれを達成する方法はありますか?

ありがとう!

4

1 に答える 1

1
@Test
@Parameters({ "sendMode" })
public void testRule1(String sendMode){
  //blah blah
}

あなたはこのようにすることができます:)

<suite name="xyz">
<parameter name="sendMode" value="normal" />
<test name="sendTest">
    <classes>
        <class name="com.projectPath.testclass" />
    </classes>
</test>

于 2013-10-16T12:36:03.030 に答える