1. 程式人生 > >Robot Framework - 入門與操作(5)

Robot Framework - 入門與操作(5)

大小 解析 one 令行 放置 數量 通關 ngs 兩種

Creating test data

***** Test suites

測試集沒有測試用例個數的限制,但建議不要超過 10 個測試用例。 除非是使用數據驅動模式,這種模式的測試用例僅包含一個高級別關鍵字。 測試集的註釋是在測試集的設置表格中使用 Documentation 標示。 除註釋之外的其他元數據可以使用測試集表格中的 Metadata 設置。 這種方式的元數據將在測試報告和日誌中顯示出來。 測試集的 setup teardown 都可以使用參數。 一個測試集的 setup 將在所有測試用例和子測試集之前被執行,並且 teardown 將在他們所有之後被執行。 假如測試集的 setup 執行失敗,所有的測試用例和子測試集都將被標識為失敗並不會被執行。 Teardown 用於所有測試用例執行完之後的清理。即使 setup 執行失敗,它也將被執行。 假如測試集的 teardown執行失敗,所有用例都將被標識為失敗,不管他們實際執行的結果如何。

***** Test cases

測試用例可以有自己的設置。 [Documentation] 用於說明測試用例的註釋。 [Tags] 用於標記測試用例。 [Setup], [Teardown] 用於指定測試用例的 Setup 和 Teardown。其同義詞是[Precondition]和[Postcondition] [Template] 用於指定測試用例模板。這個測試本身將只包含數據,這被用於關鍵字的參數。 [Timeout] 設置測試用例超時。

***** Documentation & Tags & Metadata

[Documentation] 設置可以用於設置測試用例的註釋。 這些文字將在命令行輸出中顯示,也會顯示在測試日誌和測試報告中。 可以用簡單的HTML 格式、或是變量來創建動態註釋。 重要的是如果測試用例有清晰和具有描述性的名稱,則沒有必要對用例添加註釋。 [tag]
簡單但強大的對測試用例進行分類的機制。 Tag 可以是任意文字,但他們都會被轉換為小寫字母,並且空格會被刪除掉。 假如一個測試用例獲取了多次相同的 tag,除了第一個其他的 tag 都將被刪除。 Tag 可以用變量創建,假設這些變量是存在的。 Force Tags 如果是在測試集文件中設置的該 tag,那麽該測試集下的所有測試用例都將得到該 tag。 Default Tags 測試用例如果沒有[tags]設置,將獲取該 Default Tags。 Metadata 設置 測試集可以有除註釋之外的其他元數據的設置可以使用測試集表格中的 Metadata 設置。 這種方式的元數據將在測試報告和日誌中顯示出來。 元數據的名稱和值跟隨在 Metadata 後的列中。

***** Setup & Teardown

setup 是在測試用例執行之前執行的, teardown 是在測試用例執行之後執行的。 可以使用帶有參數的普通關鍵字。 Setup 和 teardown 通常是單個關鍵字。 teardown 在測試用例失敗後也能被執行,所以能用來執行必須清理的動作,無論測試用例的狀態如何。 teardown 中的所有關鍵字都將被執行,即使其中有一個失敗的。 在測試集中可以設置[Test setup]和[Test teardown]。單獨的用例也可以有 setup 和 teardown。 在用例中設置[setup]和[teardown],並且會覆蓋 Test setup 和 Test teardown設置。 在[setup]和[teardown]之後沒有關鍵字,則意味著該用例沒有 setup 和 teardown。 作為 Setup 和 teardown 執行的關鍵字名稱可以是一個變量。

***** Template Test

Test templates convert normal keyword-driven test cases into data-driven tests. 測試模板可以讓關鍵字驅動測試用例轉換為數據驅動測試用例。 測試模板主要的使用目的是減少數據驅動測試的冗余。 可以代替文件中測試用例的所有相同關鍵字。 普通測試用例是由關鍵字和可能的參數組成,使用了模板的測試用例只需要定義模板關鍵字的參數即可。 假如一個模板測試用例同下面例子一樣有多行測試數據,那這個模板將所有行的數據有效。 模板測試是一種特殊的形式,所有的輪次都將被執行,即使出現執行失敗。

***** Test case styles_Keyword-driven

由一些關鍵字和參數所組成。 正常結構是首先讓系統進入初始狀態(如:有效登陸中的打開登陸頁面), 然後是對系統進行操作(輸入名字,輸入密碼,提交認證),最後驗證系統行為表現是否同預期一致(如:歡迎頁面是否打開)。

***** Test case styles_Data-driven

