Robot Framework Interactive Consoleで開発作業効率UP!

2023.10.03

町田 澄空 町田 澄空

目次

ご挨拶

ネットワークテクノロジー課の町田です。
新卒2年目のネットワークエンジニアで、ネットワークも開発も全て未経験からこの業界に入りました。ネットワーク検証の自動化に主に携わっており、PythonやRobot Framework(以下RF)を日頃触っています。

本記事では、自動化ツールであるRFのInteractive Consoleについて紹介します。
効率的に開発を進めていくよう日々つとめている中、IPythonの動きに近い形でRFのコードを実行できるInteractive Consoleの便利さに気づき、ぜひ他の人にも知っていただきたいと思い、紹介することになりました。

本記事では、RF Interactive Console の魅力とその使い方について紹介していきます。Robot Frameworkとは何かについて知りたい方は、以下の記事をご覧ください。

[NW自動化でのRobotFrameworkの適用領域]

 Robot Framework Interactive Console とは

Interactive (対話的な) Console (コンソール)ということで、.robotファイルに記述されたTest Case単体の実行や、Settingsセクションのloadなどを実行したりするための 対話型のコンソール環境 です。

このコンソール環境を起き上がらせることで、その環境の中でBuiltInや自作のKeywordを実行して動作確認したり、変数の中身を確認したりなど柔軟な対応が可能となります。

ご挨拶の中でも書いていますが、 python ipython コマンドで、Interpreterを起動して操作した時とほぼ同様な動きをするのが、RFのInteractive Consoleになります。なので、pythonをお使いの方は同じ感覚で使うだけなので、すぐに慣れるかと思います。

このInteractive Consoleは、RFのためのVSCodeの拡張機能である Robot Framework Language Server がサポートしている機能です。そのため、Interactive Consoleを使いたい場合は、VSCodeと対象の拡張機能をインストールして下さい。詳しくは、こちらをどうぞ。

それでは早速、実際にどんなことができるか見てみましょう!

Interactive Console の簡単な使用例

以下の手順を実行するrobotファイルを例に、Interactive Consoleでできることを紹介していきます。

  • ネットワーク装置に接続する
  • 接続したネットワーク装置からshow xxxのログを取得する
  • 切断する

Console起動

まずは、Interactive Console を立ち上げるところからです。

01

VSCodeを開き、赤枠の Load in Interactive Console をクリックすると、右側にConsole環境が表示されます。

02

Loadしたので、Console環境内の下に以下のSettingsセクションの内容が読み込まれています。

この中にConsole terminalがあり、実行したいKeywordを入力して動作確認する場所となっています。

03

 Run in Interactive Console をクリックしても、同様にConsole環境が表示されます。

04

05

さらに、他の立ち上げ方として、 Ctrl+Shift+P (Command+Shift+P)またはF1でコマンドパレットを開いて、
 Robot Framework: Start Interactive Console を選択するという方法もあります。

20

21

変数のDebug

では、環境が立ち上がったので、色々いじっていきます。

test.robotの中身は以下の通りです。

*** Settings ***
Library    NetmikoWrapper

*** Test Cases ***
Log Something

    Log    Hello, world!

    Log To Console    message

Connect to a NW device

    Connect
    ...    device_type=cisco_ios
    ...    host=172.17.12.51
    ...    alias=csr
    ...    username=cisco
    ...    password=cisco
    ...    secret=cisco

Get log of show running-config

    Enable    host=csr

    ${output} =    Send Command    command_string=show running-config    host=csr

    Log    ${output}

Disconnect the device

  Disconnect All

まずは対象装置に対して接続するKeywordを実行してみます。

06

成功したようなので、次はshow running-configを実行します。

07

実行は終わって特にErrorは表示されていませんが、 Send Command のKeywordで取得した結果が表示されないですね。

 Log    ${output} で表示するようにしているのですが、今ここはConsole環境なので、実は
 Log To Console にしないと結果が出てきません。

なので、結果をconsole terminalで確認してみます。

Keywordを入力している最中に、以下のようにKeywordの候補をリストで出してくれたり、TABキーで補完が効いたりするので便利です。

