私が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
に書き込む方法を知りたい。何か助けは?
引数を指定してライブラリをインポートするには、 ライブラリ名の後に追加 だけです。
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
これは ユーザーガイドのこのセクション で説明されています。
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)