ネットワークテクノロジー課の町田です。
新卒2年目のネットワークエンジニアで、ネットワークも開発も全て未経験からこの業界に入りました。ネットワーク検証の自動化に主に携わっており、PythonやRobot Framework(以下RF)を日頃触っています。
本記事では、自動化ツールであるRFのInteractive Consoleについて紹介します。
効率的に開発を進めていくよう日々つとめている中、IPythonの動きに近い形でRFのコードを実行できるInteractive Consoleの便利さに気づき、ぜひ他の人にも知っていただきたいと思い、紹介することになりました。
本記事では、RF Interactive Console の魅力とその使い方について紹介していきます。Robot Frameworkとは何かについて知りたい方は、以下の記事をご覧ください。
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と対象の拡張機能をインストールして下さい。詳しくは、こちらをどうぞ。
それでは早速、実際にどんなことができるか見てみましょう!
以下の手順を実行するrobotファイルを例に、Interactive Consoleでできることを紹介していきます。
まずは、Interactive Console を立ち上げるところからです。
VSCodeを開き、赤枠の Load in Interactive Console をクリックすると、右側にConsole環境が表示されます。
Loadしたので、Console環境内の下に以下のSettingsセクションの内容が読み込まれています。
この中にConsole terminalがあり、実行したいKeywordを入力して動作確認する場所となっています。
Run in Interactive Console をクリックしても、同様にConsole環境が表示されます。
さらに、他の立ち上げ方として、 Ctrl+Shift+P (Command+Shift+P)またはF1でコマンドパレットを開いて、
Robot Framework: Start Interactive Console を選択するという方法もあります。
では、環境が立ち上がったので、色々いじっていきます。
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を実行してみます。
成功したようなので、次はshow running-configを実行します。
実行は終わって特にErrorは表示されていませんが、 Send Command のKeywordで取得した結果が表示されないですね。
Log ${output} で表示するようにしているのですが、今ここはConsole環境なので、実は
Log To Console にしないと結果が出てきません。
なので、結果をconsole terminalで確認してみます。
Keywordを入力している最中に、以下のようにKeywordの候補をリストで出してくれたり、TABキーで補完が効いたりするので便利です。
Log To Console ${output を実行するとshow running-configの結果が見れるようになります。
このようにConsole環境の中で、確認したいときに変数の中を確認することができます。
さらに、BuiltInや自作のKeywordを使って変数の操作も可能なので、「こういう形でログが表示されるようにしたい」となったときその場ですぐに試すこともできます。
なぜInteractive Consoleを使うのかというと、開発効率が劇的に改善するからです。
これを使わないと何が起こるのか、事例を2つ紹介します。
これまで見ていたrobotファイルは、すでに出来上がっているものです。
Test Casesは全部で4つありますが、Interactive Consoleを使わないと以下の開発の仕方になります。
上記の開発の進め方になるので時間もかかるし、毎回全てを実行するのはとても非効率です。
Interactive Consoleを使用すると、ボタン 1 クリックでテストケース単位の確認はもちろん、記述しているコード1行1行の実行が可能です。
変数の中身も確認することができるので、便利です。
RFではTest Caseごとにタグをつけることができます。
robotコマンドの引数として実行したいタグを指定すると、そのタグが紐づけられているTest Caseが実行されます。
例 :
これを使用することで、デバッグしたいTest Caseだけを実行することができます。しかし、デバッグ対象の全てのTest Caseにタグを記述する必要があるうえ、タグの削除忘れによってタグが散乱してしまい、開発のノイズとなる可能性があります。
この場合もInteractive Consoleを使用すれば、タグを付けずとも任意のTest Caseが実行できるため、上記のような悩みは発生しません。
というように、紹介した事例で開発を進めるよりも、効率(スピード)が上がります。
そのため、Interactive Consoleを使うんですね。
実は、Interactive Consoleと同様の動きをするライブラリ「robotframework-debuglibrary」があるので、紹介します。
このライブラリではDebugというキーワードが提供されています。
これを使用するとrobotファイルの任意の場所でテストケースの実行を中断させ、Interactive Shellというものを起動することができます。
実際に見てみましょう。
※ pip install robotframework-debuglibrary でインストールが必要です。
robotコマンドでファイルを実行すると、 Debug を挿入したところで、Interactive Shellに入ります。
そのため、処理が一旦止まっている状態です。
この中で行う操作としては、Interactive Consoleと変わりないです。
上記のように動作確認したいKeywordを実行することもできますし、Debugともあるように、
${output} の中身を自動的に表示してくれています。(Interactive Consoleでも出力を自動的に返してくれます。)
このまま show version のログ結果も出力させたいなとなれば、
Interactive Shell内で動作確認をして、
robotファイルに追加するという流れもできます。
ちなみに、Interactive ConsoleとInteractive Shellは、同時に環境を起こすことはできるので、robotファイルに追加したら、 Run in Interactive Console をクリックして、追加したものを実行することもできます。
Shellに help を入力することで、使用可能なコマンドの一覧が確認できます.
Interactive Shellを終了するには exit コマンドを実行します。終了後はDebugキーワードを起点として、残りのキーワードとTest Caseが実行されていきます。
以上が、robotframework-debuglibraryの Interactive Shell の紹介でした。
基本的にできることは、Interactive Consoleと変わらないですが、違いとしては、
以上が挙げられるかと思います。
といってもそこまで変わらないので、自分の好きな方を使用するがいいと思います。
今回は Robot Frameworkを使った開発に使用すると便利な
という2つの機能を紹介しました。
自分が書いたプログラムを「対話式」で動かしながら開発を進めていくことは、開発効率を高めていくことにつながるかと思いますので、本記事が少しでもお役に立てれば嬉しいです。
Robot Frameworkに関する情報を発信していきますので、今後もよろしくお願いします。