08

 Log To Console    ${output を実行するとshow running-configの結果が見れるようになります。

09

このようにConsole環境の中で、確認したいときに変数の中を確認することができます。
さらに、BuiltInや自作のKeywordを使って変数の操作も可能なので、「こういう形でログが表示されるようにしたい」となったときその場ですぐに試すこともできます。

なぜそもそもInteractive Consoleを使うのか

なぜInteractive Consoleを使うのかというと、開発効率が劇的に改善するからです。

これを使わないと何が起こるのか、事例を2つ紹介します。

事例① 毎回、動作確認のためにrobotファイルを実行しなければならない

これまで見ていたrobotファイルは、すでに出来上がっているものです。
Test Casesは全部で4つありますが、Interactive Consoleを使わないと以下の開発の仕方になります。

Test Casesを一通り書いた後で、動作確認する

  • もちろん、1発で成功はしないので、FAILしたところを調べて修正し、再度robotを実行する。
  •  変数の中をLogに出していなかったりすると、「どこで、何が、どうFAILしたのか」がわからなくなる。

10

上記の開発の進め方になるので時間もかかるし、毎回全てを実行するのはとても非効率です。

Interactive Consoleを使用すると、ボタン 1 クリックでテストケース単位の確認はもちろん、記述しているコード1行1行の実行が可能です。

変数の中身も確認することができるので、便利です。

事例② デバッグ用のタグが散乱する

RFではTest Caseごとにタグをつけることができます。
robotコマンドの引数として実行したいタグを指定すると、そのタグが紐づけられているTest Caseが実行されます。

例 : 

11

12

これを使用することで、デバッグしたいTest Caseだけを実行することができます。しかし、デバッグ対象の全てのTest Caseにタグを記述する必要があるうえ、タグの削除忘れによってタグが散乱してしまい、開発のノイズとなる可能性があります。

この場合もInteractive Consoleを使用すれば、タグを付けずとも任意のTest Caseが実行できるため、上記のような悩みは発生しません。

というように、紹介した事例で開発を進めるよりも、効率(スピード)が上がります。
そのため、Interactive Consoleを使うんですね。

おまけ: robotframework-debuglibrary

実は、Interactive Consoleと同様の動きをするライブラリ「robotframework-debuglibrary」があるので、紹介します。

このライブラリではDebugというキーワードが提供されています。
これを使用するとrobotファイルの任意の場所でテストケースの実行を中断させ、Interactive Shellというものを起動することができます。

実際に見てみましょう。

DebugLibraryの導入

  pip install robotframework-debuglibrary でインストールが必要です。

  • Settignsセクションに、 Library    DebugLibrar を追加
  • ここからDebugをしたいというところに、 Debug  Keywordを記述

13

Interactive Shellに入る

robotコマンドでファイルを実行すると、 Debug を挿入したところで、Interactive Shellに入ります。
そのため、処理が一旦止まっている状態です。

14

Shellの中で操作する

この中で行う操作としては、Interactive Consoleと変わりないです。

15

上記のように動作確認したいKeywordを実行することもできますし、Debugともあるように、
 ${output} の中身を自動的に表示してくれています。(Interactive Consoleでも出力を自動的に返してくれます。)

このまま show version のログ結果も出力させたいなとなれば、
Interactive Shell内で動作確認をして、

16

robotファイルに追加するという流れもできます。

ちなみに、Interactive ConsoleとInteractive Shellは、同時に環境を起こすことはできるので、robotファイルに追加したら、 Run in Interactive Console をクリックして、追加したものを実行することもできます。

17

Shellに help を入力することで、使用可能なコマンドの一覧が確認できます.

18

Interactive Shellを終了するには exit コマンドを実行します。終了後はDebugキーワードを起点として、残りのキーワードとTest Caseが実行されていきます。

19

以上が、robotframework-debuglibraryの Interactive Shell の紹介でした。
基本的にできることは、Interactive Consoleと変わらないですが、違いとしては、

  • Interactive Shellは、Robot Framework Language Serverの機能ではないので、VSCode以外でも使える。
  • Interactive Shellの中では、1つのTest Caseを実行できない。Keyword単位で実行することになる。 

以上が挙げられるかと思います。

といってもそこまで変わらないので、自分の好きな方を使用するがいいと思います。

まとめ

今回は Robot Frameworkを使った開発に使用すると便利な

  • Interactive Console
  • Interactive Shell

という2つの機能を紹介しました。

自分が書いたプログラムを「対話式」で動かしながら開発を進めていくことは、開発効率を高めていくことにつながるかと思いますので、本記事が少しでもお役に立てれば嬉しいです。

Robot Frameworkに関する情報を発信していきますので、今後もよろしくお願いします。

この記事をシェア

町田 澄空 町田 澄空

2022年4月 CTCに派遣社員としてネットワークテクノロジー課に配属。主に、RobotFrameworkを使用したNW検証の自動化業務に従事。日々効率的な開発を探索している2年目駆け出しエンジニアである。