1. 程式人生 > >從零學習基於Python的RobotFramework自動化

從零學習基於Python的RobotFramework自動化

 

從零學習基於Python的RobotFramework自動化

 

一、        Python基礎

1)      版本差異

版本

編碼

語法

其他

2.X

ASCII

try:

    raise TypeError, 型別錯誤"

except TypeError, err:

    print err.message

……

3.X

UTF-8

try:

    raise TypeError("型別錯誤")

except TypeError as err:

    print(err)

去除不等於<>

去除long型別

新增bytes型別

 

 

 

 

 

 

 

 

 

 

 

 

 

2)      輸入輸出

text = input('Enter any content : ')       #輸入

print("Your input content is : %s" % text)     #輸出        
=============== C:\Python37\python.exe E: /TestScript.py ====================== Enter any content : who am I. Your input content is : who am I.

 

____________________________________________________________________________________________

 

3)      分支迴圈

for i in range(10):                #range(start, stop[, step])

    if i % 2 == 0:

        print(i, end=' ')
=============== C:\Python37\python.exe E: /TestScript.py ====================== 0 2 4 6 8

 

____________________________________________________________________________________________

 

4)      資料型別

a = 123         #整型 int()

b = '123'           #字串 str()

c = [1, 2, 3]          #列表 list()

d = (1, 2, 3)          #元組 tuple()

e = {1, 2, 3}          #集合 set()

f = {'aa': 1, 'bb': 2}       #字典 dict()

 注意:

  •  字串、列表、元組均可以通過索引獲取值,以及擷取部分。例如:a[0] >>> 1,b[1:-]>>> '2'。
  •  整型、字串、元組資料不可變; 集合是無序唯一的; 字典中key必須唯一且與value成對。

____________________________________________________________________________________________

 

5)      函式方法

class Operation():          #類定義

    def add(self, a, b):    #方法定義

        return a + b        #返回結果

opt = Operation()           #例項化類

print(opt.add(3, 5))        #呼叫類方法
=============== C:\Python37\python.exe E: /TestScript.py ======================

8

 

____________________________________________________________________________________________

 

6)      模組匯入

from robot.api import logger

import configparser

 

____________________________________________________________________________________________

 

7)      異常報錯

²   KeyboardInterrupt         Ctrl+C被按下

²   AttributeError                 試圖訪問物件沒有的屬性(比如foo沒有屬性x,卻試圖訪問foo.x)

²   IOError                          輸入/輸出異常(一般是無法開啟檔案)

²   ImportError                    無法引入模組或包(一般是名稱或路徑錯誤,或者是無此第三方包)

²   IndentationError           語法錯誤(一般是程式碼沒有正確對齊)

²   SyntaxError                   程式碼非法,程式碼不能編譯(一般是語法錯誤,寫錯了)

²   NameError                    使用一個還未被賦予物件的變數

²   IndexError                     下標索引超出序列邊界,(比如f只有3個元素,卻試圖訪問f[5])

²   TypeError                      傳入物件型別與要求的不符合

²   KeyError                       試圖訪問字典裡不存在的鍵

²   ValueError                    傳入一個呼叫者不期望的值

 

 

 

二、        RobotFramework基礎

1)      版本差異

版本

安裝

支援

執行

其他

1.5.X之前

wxPython2.8.x

Pyhton2.x

pybat
robot
jybot

……

1.7.X之後

wxPython4.0.x

Pyhton2.x
Pyhton3.x

robot
jybot
custom script

新增debug模式
Edit新增字型色
Grid新增json校驗

 

 

 

 

 

 

 

 

 

 

2)      輸入輸出

Import Library    Dialogs                                                 

${username} =     Get Value From User            Input user name           default      

Log               ${username}                                                    

=======================================================

20190724 12:37:36.010 :  INFO : ${username} = zhangsir

20190724 12:37:36.010 :  INFO : zhangsir

 

_________________________________________________________________________________

 

3)      分支迴圈

FOR      ${i}              IN RANGE       5                           

         Run Keyword If     ${i}%2==0      Log        ${i}    
