2

f5 で切断された接続に対して成功した Spock テストを作成した人はいますか?

私の f5 ルールでは、状況が満たされた場合 (たとえば、不適切な Cookie の場合)、接続をドロップします。

if { [HTTP::cookie exists "badCookie"] } {
  if { not ([HTTP::cookie "badCookie"] matches_regex {^([A-Z0-9_\s]+)$}) } {
    drop
  }
}

ブラウザでこれを手動でテストすると、ブラウザによっては時間制限が発生しますが、最終的にはタイムアウトになります。しかし、f5 ルールごとに手動でテストするのではなく、自分のテストを Spock の機能テスト ライブラリに組み込みたいと考えています。

Spock、 @Timeout() または @Timeout(value=5) を使用すると、次のようにタイムアウトが際限なく増加します。

[spock.lang.Timeout] Method 'abc' has not yet returned - interrupting. Next try in 0.50 seconds.
[spock.lang.Timeout] Method 'abc' has not yet returned - interrupting. Next try in 1.00 seconds.
[spock.lang.Timeout] Method 'abc' has not yet returned - interrupting. Next try in 2.00 seconds.
[spock.lang.Timeout] Method 'abc' has not yet returned - interrupting. Next try in 4.00 seconds.
[spock.lang.Timeout] Method 'abc' has not yet returned - interrupting. Next try in 8.00 seconds.
[spock.lang.Timeout] Method 'abc' has not yet returned - interrupting. Next try in 16.00 seconds.

http://fbflex.wordpress.com/2010/08/25/geb-and-grails-tips-tricks-and-gotchas/またはhttps://github.com/hexacta/weet/blobでの waitFor メソッド アプローチの使用/master/weet/src/groovy/com/hexacta/weet/pages/AjaxPage.groovyも 5 秒指定を使用してメソッドを閉じません。

これらの各アプローチ (タイムアウト クラス、タイムアウト メソッド、および waitFor) を使用したコードの例は、https: //gist.github.com/ledlogic/b152370b95e971b3992f にあります。

私の質問は、Spock テストを正常に実行して、f5 ルールが接続を切断していることを確認する方法を見つけた人はいますか?

4

1 に答える 1

0

私にとって、@ThreadInterrupt注釈と一緒に@Timeout注釈を使用するとうまくいきました:

@ThreadInterrupt
@Timeout(value = 100, unit = MILLISECONDS)
def 'timeout test'() {
    expect:
    while(1) {true}
}

ここに完全なドキュメントがあります: http://docs.groovy-lang.org/docs/next/html/documentation/#GroovyConsole-Interrupt

ただし、これはスクリプトを中断するのに十分ではない場合があります。ボタンをクリックすると実行スレッドが中断されますが、コードが中断フラグを処理しない場合、スクリプトは効果的に停止できなくても実行され続ける可能性があります。これを回避するには、[スクリプト] > [中断を許可] メニュー項目にフラグが設定されていることを確認する必要があります。これにより、AST 変換がスクリプトに自動的に適用され、割り込みフラグ (@ThreadInterrupt) のチェックが行われます。こうすることで、明示的に割り込みを処理しなくても、余分な実行時間を犠牲にしてスクリプトを中断できることが保証されます。

于 2019-10-18T09:21:31.913 に答える