ローカルディレクトリにfooとbarの2つのテストスイートがあり、foo、barの順にテストスイートを実行するとします。
pybot -s foo -s bar .
を実行しようとしましたが、bar、fooの順に実行します(つまり、アルファベット順)。
Pybotにロボットフレームワークスイートを実行させて、定義した順序で実行させる方法はありますか?
Robot Frameworkは、実行の順序を指定するために使用できる引数ファイルを使用できます( docs ):
これは古いドキュメントからのものです(もうオンラインではありません):
引数ファイルのもう1つの重要な使用法は、入力ファイルまたはディレクトリを特定の順序で指定することです。これは、アルファベット順のデフォルトの実行順序が適切でない場合に非常に役立ちます。
基本的に、起動スクリプトに似たものを作成します。
--name My Example Tests
tests/some_tests.html
tests/second.html
tests/more/tests.html
tests/more/another.html
tests/even_more_tests.html
引数ファイルから別の引数ファイルを呼び出すことができるという優れた機能があります以前に設定したパラメータを上書きできます。実行は再帰的であるため、必要な数の引数ファイルをネストできます
別のオプションは、起動スクリプトを使用することです。テストを実行しているオペレーティングシステムなど、他の側面に対処する必要があります。複数のプラットフォームでスクリプトを起動するためにpythonを使用することもできます。 docs のこのセクションに詳細があります。
RFディレクトリに複数のテストケースファイルがある場合は、次のように、テストケース名のプレフィックスとして番号を付けることで実行順序を指定できます。
01__my_suite.html->マイスイート02__another_suite.html->別のスイート
このようなプレフィックスは、2つのアンダースコアでスイートのベース名から分離されている場合、生成されたテストスイート名に含まれません:
詳細はこちら。
http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#execution-order
タグ付け を使用できます。
テストにfooおよびbarのタグを付けて、各テストを個別に実行できるようにします:
pybot -i foo tests
または
pybot -i bar tests
順序を決定します
pybot -i bar tests || pybot -i foo tests
またはスクリプトで。
欠点は、各テストのセットアップを実行する必要があることです。
このようなものは役に立ちますか?
pybot tests/test1.txt tests/test2.txt
したがって、逆に:
pybot tests/test2.txt tests/test1.txt
リスナーを使用して成功しました:
Listener.py:
class Listener(object):
ROBOT_LISTENER_API_VERSION = 3
def __init__(self):
self.priorities = ['foo', 'bar']
def start_suite(self, data, suite):
#data.suites is a list of <TestSuite> instances
data.suites = self.rearrange(data.suites)
def rearrange(self, suites=[]):
#Do some sorting of suites based on self.priorities e.g. using bubblesort
n = len(suites)
if n > 1:
for i in range(0, n):
for j in range(0, n-i-1):
#Initialize the compared suites with lowest priority
priorityA = 0
priorityB = 0
#If suite[j] is prioritized, get the priority of it
if str(suites[j]) in self.priorities:
priorityA = len(self.priorities)-self.priorities.index(str(suites[j]))
#If suite[j+1] is prioritized, get the priority of it
if str(suites[j+1]) in self.priorities:
priorityB = len(self.priorities)-self.priorities.index(str(suites[j+1]))
#Compare and swap if suite[j] is of lower priority than suite[j+1]
if priorityA < priorityB:
suites[j], suites[j+1] = suites[j+1], suites[j]
return arr
Foo.robotとbar.robotが「tests」と呼ばれるトップレベルスイートに含まれていると仮定すると、次のように実行できます。
pybot --listener Listener.py tests/
これにより、チャイルドスイートがその場で再配置されます。代わりにprerunmodifierを使用して事前に変更できる可能性があります。