1.Create session關鍵字創建的會話,如果后面的請求(post或 get)沿用這個會話,則會繼承會話的sessionid等。可以用來做登錄操作,后面其他的請求不用再登錄,就能通過驗證。
2.上傳文件的請求,請求頭中不能添加Content-Type=application/x-www-form-urlencoded,否則,上傳會失敗。因此,setup中的登錄請求,不要加請求頭,在具體的請求中再添加。
3.RF中for用法:
: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.RF中http請求的響應結果是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
(3)RF導入variables,variables是python文件,在py文件中不能打印非GBK編碼的字符串,否則導致RF程序錯誤,其他無關的用例也無法運行,無法顯示日志。
8、RF中分支判斷的用法(ELSE,ELSE IF必須要大寫,不然不能識別):
${day1} |
Run Keyword If |
${day}'.startswith('0') |
evaluate |
${day}'[1] |
ELSE |
evaluate |
${day} |
9、RF中編寫上傳文件的接口,如果請求中不填headers,data用字典格式也可以用字符串,如果headers不為空時,就需要把字符串轉換成Json格式(RF中Json和字典的類型都是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、RF中post接口傳參數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 characters”。requests傳遞body參數可以是json也可以是json轉換之后的二進制。對此有兩種辦法:1)轉換成unicode,payload=json.dumpps(payload);2)轉換成二進制,payload=’ {"name":"小麗",”age”:null}’,payload=payload..encode(“UTF-8”)。如果本來就行json,則payload=payload.encode("unicode_escape").decode("UTF8")
12、RF中post接口傳參數params有2種方式:(1)直接在URL中傳;(2)在params中(目前測試的在params中傳失敗)
13、RF中get接口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的變量(用loads或evaluate,視情況而定)。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,需要將變量用單引號引起來,不然返回不為空時,會將返回的字符串視為變量,而報變量未定義的錯誤。因為用引號引起來,如果返回False或None時,結果視為字符串了。
21、RF內置庫路徑:D:\Python27\Lib\site-packages\robot\libraries,比如collections、builtIn、datetime
22、引用python庫:
${sqlstr} evaluate re.sub(r'dm_count_by_type_14_2','${dm_name}',"${sqlstr}") re