RF學習筆記


 

1.Create session關鍵字創建的會話,如果后面的請求(postget)沿用這個會話,則會繼承會話的sessionid等。可以用來做登錄操作,后面其他的請求不用再登錄,就能通過驗證。

2.上傳文件的請求,請求頭中不能添加Content-Type=application/x-www-form-urlencoded,否則,上傳會失敗。因此,setup中的登錄請求,不要加請求頭,在具體的請求中再添加。

3.RFfor用法:

:FOR

${i}

in range

2

10

 

log

${i}

 

 

 

Exit for loop if

${i} ==4

 

 

4.RF中使用python語句時,注意變量類型的轉變。在RF中所有的變量不用加引號就表示為String類型,比如${v1}=myname,如果在python語句中引用時,一定要在變量上加上單引號或雙引號,才表示是字符串,如  ${v2} evaluate “${v1}” + “is”。

5.RFhttp請求的響應結果是json字符串(python requests庫的響應結果為bytes,需要解碼為字符串,res.content.decode(“UTF-8”))。

6.RF中,如果變量為字符串,在語句中把變量當做python語句來執行時,要將變量加上引號,最好是三引號,防止字符串本身含有單引號或雙引號出錯。如a = “Thit’s all right”${b} evaluate ‘’’${a}’’’.find(“all”)

7.Python2中編碼問題比較復雜,而robotframework又支持python2,因此RF在處理中文時,會出現很多編碼問題。

1)比如,從py文件中讀取變量,變量含有中文。這時,應該在變量前加一個u,表示unicode字符串,這樣,讀取到RF中就會根據系統的默認編碼,將unicode變量轉換成正常的中文顯示。

support_files = u'E:/測試用文件/壓縮文件/ALM測試管理介紹 V1.2.7z'

2)如果是獲取操作系統的路徑,路徑中有中文,需要將路徑用GBK解碼成unicode

${p}  evaluate os.getcwd().decode('GBK') os

E:/測試用文件/壓縮文件/ALM測試管理介紹 V1.2.7z  #解碼的顯示

E:\\xbc\xbc\xca\xf5\xce\xc4\xb5\xb5\RF\xcf\xe0\xb9\xd8\STD_UI\xd7\xd4\xb6\xaf\xbb\xaf\STD_UI3

3RF導入variablesvariablespython文件,在py文件中不能打印非GBK編碼的字符串,否則導致RF程序錯誤,其他無關的用例也無法運行,無法顯示日志。

8、RF中分支判斷的用法(ELSEELSE IF必須要大寫,不然不能識別):

${day1}

Run Keyword If

${day}'.startswith('0')

evaluate

${day}'[1]

ELSE

evaluate

${day}

9、RF中編寫上傳文件的接口,如果請求中不填headersdata用字典格式也可以用字符串,如果headers不為空時,就需要把字符串轉換成Json格式(RFJson和字典的類型都是dict),不然會報錯:ValueError: Data must not be a string

${data1}

to json

${data1}

 

 

 

 

${res}

Post Request

api2

/zte-km-cloududm-core/docUpload/sendData

${data1}

files=${file}

headers=${header}

10、如何獲取列表中的值。${s} = [1, [2, 3, 4] ,5]。如果以變量方式取:${s[1][1]},如果以列表方式取:@{s[1]}[1],如果以列表方式取一維的第2個元素:@{s}[1]。如果在for循環中遍歷,則必須以列表方式來獲取:FOR  ${i}  IN  @{s}

11、RFpost接口傳參數data有幾種方式:(1)直接在參數的位置填寫Json格式參數(空是null不是None),如:post  uri  {"name":"Lily",”age”:null};(2)先創建字典,再將字典放在位置參數處(這時候,空是None),如 ${data}  create dictionary {"name":"Lily",”age”:None}post  uri  ${data}

Post接口傳遞參數中如果有中文,且中文為關鍵參數,會報“'latin-1' codec can't encode charactersrequests傳遞body參數可以是json也可以是json轉換之后的二進制。對此有兩種辦法:1)轉換成unicodepayload=json.dumpps(payload)2)轉換成二進制,payload=’ {"name":"小麗",”age”:null}’payload=payload..encode(“UTF-8”)。如果本來就行json,則payload=payload.encode("unicode_escape").decode("UTF8")

12、RFpost接口傳參數params2種方式:(1)直接在URL中傳;(2)在params中(目前測試的在params中傳失敗)

13、RFget接口params參數傳遞有幾種方式:(1)直接在uri問號后面放參數,如:get  /deleteModule?${id}2)以字典的方式傳遞,如:${param}  create dictionary {"id":"0012"}get  /deleteModule  ${param}

14、Http傳參數總結:Post接口的data參數是json格式字符串,如果傳入一個字典格式的參數,會自動轉化為json傳入;get接口的params是字典格式參數,如果傳入json串會直接報錯。

15、RF中接口接受的參數都是字符串格式,如果像列表、字典傳入進來要當做列表或字典處理,需要先轉換為python的變量(用loadsevaluate,視情況而定)。param1 = [1,2,4]param2 = {“name”:”Lily”}p1 = loads(param1)p2 evaluate param2.

16、RF中可以進行自定義關鍵字,文件放在路徑:%Python%\Lib\site-packages。需要注意:文件的名稱和類的名稱要一模一樣。在類中自定義函數,可以添加說明。文件放在正確路徑下后,需要重啟RF,有時需要重啟兩遍。然后按F5查看。注意:當自定義文件有語法錯誤,或者依賴的包不存在時,RF中引用失敗。

17、Json字符串中只能使用雙引號,不能使用單引號,比如:

j = {“namelist”:[‘10237221’]}是錯誤的,應該用:j = {“namelist”:[“10237221”]}

18、RF中創建字典有兩種方式:

1)${d} create ditctionary name=Lily

2)${d} evaluate  {“name”:”Lily”}

字典中取值有兩種方式:

1)${d[“name”]}

2)${dv} get from dictionary ${d} name

錯誤的方式:&{d}[“name”] &{d[“name”]}

19、RF中創建列表有兩種方式:

1)${l} create list  1 2 5 7

2)${l} evaluate [1,2,5,7]

根據下標取列表中的值有三種方式:

1)${l[1]}

2)@{l}[1]

3)${lv} get from list ${l} 1

遍歷列表中的值時,必須用@{l}  :FOR ${i} in @{l}

20、RF中自定義函數,函數有返回值時,需要在RF里面判斷返回是否為空或False,使用關鍵字 Run Keyword If。如果函數返回的是json串時,json可能為空,當為空時判斷為false。那么在自定義函數中,當json為空時,就不能返回False或直接 return(之間return時返回的是None),判斷時,語句為:Run Keyword If  not ‘${flag}’ fail,需要將變量用單引號引起來,不然返回不為空時,會將返回的字符串視為變量,而報變量未定義的錯誤。因為用引號引起來,如果返回FalseNone時,結果視為字符串了。

21、RF內置庫路徑:D:\Python27\Lib\site-packages\robot\libraries,比如collectionsbuiltIndatetime

22、引用python庫:

${sqlstr} evaluate re.sub(r'dm_count_by_type_14_2','${dm_name}',"${sqlstr}")  re


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM