在使用robotframework的過程中,會發現寫起來跟寫**有點類似,但是比起直接寫**,robotframework又有點奇怪,這裡總結一下robotframework的使用過程中的一些奇淫技巧,本文主要涉及的是變數。
在robotframework中,標量指的是${}
,鍊錶指的是@{}
,大括號中間的變數名如果是一樣的,那麼就是乙個變數,不過有乙個很明顯的區別,當使用標量時,整個值就會是乙個整體,而使用鍊錶的時候,則是乙個個分散的個體。
舉個例子:
在寫指令碼的過程中,經常會遇到要寫for迴圈,比如下面乙個例子:
*** test
cases ***
test
$ create list abcde fghijk
:for
$ in
$ \ log $
然而,你會發現這樣執行是錯的,並沒有吧$
給迭代出來。正確的姿勢應該是這樣:
*** test cases ***
test
$ create list abcde fghijk
:for $ in @
\ log $
第乙個指令碼中,for迴圈迭代的是乙個標量,也就是乙個整體,執行結果就會把整個list
列印出來,而第二個指令碼中,迭代的是乙個鍊錶,也就是分散的個體,所以在迴圈的時候會被全部迭代出來列印。
再看乙個直觀的例子。
*** settings ***
library collections
*** variables ***@1
23*** test cases ***
test
log list @
上面的例子看指令碼沒毛病,直接列印定義的list變數@
,但是執行的時候你會發現,執行失敗了,報錯keyword 'collections.log list' expected 1 to 2 arguments, got 3.
,這裡的@
使用的是鍊錶,所以相當於這個位置你給了1,2,3三個引數,而log list
方法只能接受兩個引數,所以這裡報錯了。
${}
這個表示定義乙個變數,當然,在定義數字的時候,加上這個標識才是數值型別,比如:
*** test cases ***
test
$set variable $
$set variable 4
其中a獲得的是數字4,b獲得的是字串4。在json中的提現就是
布林值真假用的是$
和$
空格用的是$
空變數用的是$
robotframework的變數可以很好的支援擴充套件,使用得當可以事半功倍。
*** test cases ***
test
$set variable 192.168.9.1
$set variable p
log $}
====> 192.168.9.1
上面的拼接方式中,robotframework會首先解析$
這個變數,然後變數就變成了$
,最終結果列印的就是$
.
字典取值示例
*** test cases ***
test
$ create dictionary a=1 b=2
log $
====> 1
robotframework的字典值的獲取方式非常簡單,跟python
是乙個套路,
列表取值示例
*** test cases ***
test
$ create list a b
log $
====> a
當然,字典和列表是可以串在一起取值的,比如這樣:
*** test cases ***
test
$ create dictionary a=1
$ create dictionary b=2
$ create list $ $
log $
====> 1
常用的變數檔案的定義方式主要是在*.robot
檔案中定義variable
,值得一提的是,*.py
是可以作為robotframework的變數檔案的。相比於robotframework,python的格式定義更清晰一些,而且也是支援欄位和列表型別,例如:
test.py
obj = 'test'
dict =
list = [1, 2, 3, 4]
*** settings ***
variables test.py
*** test cases ***
test
log $
log $
log $
====>
test
test
1
如果只是這樣,那麼變數檔案用*.py
就沒意義了,引入py
的變數檔案的意義在於,能夠動態的獲取資料,舉個例子:
test.py
import random
obj = random.randint(1, 100)
*** settings ***
variables test.py
*** test cases ***
test
log $
每次執行時,獲取的值都是1到100之間的隨機數。同理,也可以自定義返回的規則,這種方式在某些報文字段生成時,可以非常方便的給自己的規則。
如果你定義的是乙個物件,那麼還可以直接執行物件裡面的方法。
test.py
import random
class
test
(object):
def__init__
(self):
pass
defrandom
(self):
return random.randint(1, 100)
obj = test()
*** settings ***
variables test.py
*** test cases ***
test
log $
robotframework常見的問題
1.定位元素的id是動態的 解決 1 可以通過定位父節點或兄弟元素間接定位。2 可以通過contains或starts with模糊匹配。具體格式如下 2.頁面元素載入不出來,點選不到元素。1 需要設定等待,可以是wait until element is visible,或set selenium...
Robot Framework的環境搭建
1.robot framework的安裝 作用 web自動化測試框架。rf框架是基於python 的,所以一定要有python環境。網上可以自行查詢。robotframework 2.8.5.win amd64.exe 直接雙擊下一步即可。2.wxpython 的安裝 作用 wxpython 是py...
RobotFramework測試Rest服務
python有乙個都對http請求封裝的很好的類庫 requests 見這裡 而rest服務就是基於http請求之上的,活躍的社群也有提供了乙個封裝 robotframework requests 見這裡 可以用來方便的測試rest服務 這裡記錄下在使用過程中碰到的問題 1.import的時候,名字...