1

Cucumber を Serenity フレームワークと組み合わせて使用​​する BDD 自動化テストを作成しています。また、BDD テストには何らかのタイムアウト メカニズムが必要です。これにより、Cucumber シナリオまたは Step in Serenity に時間がかかりすぎた場合にタイムアウトになり、テストが失敗します。

以下のリンクでいくつかの情報を見つけました: https://groups.google.com/forum/#!topic/cukes/QaPvVMnqDvE

そのため、Cucumber の場合、ステップ定義の次の設定が機能するはずです。

@When(value="^I request web authentication$", timeout=1000) 
public myfunc(){
}

Serenity については、タイムアウトの設定が見つかりませんでしたが、まだ見つかっていないだけだと思います。

ただし、Cucumber の timeout=xxx を試してみたところ、うまくいかないようです。テストで myfunc() が長時間ハングしても、テストは停止せず、ハングするだけです。

この timeout=xxx が機能するための追加の設定があるかどうかは誰にもわかりますか?

また、Serenity には独自の同様のタイムアウト メカニズムが使用されていますか?

最後に、Maven のクリーン インストールを使用してテストを実行しています。

どんなヒントでも大歓迎です。

4

3 に答える 3

1

Maven インストールのみを直接使用してテストを実行する代わりに、Junit または TestNG を一緒に使用してテストを実行します。Junit を使用する場合、タイムアウトは次のように行うことができます。

@Test(timeout = 20)
public void try() {
    while(true);
}

TestNG もほぼ同じように機能します。

@Test(timeOut = 10000)
public void try() {
    while(true);
}

Cucumber には、JUnit と TestNG の両方と互換性のある依存関係があります。


試した Cucumber タイムアウトは、次の場合にのみ機能します。

  • 使用中のスレッドは、指定したタイムアウトで提示されたミリ秒数の間スリープ状態になります。これを克服するために、別のテスト用に別のスレッドを作成して、(ハングするテスト用の) スレッドがスリープ状態になるようにすることができます。しかし、これは本当にあなたが探しているものではないかもしれません。
  • スレッドは中断できなくなり、指定されたタイムアウトの 2 倍後に停止します。

@aslakhellesoy @hereで言及されているように

タイムアウトは、スレッドが中断できない場合にスレッドを停止します。…</p>

スレッドが interrupt() に応答しない場合、指定されたタイムアウトの 2 倍の時間後に stop() を試みます。

これは非推奨の Thread.stop() メソッドを使用しますが、Cucumber のようなテスト ツールの場合は問題ありません。

参照番号 343。

したがって、タイムアウト時間を半分に短縮する必要があります。

于 2016-02-16T14:55:51.717 に答える