web-dev-qa-db-ja.com

Robot Frameworkにテストスイートを特定の順序で実行させる方法はありますか?

ローカルディレクトリにfooとbarの2つのテストスイートがあり、foo、barの順にテストスイートを実行するとします。

pybot -s foo -s bar .を実行しようとしましたが、bar、fooの順に実行します(つまり、アルファベット順)。

Pybotにロボットフレームワークスイートを実行させて、定義した順序で実行させる方法はありますか?

12
Calyth

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 のこのセクションに詳細があります。

13
sjudǝʊ

RFディレクトリに複数のテストケースファイルがある場合は、次のように、テストケース名のプレフィックスとして番号を付けることで実行順序を指定できます。

01__my_suite.html->マイスイート02__another_suite.html->別のスイート

このようなプレフィックスは、2つのアンダースコアでスイートのベース名から分離されている場合、生成されたテストスイート名に含まれません:

詳細はこちら。

http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#execution-order

12
binithb

タグ付け を使用できます。

テストにfooおよびbarのタグを付けて、各テストを個別に実行できるようにします:

pybot -i foo tests

または

pybot -i bar tests

順序を決定します

pybot -i bar tests || pybot -i foo tests

またはスクリプトで。

欠点は、各テストのセットアップを実行する必要があることです。

4
OGrandeDiEnne

このようなものは役に立ちますか?

pybot tests/test1.txt tests/test2.txt

したがって、逆に:

pybot tests/test2.txt tests/test1.txt
1
Racktash

リスナーを使用して成功しました:

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を使用して事前に変更できる可能性があります。

0
ninjaniko