數據驅動,即測試用例只使用一個更高級別的關鍵字。 通常這個關鍵字是用戶自定義關鍵字以隱藏實際的測試工作流。 用於測試相同的腳本有不同的輸入或輸出數據。 測試模板可以讓關鍵字驅動測試用例轉換為數據驅動測試用例。 當使用測試模板,測試中的所有輪都將被執行,即使中間出現失敗。

***** Test case styles_Behavior-driven

是為了讓非技術的項目利益相關者也能讀懂用例。 是驗收測試驅動開發(ATDD)的基石。 使用 Given-When-Then 模式的行為驅動開發(BDD)。 當使用該模式編寫測試用例:
  • 由 Given 開頭的關鍵字通常表示初始化狀態
  • 由 when 開頭的關鍵字表示後續動作的執行
  • 由 then 開頭的關鍵字表示預期結果
  • 由 and 開頭的關鍵字通常表示有超過一個以上的行為
  • 如果全名匹配沒有找到時,前綴 Given、When、and、Then 將在搜索關鍵字時被忽略

***** Import Library & Library Name

Import Library 測試庫通常是在測試集的設置表中引入。 庫名稱是大小寫敏感的(模塊或類的實現名,並且必須嚴格匹配),但是其中的任何空格都將被忽略。 引入測試庫的方式:還可以使用內建庫的關鍵字 Import Library。 在引入測試庫的時候可以攜帶參數。 被引入庫的關鍵字在使用了 Import Library 關鍵字的測試集中是可用的。 Library Name 在測試日誌中測試庫的名稱顯示在關鍵字的前面,假如有多個關鍵字有相同的名稱,則必須在關鍵字名稱前面加上測試庫名稱。 在庫名稱後面使用 WITH NAME 來指定其新名字。 這個指定的名字將在測試日誌中顯示,並且當在測試數據中使用關鍵字全名(LibraryName.Keyword Name)時必須使用這個新的庫名。

***** Variable types_Variables

Robot Framework 有兩種不同的變量,標量和鏈表。 它們的語法分別是${SCALAR}和 @{LIST}。 除了這些,環境變量可以直接使用%{VARIABLE}。 當標量變量只是在測試數據單元格中做為一個值使用時,這個標量變量將被分配的值所代替,這個值可以是任何對象。 當一個標量變量在測試數據單元格中與任何其它內容一起使用時(常量字符串或其他變量),它的值首先被轉成 Unicode 字符串,然後與該單元格中的其它內容連接起來。 通過關鍵字返回的值也可以賦值給變量。 這就使得不同的關鍵字之間可以通信,即使它們在不同的測試庫中。 推薦在變量名稱後面的等號(=),可以使賦值更清晰。 通過關鍵字返回獲取值的變量,作用域範圍僅是該測試用例和關鍵字範圍。 在內建庫中有關鍵字可用於在測試過程中動態設置變量。 假如一個變量已經存在於新的作用域中,它的值將被覆蓋,否則將創建一個新的變量。
  • 使用 Set \ Test \ Variable 創建的變量,可以在該測試用例範圍內的任何位置有效。
  • 使用 Set Suite Variable 創建的變量,可以在當前測試集範圍內的任何位置有效。
  • 使用 Set Global Variable keyword 創建的變量,在所有測試用例和測試集中有效。

***** Variable types_ListVariables

列表變量是復合變量,可以分配多個值給它。 列表變量的最大好處是允許為大數據集合分配一個名稱。 可以列出和包含不受限制的條目(空鏈表也是允許的)。 列表變量通常只包含字符串,但是其他內容也是允許的。 訪問列表變量中某個確定的元素@{list}[i]。索引是從 0 開始的,如果試圖訪問超過最大索引的值將引起錯誤。 通過將列表變量的@替換為$,可以像標量變量一樣簡單的使用鏈表。 這種功能只有在不存在與鏈表的基礎名稱相同的標量變量時才可用。 關鍵字返回一個鏈表,它可以被賦值給多個標量變量和/或一個列表變量。 通過關鍵字返回獲取值的變量,作用域範圍僅是該測試用例和關鍵字範圍。

***** Variable types_Environment Variables

環境變量,語法是%{ENV_VAR_NAME}。但僅限於字符串值。 關鍵字 Set Environment Variable 創建一個新環境變量 關鍵字 Delete \ Environment \ Variable 刪除一個已存在的環境變量, 關鍵字在操作系統庫(OperatingSystem library) 環境變量是全局的,只要環境變量在一個測試用例中被設置,則其後的用例都可以使用。

