Robot Farmeworkはテストケースを実行するとき、内部ではPythonのコードを生成しているのでしょうか?

96 views
Skip to first unread message

小原増雄

unread,
Jul 5, 2016, 3:36:17 AM7/5/16
to Robot Framework 日本語ユーザグループ
テストデータを記述したファイル(xxx.robot)の内容を解釈してPythonのコード(xxx.py)を生成し、Pythonを起動(python xxx.py)していると考えると、理解しやすいのですが、実際はどうなんでしょう?

Yasushi Masuda

unread,
Jul 5, 2016, 9:23:06 AM7/5/16
to Robot Framework 日本語ユーザグループ
小原さん

答えは一部YESで、ほとんどNOです。

Robot Frameworkは、ざっくり言うと、テストデータを一行づつ逐次読んで実行するインタプリタのように動きます。

キーワードを実行するときは、それがユーザーキーワードなら、ユーザーキーワード定義の中のキーワードを順に実行していくだけです。

最初から使える標準ライブラリのキーワードや、テストライブラリのキーワードは、内部的にはPythonで書かれた関数になっていて、Robot Frameworkは、こうしたキーワードに到達すると関数を呼び出します。

「一部YES」の部分は、式の評価の部分です。

例えば、 Run Keyword If の最初の引数には、 $answer==42 のような文字列を書くことができ、テストの実行時には、Python で if answer==42: と書いたような挙動になりますよね。

実際には、Run Keyword If はこんな感じの関数で実装されているはずです:

def run_keyword_if(cond, name, **kwargs):
....

そして、このキーワードの第一引数に文字列「$answer=42」が渡されると、Robot Frameworkは、この文字列をそのまま関数un_keyword_if() に渡します。関数の中では、文字列を加工して、最終的に 「answer==42」という文字列に変換します。最後に、Pythonのeval() を使って、この式の部分だけをPythonコードとして実行して、その結果を関数内の処理に使います。(他にも細かいステップがありますが、割愛。)

なので、テストシナリオをPythonにコンパイルするわけではありません。

逆に、キーワードの根底の部分はただのPythonの関数やメソッドなので、Pythonで簡単に複雑なロジックやループ処理を含むキーワードを書けます。

小原増雄

unread,
Jul 5, 2016, 3:06:06 PM7/5/16
to Robot Framework 日本語ユーザグループ
>テストデータを一行づつ逐次読んで実行するインタプリタのように動きます。

どうやって動いているんだろう?と気になっていましたが、すっきりしました。
ありがとうございます。
Reply all
Reply to author
Forward
0 new messages