END ======================================================= 20190724 12:51:55.658 : INFO : 0 20190724 12:51:55.658 : INFO : 2 20190724 12:51:55.658 : INFO : 4

 

________________________________________________________________________________

 

4)      資料型別 

${a}=       Set Variable          ${123}                                                     

${b}=       Set Variable          123                                                         

@{c}=       Create List            1           2          3                                

&{d}=      Create Dictionary      aa=1       bb=2      cc=3                                                     

=======================================================

20190724 13:44:11.701 :  INFO : ${a} = 123

20190724 13:44:11.717 :  INFO : ${b} = 123

20190724 13:44:11.717 :  INFO : @{c} = [ 1 | 2 | 3 ]

20190724 13:44:11.717 :  INFO : &{d} = { aa=1 | bb=2 | cc=3 }

20190724 13:44:11.717 :  INFO : 123

20190724 13:44:11.717 :  INFO : 123

20190724 13:44:11.717 :  INFO : ['1', '2', '3']

20190724 13:44:11.717 :  INFO : {'aa': '1', 'bb': '2', 'cc': '3'}

 

________________________________________________________________________________

 

5)      函式方法

*** Keywords ***                                                                                

Library  MyLibrary                                                                              
*** Keywords *** Query Redis String [Arguments] ${key} ${db}=8 ${conn} Connected To Redis ${db} ${result} Get From Redis ${conn} ${key} [Return] ${result}

 

________________________________________________________________________________

 

6)      模組匯入

Import Library      MyLibrary                                                                 

Import Resource     BasicResource.robot                                                 

Import Variables    ${adultCode}          

 

________________________________________________________________________________

 

7)      異常報錯

=======================================================

20190724 14:08:07.692 :  INFO : 123

20190724 14:08:07.692 :  FAIL :

Replacing variables from setting 'Variables' failed: Variable '${test}' not found. Did you mean:

    ${TEST_TAGS}

    ${TEST_NAME}

20190724 14:08:07.692 : DEBUG :

Traceback (most recent call last):

  None

 

 

 

 

三、        RobotFramework常用關鍵字

1)      Evaluate關鍵字

以Python模式計算指定的表示式並返回結果。

    • ${random} =   Evaluate random.randint(0, sys.maxint)      modules=random, sys  

 

2)      Should系列關鍵字

用於判斷校驗測試結果。

    • Should Be Empty:如果指定物件不為空則失敗(反之Should Not …)。

    • Should Be Equal:如果指定物件不相等則失敗(反之Should Not …)。

    • Should Be True:如果指定條件不成立則失敗(反之Should Not …)。

    • Should Contain:如果指定物件不包含則失敗(反之Should Not …)。

    • ……

 

3)      Convert系列關鍵字

用於資料的型別轉換。

    • Convert To Integer:將指定項轉換為整數。

    • Convert To Number:將指定項轉換為浮點數。

    • Convert To String:將指定項轉換為unicode字串。

    • ……

 

4)      Run Keyword系列關鍵字

根據判斷條件的真假執行關鍵字

    • Run Keyword If:如果條件為真,則使用指定的引數執行指定的關鍵字。

    • Run Keyword Unless:如果條件為假,則使用指定的引數執行指定的關鍵字。

    • Run Keyword:使用指定的引數執行指定的關鍵字。

    • Run Keywords:按順序執行所有指定的關鍵字(使用AND連線)。

    • ……

 

5)      Get系列關鍵字

根據關鍵字作用獲取值。

    • Get Count:返回item1中出現item2的次數。

    • Get Length:返回指定項的長度。

    • Get Time:返回指定格式時間。

    • ……

 

6)      Set系列關鍵字

設定引數或變數。

    • Set Variable:設定變數。

    • Set Variable If:根據指定條件設定變數。

    • Set Log Level:設定日誌登記。

    • ……

 

7)      其他關鍵字

    • Sleep:強制休眠指定時間(秒)。

    • Catenate:連線多個字串(預設有空格)。

    • Call Method:使用提供的引數呼叫指定物件的方法。

    • Exit For Loop If:如果條件為真,則結束FOR迴圈。

 

 

 