***** Variable_Variable Files

一般來說是將不常改變的變量放到以.py為後綴的變量文件中(Variables files)。 變量文件使用 Python 代碼創建,技術上他們是 Python 模塊。 引入變量的文件的路徑是相對於引入文件所在的目錄,假如沒有找到則在 PYTHONPATH 目錄下尋找。 這個路徑可以包括變量,在 windows 中斜線將被轉換為反斜線。 變量文件中的所有變量在引入它的測試數據文件中都是有效的。 假如多個引入的變量文件包含有相同名稱的變量,則最早引入的那個變量將被使用。 在變量表中創建的變量和通過命令行設置的變量將覆蓋變量文件中的變量。 變量名字是大小寫不敏感的,推薦使用大寫字母作為全局變量。 直接創建變量: 例如${VARIABLE},${ANOTHER_VARIABLE},${INTEGER},${STRINGS},${NUMBERS} 動態創建變量: 變量文件是使用真正的編程語言創建的,可以利用動態的邏輯設置變量。 例如:${RANDOM_INT},${CURRENT_TIME},${AFTERNOON} 選擇變量引入: 當 Robot Framework 處理變量文件時,所有的不以下劃線開頭的屬性都被看作變量。 如果不想讓函數還是類被誤認為認為是變量。可以在他們前面增加前綴下劃線(_)。 這樣會避免函數或類覆蓋同名的其他變量導致調試困難的錯誤。 假如有大量的其他屬性需要增加前綴,可以使用特別的屬性_all_並給出需要做為變量處理的屬性名稱鏈表。

***** Variable_Variable Extended Syntax

擴展變量語法可以在標量變量中使用對象。 訪問對象的屬性:例如${OBJECT.name} 一個變量對應一個有多個屬性值的對象比有多個變量要更好 調用對象的方法: 例如${OBJECT.greet(‘Fit‘)}和${OBJECT.eat(‘Cucumber‘)} 但是調用方法將使測試數據變得復雜,特別是方法使用參數的時候。 假如發生這些,建議將這段代碼移動到測試庫中。 使用字符串和數字的方法: 標準的 Python 對象,包括字符串和數字,都可以使用擴展變量語法中的方法。 有時可以減少臨時變量的使用,但是也很容易造成過度使用,創建一些隱秘的測試數據。 註意:在測試數據中使用_xxx_方法是有爭議的,更好的做法是將這部分邏輯移到測試庫中。

***** Variable_Variables Inside Variables

嵌套變量:變量被允許插入到變量中,變量是由內到外解析的。 可以嵌套多個變量,但是假如有任何一個變量值不存在則全部失敗。 例如,一個嵌套變量${Hi_${GREET}},則${GREET}首先被解析。 假如它有一個值 Hello,則該變量的最終值是${Hi_Hello}。

***** Variable_Built-in Variables

Robot Framework 提供了一些內建變量,這些變量是自動可以使用的。 操作系統內建變量 ${CURDIR} \ 提供當前測試文件存放的絕對路徑。 ${TEMPDIR} \ 獲取操作系統臨時文件夾的絕對路徑。 ${EXECDIR} \ 獲取測試執行開始目錄的絕對路徑。 ${/} \ 操作系統的路徑分隔符。在 UNIX 系統是“/”,在 windows 系統是“\”。 ${:} \ 系統路徑元素分隔符。在 UNIX 中是“:”在 windows 系統是“;”。 數字變量 變量語法可以用來創建一個全是整型和浮點型的數字。 當關鍵字需要真實數字的時候這是非常有用的。 Boolean和None/null變量 使用變量語法創建布爾值、Python 語法中的 None 和 Java 語法中 Null。 對大小寫不敏感。例如${TRUE}和${true}是相同的,另外, ${none}和${null}是同義詞。 可以使用${SPACE}和${EMPTY}創建空格和空變量。 這些變量非常有用,否則需要使用反斜杠用於轉義空格或空單元格。 自動變量 可以在測試用例中使用。這些變量在執行時會有不同的值,並且不是在任何時候都是有效的。
  • ${TEST NAME} \ 獲取當前測試用例名稱
  • @{TEST TAGS} \ 包含當前測試集中的 tag,按字母排序
  • ${PREV TEST NAME} 前一個測試用例的名稱,或者為空字符串【當沒有任何測試用例執行過】。
  • ${PREV TEST STATUS} 前一個測試用例的狀態,PASS,FAIL 或者未空字符串。
  • ${PREV TEST MESSAGE} 前一個測試用例可能的錯誤信息。
  • ${SUITE NAME} \ 當前測試集的全名稱。
  • ${SUITE MESSAGE} \ 測試集的所有消息,包括統計。
  • ${OUTPUT FILE} 當前輸出文件的絕對路徑。當輸出文件被分割會有不同的值。
  • ${LOG FILE} 當前日誌文件的絕對路徑或字符串 None【當沒有日誌文件時】。
  • ${REPORT FILE} \ 當前報告文件的絕對路徑或字符串 NONE【當沒有報告文件生成時】。
  • ${DEBUG FILE} \ 調試文件的絕對路徑或字符串 NONE【當沒有調試文件時】。
  • ${OUTPUT DIR} \ 輸出目錄的絕對路徑。
  • 等等。

