ロボットフレームワークにおける直接依存テストの自動失敗/非実行
-
26-12-2019 - |
質問
私がどのテストケースNO 24,38および99が相互依存しているかを実行するための100のテストケースを実行した場合それから、99番目のテストケースが実行されている間に、以前に実行されたテストケース(24番目または38テストケース)のステータスを見つけることができますか。 私の場合、99番目のテストケースは38日と24番目のテストケースの状況によって異なります。時間の。 可能であれば、いくつかの例で説明してください。事前にありがとう!
解決
ロボットが実行を開始すると、ある条件に基づいてテストをスキップする方法はありません。これがロボットの弱点の1つであると思いますが、デザイナー本当にスキップされたテストの概念が好きではないようです。また、1つのテストが別のテストに依存するための組み込みの方法はありません。 a この非常に機能の特徴要求は拒否されました。
しかし、ロボットは非常に拡張可能で、バージョン2.8.5で導入された機能により、別のテストが失敗した場合に失敗するキーワードを簡単に作成できます。この機能は Listenerとして機能するライブラリ。これにより、ライブラリは各テストのパス/フェイルステータスを追跡できます。その知識では、他のテストが失敗した場合はすぐに失敗したキーワードを作成できます。
基本的なアイデアは、各テストが終了したときにパス/フェールステータスをキャッシュする(特別な_end_test
メソッドを介して)。次に、この値を使用してすぐに失敗するかどうかを判断します。
これは、そのようなキーワードを使用する方法の例です。
*** Settings ***
| Library | /path/to/DependencyLibrary.py
*** Test Cases ***
| Example of a failing test
| | fail | this test has failed
| Example of a dependent test
| | [Setup] | Require test case | Example of a failing test
| | log | hello, world
.
これはライブラリ定義です:
from robot.libraries.BuiltIn import BuiltIn
class DependencyLibrary(object):
ROBOT_LISTENER_API_VERSION = 2
ROBOT_LIBRARY_SCOPE = "GLOBAL"
def __init__(self):
self.ROBOT_LIBRARY_LISTENER = self
self.test_status = {}
def require_test_case(self, name):
key = name.lower()
if (key not in self.test_status):
BuiltIn().fail("required test case can't be found: '%s'" % name)
if (self.test_status[key] != "PASS"):
BuiltIn().fail("required test case failed: '%s'" % name)
return True
def _end_test(self, name, attrs):
self.test_status[name.lower()] = attrs["status"]
. 他のヒント
この問題を解決するために私はこのようなものを使っています:
Run Keyword if '${PREV TEST STATUS}'=='PASSED' myKeyword
.
だからこれはまたあなたにも使えるでしょう。