四、        RobotFramework安裝

1)      安裝Python3.x

首先執行python-3.7.3-amd64.exe,勾選“Add Path…”,最好選擇自定義安裝在根目錄。

然後開啟DOS命令視窗,分別輸入python --version和pip –version,顯示對應判斷則安裝成功。

 

2)      安裝相關模組

   pip install redis

   pip install pysolr

   pip install pymysql

   pip install robotframework

   pip install robotframework-ride

   pip install robotframework-requests  # 用於介面測試

   pip install robotframework-databaselibrary  # 用於資料庫測試

 

3)      自定義庫管理

把自定義檔案包放到Python目錄下Lib/site-packages即可。

 

4)      常見錯誤處理

  • 執行RF3.X報錯,提示資訊“python2.x呼叫失敗”?

  這是由於你之前安裝過RF2.X,切換到RF3.X後資料檔案未清除導致。

  請在系統盤搜尋librarykeywords.db檔案並刪除(AppData\Roaming\RobotFramework\ride),重啟RIDE。

            

 

  • 執行RF3.X報錯,提示資訊“找不到pybat”?

    這是因為RF3.X去除了pybat模式,合併到了robot模式。請更改執行模式為robot,並更改用例檔案格式為.robot。

   

 

 

 

五、        日期時間處理

1)      日期格式

l   常見形式: 2019-07-20 18:45:18(格式化"%Y-%m-%d %H:%M:%S")

l   Solr庫: 2019-07-20T18:45:18Z(格式化"%Y-%m-%dT%H:%M:%SZ")

l   Redis庫: Jul 7, 2019 6:45:18 PM(格式化"%b %d, %Y %I:%M:%S %p")

l   MySQL庫: datetime.datetime(2019, 7, 20, 18, 45, 18)

l   含毫秒: 2019-07-20 18:45:18.000(格式化"%Y-%m-%d %H:%M:%S.%f")

l   時間戳: 1564453476000

l   其他: 20190720184518(格式化"%Y%m%d%H%M%S")

 

2)      處理方法

※  Convert Date:轉換日期格式,可指定輸入輸出格式(epoch表示時間戳)。

引數:

date: 日期字串

result_format: 返回的日期格式,

exclude_millis: 是否捨去毫秒

date_format: 格式化的日期格式

示例:

| Convert Date   |   2014-05-28 12:05:03.111 |  result_format=epoch           |  #返回'1401267903.111'   |

| Convert Date   |   Jul 7, 2019 6:45:18 PM  |  date_format=%b %d, %Y %I:%M:%S %p  |  #返回'2014-05-28 12:05:03'|

 

※  Get Current Date:獲取當前日期時間,可指定輸出格式。

引數:

time_zone:獲取此時區的當前時間(目前僅支援本地和UTC)

increment:設定返回日期時間增量,可為負數

result_format:返回日期的格式。

exclude_millis:是否捨去毫秒

示例:

|   Get Current Date  |   result_format=%Y-%m-%d |         #返回當天日期    |

 

 

 

六、        JSON處理

1)     標準格式

{

"key1": {

"key2": 123,

"key3": "123",

"key4": [1, 2, 3],

"key5": {"key": "value"}

},

"key6": true,

"key7": null

}

 

2)     處理方法

※  Get Json Value:獲取JSON中指定目標節點值。

引數:

json_string:JSON文件

json_pointer:JSON節點

示例:

| ${result}=        | Get Json Value   | {"foo": {"bar": [1,2,3]}}      | /foo/bar |

| Should Be Equal  | ${result}         | [1, 2, 3]                  |

 

※  Set Json Value:設定JSON中指定目標節點值。

引數:

json_string:JSON文件

json_pointer:JSON節點

json_value:JSON值

示例:

| ${result}=        | Set Json Value       | {"foo": {"bar": [1,2,3]}}      | /foo | 123 |

| Should Be Equal  | ${result}             | {"foo": 123}              |

 

 

 

七、   Jenkins整合

        

 

 

&n