***** UserKeyword_Default Arguments Values

允許一個關鍵字有不同數量的參數 參數添加默認值,即在等號(=)後跟默認的值 可以有多個參數有默認值,但是他們必須在正常位置參數後面 當一個關鍵字需要多個有默認值的參數並且只有其中一部分參數需要被覆蓋, 使用命名關鍵字語法: 指定的參數不使用${}。

***** UserKeyword_Return Values

使用已經存在的關鍵字組合來創建新的更高級別的關鍵字。這些關鍵字被叫做用戶自定義關鍵字。 用戶關鍵字可以在測試用例文件、資源文件和測試集初始化文件中被創建。 用戶關鍵字也可以返回值。返回值使用[Return]定義。 該值可以賦給測試用例中的變量或其他關鍵字。

***** AdvancedFeatures_For Loops

Robot \ Framework 也提供了自己的 For 循環語法。 For 在測試用例和用戶自定義關鍵字中都可以使用。 普通 for 循環 每次循環被分配一系列值中的一個。 循環語法從:FOR \ 開始,冒號用於 For 循環與普通關鍵字區分開來。接下來的單元格內放置循環變量,再接的單元格必須含有 IN,最後兩個單元格則指定 For循環的起點及結束點。 用於 For 循環裏的關鍵字必須從下一行起,並且要向右縮進一個單元格。 當關鍵字或其他元素不再縮進時說明 For 循環結束。 不支持直接的 For 循環嵌套,但我們可以通過把含有 For 循環的關鍵字再放置在另一個For 循環裏來實現 For 循環的嵌套。 使用多個循環變量 所有循環變量必須放在:FOR 和 IN 之間。 變量數是任意的,但 IN 後面變量對應的值的個數必須是變量個數的倍數。 For \ in \ range循環 以:FOR開頭,循環變量放在緊跟其後的單元格中。只允許有一個循環變量,它包含當前循環索引。 循環變量後面的單元格必須包含 IN RANGE。 IN RANGE後面的單元格可以只有1個表示循環範圍數,或者有3個分別表示上限,下限和步長。 退出For循環 正常情況下 For 循環只有在所有循環數據都完成或該測試用例或關鍵字失敗的條件下才退出。 或者,利用BuiltIn關鍵字 Exit For Loop 可以實現在所有循環沒有完成的情況下退出。 重復執行單個關鍵字 利用BuiltIn 的關鍵字 Repeat \ Keyword 來處理。

***** AdvancedFeatures_Conditional Execution

通常來說,為了便於理解和掌握,不提倡測試用例甚至是關鍵字裏面出現條件邏輯。 這種條件邏輯應該以自然編程語言的形式出現在測試庫裏。 Framework沒有提供類似 if/else 結構的條件邏輯,但可以通過以下幾種方式實現相同的功能: ***用於測試用例或測試集 Setup 或 Teardown 的關鍵字名稱可以用一個變量來指定,這樣可以方便地改變關鍵字名稱,例如在命令裏改變它。 ***BuiltIn keyword --- Run Keyword 可以將一個關鍵字作為 Run 參數的形式來執行,這個關鍵字其實就是 Run的一個變量。 這個變量的值(也就是某個關鍵字)可以動態地從前一個關鍵字中獲得或是由命令行給出。 ***BuiltIn keywords --- Run Keyword If and Run Keyword Unless 當該關鍵字的表達式分別為邏輯真和假時,跟在其後的關鍵字將被執行,它們可以很好地用於創建類似 if/else 邏輯結構表達式。參見前面文檔的例子。 ***BuiltIn keywords --- Set Variable If 可以根據給定條件的邏輯真或假來設置某個變量的值。 ***還有幾個 BuiltIn \ keywords 允許用戶根據某個測試用例或測試集的失敗或成功來執行某個命名關鍵字。

Robot Framework - 入門與操作(5)