就在2021年3月11日下午,筆者正在投入到if/else 這種複雜邏輯的程式碼編寫時,一封郵件引起了我的注意,本以為又是某xx銀行的信用卡催命賬單、或者諸如蘭博基尼2W元代金卷這種廣告郵件時。我定睛一看! 居然是 RobotFramework正式釋出了4.0版本!!! 點進去一看,發現帶來了賊多 **新特性** 和 ***功能增強*** 以及 ***BUG修復***,詳細Release Note見:
https://github.com/robotframework/robotframework/blob/master/doc/releasenotes/rf-4.0.rst
使用以下命令更新到
```sh
pip install robotframework==4.0
```
# 新特性1 - 支援 Skip 跳過狀態
內建關鍵字多了 `Skip` 和 `Skip if` 用來跳過用例
![image.png](https://upload-images.jianshu.io/upload_images/7303723-1d6cdeab3d8d3f02.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
在報告中也會有體現
![image.png](https://upload-images.jianshu.io/upload_images/7303723-70c5ddce377e63af.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
再也不用傻傻用`Pass If`了 ,或者使用 `-e` 透過tag跳過用例了
**透過`Skip` 跳過的用例會在報告裡面體現** 而 `-e` 不會
# 新特性2 - 原生IF/ELSE語法支援
這個必須好評,較複雜邏輯再也不用在用例裡面寫僵硬的`Run Keyword If` 了,直接上程式碼
原來:
```python
Run Keyword If "${userName}"=="${EMPTY}" and "${ip}"=="${EMPTY}" Log xxx
... ELSE IF "${userName}"=="${EMPTY}" and "${ip}"!="${EMPTY}" Log yyy
... ELSE IF "${userName}"!="${EMPTY}" and "${ip}"=="${EMPTY}" Log zzz
```
現在:
```python
Example3
IF "${direction}" == "STRAIGHT"
Log Going straight
ELSE IF "${direction}" == "LEFT"
Log Turning left
ELSE IF "${direction}" == "RIGHT"
Log Turning right
ELSE
Fail Unrecognized direction: ${direction}
END
```
以前不可能直接巢狀FOR迴圈。實現這一點的唯一方法是使用關鍵字包含另一個迴圈的迴圈。這個可以了,FOR迴圈以及新的IF/ELSE結構可以自由巢狀,示例:
```python
FOR ${row} IN @{rows}
FOR ${cell} IN @{row}
IF "${cell}" != "IGNORE"
Process Cell ${cell}
END
END
END
```
# 新特性3 - 移除了`Criticality`
這個在筆者平常寫指令碼過程中使用很少、具體可以看相關文件、而且還提供了由`Criticality`遷移到使用`Skip`的方案
#新特性4 - 列表@{list} 和字典&{dict}的訪問得到了增強
機翻一波
+ @{var}[item]和&{var}[item]首先進行常規變數項查詢,與使用${var}[item]時完全相同。
+ 也支援像@{var}[item1][item2]這樣的巢狀訪問,以及像@{var}[1:]這樣的列表使用切片表示法。
+ 使用@{var}[item]語法時,找到的項必須是列表或類似列表的。它的展開方式與@{var}的展開方式完全相同。
+ 使用&{var}[item]語法時,找到的項必須是對映。它的展開方式與&{var}的展開方式完全相同。
#新特性5 - `:FOR`迴圈不被支援了
在3.1版本使用`:FOR` 會產生警告 推薦使用新的`FOR` `END` 語法
但是在4.0版本 `:FOR`已經不再被支援了、使用應該會直接報錯。
不要使用:
```python
:FOR ${animal} IN cat dog cow
\ Keyword ${animal}
\ Another keyword
```
使用:
```python
FOR ${animal} IN cat dog cow
Keyword ${animal}
Another keyword
END
```
# 最後
其實還有很多新特性 和 bug的完善、筆者沒有時間一一去解讀(最近在寫bug)
如果希望更加進一步瞭解的可以 去看最新的 [更新日誌](https://github.com/robotframework/robotframework/blob/master/doc/releasenotes/rf-4.0.rst)
可見現在RF已經在慢慢的完善、改進,變得更靈活和易用。我已經在期待5.0版本了 !!! 你呢 ?