1

QTPs リカバリ シナリオ マネージャを使用して、再生同期タイムアウトを 0 に設定するとします。ハンドラは、「次のステートメントで続行」を返します。

次の再生ステートメントが、失敗する前に次の存在しない/一致しないステップを待つ時間を無駄にしないようにするために、これを行います。

10 個のコントロールが欠落している場合、それらの (連続した) 再生ステップが失敗する前に 10 のタイムアウト待機を生成するとします。再生タイムアウトが 30 秒の場合、10x30 秒 = 5 分の実行時間が失われますが、1 回 30 秒待機するだけで十分です (アプリはもう変更されないため、既に完全なタイムアウト期間を待っていました)。

100 個のテスト ケース (= アクションの反復) がある場合、これが 100 回発生する可能性があり、テスト実行時間ウィンドウの 500 分が無駄になります。

そのため、最初の失敗した再生ステップの後/時にタイムアウトを 0 に設定する回復シナリオ関数のアイデアを思いつきました。これにより、正しく失敗したステップをスキップしながら速度が加速されますが、次の一致する GUI コンテキスト (PASSED ステップを作成する) を識別する精度/信頼性が損なわれることはありません。

もちろん、次に渡された再生ステップで、元のタイムアウト値を復元したいと思います。どうすればそれができますか?これは私の質問です。

PASSED ステップに対して呼び出される回復シナリオ関数を定義することはできません。

現在、Reporter.ReportEvent にメソッド関数を設定し、そこにある PASSED ログ エントリを「スニッフィング」することを考えています。そのメソッド関数を、タイムアウトを 0 に設定するシナリオ リカバリ関数にインストールします。次に、「スニファー」関数が、次の再生ステップのいずれかで PASSED ステータスの ReportEvent 呼び出しを感知すると、すべてをリセットします (つまり、元のタイムアウト、およびメソッド機能をアンインストールします)。(ただし、.Click メソッドと .Set メソッドは ReportEvent を呼び出して結果のステータスを書き込むことはないと 99% 確信しています。したがって、このオプションはおそらく機能しない可能性があります。)

より良いアイデア?これは本当に私を悩ませます。

4

2 に答える 2

2

テストが正しく設計されていないように思えます。オブジェクトが見つからない場合、なぜ続行するのですか?

可能な (非回復シナリオ) 解決策の 1 つは、必要なメソッドを実行する前にRegisterUserFunc、使用しているメソッドをオーバーライドすることです。obj.Exist(0)

Function MyClick(obj)
    If obj.Exist(1) Then
        obj.Click        
    Else
        Reporter.ReportEvent micFail, "Click failed, no object", "Object does not exist"
    End If
End Function

RegisterUserFunc "Link", "Click", "MyClick"
RegisterUserFunc "WebButton", "Click", "MyClick"
''# etc
于 2010-11-10T13:25:18.753 に答える
0

いくつかのコントロールが欠落している可能性があり、言及した 10 秒後 (最初のタイムアウトが発生したとき) に何も表示されないことがわかっている場合は、exists メソッドをタイムアウト パラメーターと共に使用できます。このようなもの:

timeout = 10

For Each control in controls
  If control.exists(timeout) Then
    do something with the control
  Else
    timeout = 0
  End If
Next

これで、最初のタイムアウトのみが 10 秒になります。コントロールのコレクションの後続のタイムアウトごとに、タイムアウトが 0 に設定され、時間を節約できます。

于 2013-02-20T15:04:27.703 に答える