CTCロゴ
トップ

/

記事

/

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

その他

公開日:2023.10.02

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

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

    この記事をシェア

    ご挨拶

    ネットワークテクノロジー課の町田です。

    新卒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 を立ち上げるところからです。

    VS Codeで「Load in Interactive Console」ボタンを赤枠で示した画面

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

    VS Codeでtest.robotを表示し、右側にRobot FrameworkのInteractive Consoleを開いた画面

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

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

    Consoleターミナルで「test messages」を入力した画面

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

    「Run in Interactive Console」ボタンを赤枠で示した画面
    Run in Interactive Console実行後、コンソールにテスト結果が表示された画面

    さらに、他の立ち上げ方として、 Ctrl+Shift+P (Command+Shift+P)またはF1でコマンドパレットを開いて、

    Robot Framework: Start Interactive Console を選択するという方法もあります。

    コマンドパレットで「Robot Framework: Start Interactive Console」を選択している画面
    Robot Frameworkの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を実行してみます。

    ConsoleでNW機器への接続Keywordを実行し「Successfully Connected.」と表示された画面

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

    Consoleで「show running-config」を送信するKeywordを実行する画面

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

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

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

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

    ConsoleでKeywordを入力中に候補リストが表示され、TABキーで補完が可能な様子を示す画面

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

    Consoleで「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したのか」がわからなくなる。

    Test Cases一覧画面。各Test Casesの横に「Run in Interactive Console」ボタンが並び、失敗時に再実行できる状態を示す画面

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

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

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

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

    RFではTest Caseごとにタグをつけることができます。

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

    例 :

    Test Casesの「Log Something」にデバッグ用タグ[Tags] 01を付与した画面
    ターミナルでrobotコマンドを実行し、タグ01のTest CasesだけがPASSした結果を表示した画面

    これを使用することで、デバッグしたい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を記述

    SettingsにDebugLibraryを追加し、Test Cases内でDebugキーワードを記述したtest.robotの画面

    Interactive Shellに入る

    robotコマンドでファイルを実行すると、 Debug を挿入したところで、Interactive Shellに入ります。

    そのため、処理が一旦止まっている状態です。

    robotコマンド実行時にDebugで処理が停止し、Interactive Shellが起動したターミナル画面

    Shellの中で操作する

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

    Interactive Shell内で接続やコマンド実行を行い、show running-configの結果が変数${output}に格納されて表示された画面

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

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

    Interactive Shell内で「show version」コマンドを実行し、その結果が変数${version_output}に格納されて表示された画面

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

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

    Run in Interactive Consoleで追加したshow versionのコードを実行した結果が表示された画面

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

    Interactive Shellでhelpコマンドを実行し、使用可能なコマンド一覧が表示された画面

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

    Interactive Shellでexitコマンドを実行して終了し、残りのTest Casesが実行されてすべてPASSと表示された画面

    以上が、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に関する情報を発信していきますので、今後もよろしくお願いします。

    当サイトに掲載されている情報(記事、資料、動画、テンプレート等)については、その正確性および妥当性の確保に努めておりますが、ご利用に際しては、利用者ご自身の責任においてご判断ください。なお、個別の事情に応じては、専門家へのご相談を含め、適切な対応をご検討いただくことを推奨いたします。

    この記事をシェア

    Documents

    お役立ち資料

    View All