目次
ご挨拶
ネットワークテクノロジー課の町田です。
新卒2年目のネットワークエンジニアで、ネットワークも開発も全て未経験からこの業界に入りました。ネットワーク検証の自動化に主に携わっており、PythonやRobot Framework(以下RF)を日頃触っています。
本記事では、自動化ツールであるRFのInteractive Consoleについて紹介します。
効率的に開発を進めていくよう日々つとめている中、IPythonの動きに近い形でRFのコードを実行できるInteractive Consoleの便利さに気づき、ぜひ他の人にも知っていただきたいと思い、紹介することになりました。
本記事では、RF Interactive Console の魅力とその使い方について紹介していきます。Robot Frameworkとは何かについて知りたい方は、以下の記事をご覧ください。
大規模ネットワーク自動化成功への手引書
ネットワーク自動化の際に多くの企業が直面するハードルや、
実現に向けた最適な手段をご紹介します。
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 を立ち上げるところからです。
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 を選択するという方法もあります。
変数の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を実行してみます。
成功したようなので、次は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を使うのか
なぜInteractive Consoleを使うのかというと、開発効率が劇的に改善するからです。
これを使わないと何が起こるのか、事例を2つ紹介します。
事例① 毎回、動作確認のためにrobotファイルを実行しなければならない
これまで見ていたrobotファイルは、すでに出来上がっているものです。
Test Casesは全部で4つありますが、Interactive Consoleを使わないと以下の開発の仕方になります。
Test Casesを一通り書いた後で、動作確認する
- もちろん、1発で成功はしないので、FAILしたところを調べて修正し、再度robotを実行する。
- 変数の中をLogに出していなかったりすると、「どこで、何が、どうFAILしたのか」がわからなくなる。
上記の開発の進め方になるので時間もかかるし、毎回全てを実行するのはとても非効率です。
Interactive Consoleを使用すると、ボタン 1 クリックでテストケース単位の確認はもちろん、記述しているコード1行1行の実行が可能です。
変数の中身も確認することができるので、便利です。
事例② デバッグ用のタグが散乱する
RFではTest Caseごとにタグをつけることができます。
robotコマンドの引数として実行したいタグを指定すると、そのタグが紐づけられているTest Caseが実行されます。
例 :
これを使用することで、デバッグしたい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を記述
Interactive Shellに入る
robotコマンドでファイルを実行すると、 Debug を挿入したところで、Interactive Shellに入ります。
そのため、処理が一旦止まっている状態です。
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と変わらないですが、違いとしては、
- Interactive Shellは、Robot Framework Language Serverの機能ではないので、VSCode以外でも使える。
- Interactive Shellの中では、1つのTest Caseを実行できない。Keyword単位で実行することになる。
以上が挙げられるかと思います。
といってもそこまで変わらないので、自分の好きな方を使用するがいいと思います。
まとめ
今回は Robot Frameworkを使った開発に使用すると便利な
- Interactive Console
- Interactive Shell
という2つの機能を紹介しました。
自分が書いたプログラムを「対話式」で動かしながら開発を進めていくことは、開発効率を高めていくことにつながるかと思いますので、本記事が少しでもお役に立てれば嬉しいです。
Robot Frameworkに関する情報を発信していきますので、今後もよろしくお願いします。
大規模ネットワーク自動化成功への手引書
ネットワーク自動化の際に多くの企業が直面するハードルや、
実現に向けた最適な手段をご紹介します。