差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
rf:rf:evaluate [2013/03/05 14:12]
tony
rf:rf:evaluate [2023/06/25 09:48] (目前版本)
行 4: 行 4:
 Builtin的RobotFramework Library提供了**Evaluate** Keyword。它所提供的功能是「執行Python描述句」。但實際上到底有什麼用途呢?​原本我僅僅拿來將string轉為int的功用,經過一些查詢與試驗,我將心得整理給大家。 Builtin的RobotFramework Library提供了**Evaluate** Keyword。它所提供的功能是「執行Python描述句」。但實際上到底有什麼用途呢?​原本我僅僅拿來將string轉為int的功用,經過一些查詢與試驗,我將心得整理給大家。
 ===== Builtin ===== ===== Builtin =====
-Builtin的function可以參考[[http://​robotframework.googlecode.com/​hg/​doc/​libraries/​BuiltIn.html?​r=2.7.6#​Evaluate|Library Doc for Evaluate]]。這裡針對我有使用的function做說明。+Builtin的function可以參考[[http://​robotframework.googlecode.com/​hg/​doc/​libraries/​BuiltIn.html?​r=2.7.6#​Evaluate|Library Doc for Evaluate]]。我有使用的function做說明。
 ==== 數字轉換 ==== ==== 數字轉換 ====
 Python提供了int、long、float與complex等function讓你可以將字串轉為數字,也可以透過它們做四則運算。首先以字串轉數字為例,我將8設於${num_str}中,再透過Evaluate+int轉為數字。這裡必須注意的是:​ 「int()中放變數必須以單引號'​括起」。否則,假如你設定的數字為08,在轉換int時會出現Syntax Error。 Python提供了int、long、float與complex等function讓你可以將字串轉為數字,也可以透過它們做四則運算。首先以字串轉數字為例,我將8設於${num_str}中,再透過Evaluate+int轉為數字。這裡必須注意的是:​ 「int()中放變數必須以單引號'​括起」。否則,假如你設定的數字為08,在轉換int時會出現Syntax Error。
行 40: 行 40:
 其它還有abs、ord、unichar等functions,這部分就當大家的功課了。 其它還有abs、ord、unichar等functions,這部分就當大家的功課了。
 ===== Other Libraries ===== ===== Other Libraries =====
-**Working..** +在前一節中,是直接透過使用function去達到你的需求,因為在Python中,函式也是屬於First-Class。在這部分主要分享給你的,是基於物件所提供的函式。 
-==== Module ​==== +==== Builtin-Type Function ​==== 
-這就像某個類別提供了static method傳參它就可以取得你想要結果。 +以前剛開始寫Robot時,只想做tolowercase與touppercase的字串轉換。但因為Robot本身的Library中並沒有提供這樣的Keyword,只好自己寫一個出來。達到這個需求,除了使用Plugin寫法去引用Java或Python中的字串函式外,Evaluate也能達到一樣的效力。我直接使用[[http://​docs.python.org/​2/​library/​stdtypes.html#​string-methods|Built-in DataType]]的function來達到lower與upper的轉換:​ 
-==== Function ​====+<​code>​ 
 +${str} | Set Variable | TEMP 
 +${lower_str} | Evaluate | '​${str}'​.lower() 
 +${upper_str} | Evaluate | '​${str}'​.upper() 
 +</​code>​ 
 +[[http://​docs.python.org/​2/​library/​stdtypes.html|其它]]還有關於字、檔案之類的函式介紹,但我想會寫在Robot內的應該都是操作String居多吧.. 
 +==== Module Function ==== 
 +Python有一堆有的沒的Module,我們也可以在Robot中使用們。使用相當簡單,只要做匯入模組後,就可以透過它所提供的類別與對應函式做操作。我以操作datetime與os做例子:​ 
 +=== datetime === 
 +[[http://​docs.python.org/​2/​library/​datetime.html|datetime]]就是提供操作date與time相關功能的類別。我們直接來看看如何使用:​ 
 +<​code>​ 
 +${today} | Evaluate | datetime.date.today() | datetime 
 +</​code>​ 
 +第三個參數是Python語句,第四個參數是我所匯入的模組。假如我只有執行datetime.date,動作僅是取得一個date物件,對Robot本身並沒有甚麼用途。以下面例子來說,${date}也只是得到一個<​class '​datetime.date'>​的字串,無法拿它來做下一個Evaluate操作 
 +<​code>​ 
 +${date} | Evaluate | datetime.date | datetime 
 +</​code>​ 
 +=== os === 
 +[[http://​docs.python.org/​2/​library/​os.html|os]]提供os相依的功能。它所提供的類別與函式並非都能跨平台,必須仔細看清楚它的文件說明。使用方式也與datetime類似,我以取得系統變數SystemRoot為例子:​ 
 +<​code>​ 
 +${today} | Evaluate | os.environ['​SystemRoot'​] | os 
 +</​code>​ 
 +=== math === 
 +[[https://​docs.python.org/​2/​library/​math.html|math]]提供math相依功能,想做函數運算可以查查它的文件說明。 
 +<code bash> 
 +${ceil} | Evaluate | math.ceil(int(${a}/​float${b})) | math 
 +${floor} | Evaluate | math.floor(int(${a}/​float${b})) | math 
 +</​code>​ 
 + 
 ===== 總結 ===== ===== 總結 =====
-更多的function可以參考[[http://​docs.python.org/​2/​library/​|Python Library]],但並不是每一個function都能夠使用,因為Robot並不一定能夠接受參數與回傳格式,而且function會根據Python版本不一定會支援。假如使用了不支援的function,以bin()來說,應該會看到NameError:​ name '​bin'​ is not defined的錯誤訊息這時候就要自己來了! ​想起一首歌:​ 「沒有妳在我都自己來~我都自己來~」。\\+其實只要能看得懂Python Document,Evaluate就可以隨心所欲的用啦。要謹記在心的是: 不是每一個function都能夠使用,因為Robot並不一定能夠接受Python參數與回傳格式,而且function會根據Python版本支援。如果你是透過RobotFramework的jar,那它所用的Python版本就要看Jython。假如使用了不支援的function,以bin()來說,應該會看到NameError:​ name '​bin'​ is not defined的錯誤訊息這時候就要自己來了! \\
 \\ \\
-友藏內心獨白: ​身為一個programmer應該什麼自己來啊!+友藏內心獨白: ​沒有妳在我都自己來~我都自己來。
 ===== Reference ===== ===== Reference =====
   * [[http://​docs.python.org/​2/​library/​|Python Library]]   * [[http://​docs.python.org/​2/​library/​|Python Library]]