web-dev-qa-db-ja.com

pythonを使用してロボットフレームワークにユーザー定義クラスをインポートして使用する方法

私がPythonでクラスを持っていると仮定します:

class TestClass(object):
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2

    def print_args(self):
        print arg1, arg2

テストシナリオを実装するためにrobotframeworkを使用したいと思います。上記のクラスからインスタンスを作成し、そのメソッドを呼び出したいです。どうやってするか? libをインポートする方法を知っています。次のようになります。

Library   TestClass

このクラスからオブジェクトを初期化し、このオブジェクトを介してクラスメソッドを呼び出す方法がわかりません。 Pythonで実装したい場合は、次のようなコードを記述します。

import TestClass
test = TestClass('ARG1', 'ARG2')
test.print_args()

これをrobotframeworkに書き込む方法を知りたい。何か助けは?

12

引数を指定してライブラリをインポートするには、 ライブラリ名の後に追加 だけです。

Library  TestClass  ARG1  ARG2

したがって、「インポート」とインスタンス化は1つのショットで行われます。ここで注意が必要なのは、インスタンスのスコープを理解することです。これについては、ユーザーガイドのセクション「 テストライブラリのスコープ 」で詳しく説明しています。

すべてのテストケースに対して新しいインスタンスが作成されます。 [...]これがデフォルトです。

異なる引数で同じライブラリを何度もインポートする場合、クラスのインスタンスが異なる場合は、インポート時にそれらに名前を付ける必要があります。

Library  TestClass  ARG1  ARG2  WITH NAME  First_lib
Library  TestClass  ARG3  ARG4  WITH NAME  Second_lib

そして、テストでは、キーワードにプレフィックスを付ける必要があります。

*** Test Cases ***
MyTest
    First_lib.mykeyword  foo  bar
    Second_lib.mykeyword  john  doe

これは ユーザーガイドのこのセクション で説明されています。

16

pythonクラスをオンデマンドでインスタンス化できます(つまり、ライブラリテクニックを介してハードコーディングされた引数だけではありません)。

ヘルパーメソッドを使用してクラスを作成しました。 Robotスクリプトでクラスコンストラクターを直接呼び出すことができませんでしたが、Pythonで関数を呼び出すことができるため、関数ベースのインターフェイスを提供することでクラスまたは名前付きタプルを作成できます。

File: resource_MakeMyClass.robot

*** Settings ***
Library             myClass

*** Keywords ***
_MakeMyClass
    [Arguments]    ${arg1}    ${arg2}
    ${result} =    makeMyClass    ${arg1}    ${arg2}
    [Return]       ${result}

-----------------------------------------------------

File: myClass.py

class MyClass(object):
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2

def makeMyClass(arg1, arg2):
    return MyClass(arg1, arg2)
2
user3588820