Robot Framework + Jenkins跑shell script, Linux expect實作

Msx Wu
WU TH Max
6 min readJul 22, 2021

--

延續實作連線至一網段環境後再經由此網段線路連線至其他網段主機
這篇主要講解將上述expect code以及shell script code配合robot framework部屬在Jenkins上

首先,先安裝Jenkins的robot framework plugin
https://plugins.jenkins.io/robot/

這個plugin主要是讓之後閱讀robot的report更方便
且可以直接從jenkins裡面直接看到test的結果

可以直接點open report很方便,不然裝插件前每次還要在lab端用Python開個SimpleHTTPServer去看結果

Jenkins這邊就開個Freestyle project開始

所有腳本觸發都是透過Build中Conditional steps(multiple)來達成
選擇Always Run後
再Add step to condition > Execute shell

接著command鐘就可以直接下pybot觸發的指令
要記得的是Jenkins的預設路徑需要調整
如果像這邊作法是根據該JOB NAME去建立新資料夾
並在這資料夾中做一些動作
要記得先更改路徑

接著講解一下robot的部分

*** Settings ****** Variables ****** Keywords ****** Test Cases ***

robot的架構有以上四層
第一層Setting有點像是python你要import進哪個函示庫的概念
也可以import其他檔案的變數直接做使用等等
如同以下,為本project使用到的Library

*** Settings ***Library     OperatingSystemLibrary     String

Variables則是設定一些通用變數
如同以下

*** Variables ***${NPROC}  4${FILE}  test.txt${HOME}  /util/test/home${SZ_MANAGEMENT_IP}  00.000.000.000${SZ_CONTROL_IP}  00.000.000.000${SZ_USERNAME}  username${SZ_PASSWORD}  pass

在等等的Test Cases中,可以透過${Variables}的方式,來直接call這些參數
要特別注意的是在robot中的空格,必須兩個空白鍵為間隔
如果沒有以兩個空白做間隔則會跳error

接著重頭戲之一來到Keywords

*** Keywords ***
SSH Connect
${rc} ${stdout}= Run and Return RC and Output ... cat ${FILE} | xargs -n1 bash -c "${HOME}/ssh.exp \\\$1 > echo pass: \\\$1 || echo fail: \\\$1" Log ${rc} Log ${stdout}

直接上範例
Keyword就像是自己在包一個function一樣

特別的是 呼叫操作的方式 要透過Robot內建的BDD (Behaviour-Driven Development)語句來達成

假設這個function叫做SSH Connect
接著我想要在bash上面run command並且查看結果
因此這邊我使用的是Run and Return RC and Output

這個Keyword就是從先前import進的OperatingSystem裡面其中一個

可以自己到robot framework document裡面各自的library查看使用方法
以及各種BDD語句操作方式

至於我這邊下的bash cmd
是從指定的txt file中用xargs去逐行讀裡面文字
並且當作參數放到exp做使用

最後,是Test Cases

*** Test Cases ***First Step
SSH Connect

Test Cases就是實際邏輯的操作區域
由上面定義好的Keywords 在這邊做呼叫使用
如同範例,我先訂一個第一步驟的標題
在First Step中,使用到剛剛定義好的SSH Connect Keywords

這邊回頭提一下Jenkins下的cmd

pybot -t "$First Step" home/test.robot

dash t後面接參數這個作法是連結到剛剛Test Cases部分
這個參數接著就是剛剛定義的First Step
也就意味著這次執行pybot 只會去跑First Step範疇下的Keywords

這樣的做法可以將多個Test Case寫在同一支robot中
透過dash t的方式 在指定這次跑是只要跑哪些指定的範疇

最後在Post-build Actions加上剛剛install的robot framework Jenkins Plugin
設定一下result threshold

大致上就大功告成了

可以從Build History中直接看到Robot Test的結果
也能直接打開robot的log頁面

--

--