跳到主要內容

Robot Framework - Evaluate該怎麼用?

Evaluate該怎麼用?

前言

Builtin的RobotFramework Library提供了Evaluate Keyword。它所提供的功能是「執行Python描述句」。但實際上到底有什麼用途呢?原本我僅僅拿來將string轉為int的功用,經過一些查詢與試驗,我將心得整理給大家。

Builtin

Builtin的function可以參考Library Doc for Evaluate。我以有使用過的function做說明。

數字轉換

Python提供了int、long、float與complex等function讓你可以將字串轉為數字,也可以透過它們做四則運算。首先以字串轉數字為例,我將8設於${num_str}中,再透過Evaluate+int轉為數字。這裡必須注意的是: 「int()中放變數必須以單引號'括起」。否則,假如你設定的數字為08,在轉換int時會出現Syntax Error。

${num_str} | Set Variable | 8
${num} | Evaluate | int('${num_str}')

其中int與long的第二個參數為base,這是根據你的input所決定:

Comment | num = 9
${num} | Evaluate | int('11', 8) 
Comment | num = 11
${num} | Evaluate | int('11', 10)
Comment | num = 17
${num} | Evaluate | int('11', 16)

其它還有像bin、oct、hex,可以將整數轉為2、8、16進位。

運算

四則運算: 直接將運算子加上即可:

${num} | Evaluate | int('${hour}')*60 + int('${min}')

指數: 可以用pow。以下面兩個例子來說,第一個是2的3次方為8,第二個是2的3次方再mod 7為1。需注意的是: 「傳入值必須是數字不可為字串」。

${num} | Evaluate | pow(2,3)
${num} | Evaluate | pow(2,3,7)

取最大最小值: 使用max/min,可以選擇丟一個array的方式,也可以當多個參數傳入。

@{num_list} | Create List | 2 | 3 | 5 | 7
${num} | Evaluate | max(@{num_list})
${num} | Evaluate | min(@{num_list})
${num} | Evaluate | min(1,3,5,7)

其它還有abs、ord、unichar等functions,這部分就當大家的功課了。

Other Libraries

在前一節中,是直接透過使用function去達到你的需求,因為在Python中,函式也是屬於First-Class。在這部分主要分享給你的,是基於物件所提供的函式。

Builtin-Type Function

以前剛開始寫Robot時,只是想做tolowercase與touppercase的字串轉換。但因為Robot本身的Library中並沒有提供這樣的Keyword,只好自己寫一個出來。要達到這個需求,除了使用Plugin寫法去引用Java或Python中的字串函式外,Evaluate也能達到一樣的效力。我直接使用Built-in DataType的function來達到lower與upper的轉換:

${str} | Set Variable | TEMP
${lower_str} | Evaluate | '${str}'.lower()
${upper_str} | Evaluate | '${str}'.upper()

其它還有關於數字、檔案之類的函式介紹,但我想會寫在Robot內的應該都是操作String居多吧..

Module Function

Python有一堆有的沒的Module,我們也可以在Robot中使用它們。使用相當簡單,只要做匯入模組後,就可以透過它所提供的類別與對應函式做操作。我以操作datetime與os做例子:

datetime

datetime就是提供操作date與time相關功能的類別。我們直接來看看如何使用:

${today} | Evaluate | datetime.date.today() | datetime

第三個參數是Python語句,第四個參數是我所匯入的模組。假如我只有執行datetime.date,動作僅是取得一個date物件,對Robot本身並沒有甚麼用途。以下面的例子來說,${date}也只是得到一個<class 'datetime.date'>的字串,無法拿它來做下一個Evaluate操作。

${date} | Evaluate | datetime.date | datetime

os

os提供os相依的功能。它所提供的類別與函式並非都能跨平台,必須仔細看清楚它的文件說明。使用方式也與datetime類似,我以取得系統變數SystemRoot為例子:

${today} | Evaluate | os.environ['SystemRoot'] | os

math

math提供math相依功能,想做函數運算可以查查它的文件說明。

${ceil} | Evaluate | math.ceil(int(${a}/float${b})) | math
${floor} | Evaluate | math.floor(int(${a}/float${b})) | math

總結

其實只要能看得懂Python Document,Evaluate就可以隨心所欲的用啦。要謹記在心的是: 不是每一個function都能夠使用,因為Robot並不一定能夠接受Python參數與回傳格式,而且function會根據Python版本去支援。如果你是透過RobotFramework的jar,那它所用的Python版本就要看Jython。假如使用了不支援的function,以bin()來說,應該會看到NameError: name 'bin' is not defined的錯誤訊息,這時候就要自己來了!

友藏內心獨白: 沒有妳在我都自己來~我都自己來。

Reference

留言

這個網誌中的熱門文章

PostgreSQL - Unattended installation on windows

Introduction 要將別人軟體包裝到自己軟體中,不可或缺的東西就是Unattended installation。以Unattended installation來說,我們可以選擇透過Installer的silent mode安裝,也可以透過把目標軟體做成portable的版本。本篇文章分享這兩種方法,教導大家如何將PostgreSQL透過Unattended installation方式安裝到目標系統成為service。 Note. 本篇以PostgreSQL 10.7為例。 Install with installer Tips 安裝程式或反安裝程式的參數,除了可以直接上官網搜尋Installation User Guide以外,也可以直接使用help參數查詢: postgresql- 10.7 - 2 -windows-x64.exe --help Windows安裝程式主要有EnterpriseDB與BigSQL兩種。BigSQL版本安裝元件是透過網路下載且支援參數不如EnterpriseDB版本多,以我們需求來說,我們傾向於使用EnterpriseDB版本。接下來分享給大家安裝與反安裝方法。 Installation @ echo off set INSTALL_DIR =C:\postgres10 set INSTALLER =postgresql- 10.7 - 2 -windows-x64.exe   rem options for installation set SSMDB_SERVICE =postgresql- 10 set MODE =--unattendedmodeui none --mode unattended   set DB_PASSWD =--superpassword postgres set DB_PORT =--serverport 5432   set SERVICE_NAME =--servicename % SSMDB_SERVICE %   set PREFIX =--prefix "%INSTALL_DIR%" set DATA_DIR =--datadir "%INSTALL_DIR%\data"   set OPTIONS =

How to install RIDE on Windows?

Introduction 多年沒在Windows上開發RobotFramework,趁著這次整理一下RIDE安裝方法。 目前RIDE最新版本與Python對應版本如下: (3.6 < python <= 3.11) Install current released version (2.0.8.1) with: pip install -U robotframework-ride 安裝Python 直接到Python官網找尋最新的3.11版本,我使用3.11.9: link 。安裝就是一直下一步而已。 安裝wxPython 每次安裝RIDE最困難的都是wxPython。看了一下 官網 描述,我就姑且相信一下: 接著進入下 載頁面 就有安裝教學。基本上就是到Python目錄下的Scripts直接執行以下command: pip install -U wxPython 安裝RIDE 接著就如RIDE官網所說,執行以下command: pip install -U robotframework-ride 啟動RIDE 直接在相同目錄下執行ride就可以啟動了,你也可以直接在桌面建ride連結,加快下次啟動時間。 沒想到這次這麼順利就安裝完成了。因為我是使用java去啟動robot framework,就不特別講要怎麼使用pip安裝robot framework了。

Hello World!

即將要搬家,因此舊網頁內容將慢慢轉移至Blogger。 如果要存取舊網頁,可以使用以下連結: https://wiki.tonylin.idv.tw/dokuwiki/doku.php