變量
2.5.1簡介
變量是Robot Framework的一個不可或缺的特性,它們可以在測試數據的大多數地方使用。最常見的是,它們用於測試用例表和關鍵字表中關鍵字的參數,但所有設置都允許在其值中使用變量。無法使用變量指定普通關鍵字名稱,但可以使用BuiltIn關鍵字 Run Keyword獲得相同的效果。
Robot Framework本身有兩種變量,scalars和lists,它們分別具有$ {SCALAR}和@ {LIST}的語法。除此之外,環境變量可以直接與語法%{VARIABLE}一起使用。
在以下情況下建議使用變量:
- 當字符串經常在測試數據中更改時。使用變量,您只需在一個地方進行這些更改。
- 創建獨立於系統和操作系統的測試數據時。使用變量而不是硬編碼字符串可以大大減輕。因為在啟動測試時可以從命令行設置變量,所以更改系統特定的變量很容易。這也有助於本地化測試,這通常涉及使用不同的字符串運行相同的測試。
- 當需要將字符串以外的對象作為關鍵字的參數時。
- 當不同的關鍵字,甚至在不同的測試庫中,需要進行通信。您可以將一個關鍵字的返回值分配給變量,並將其作為參數提供給另一個變量。
- 當測試數據中的值很長或者復雜時。例如,$ {URL}比http://long.domain.name:8080/path/to/service?foo=1&bar=2&zap=42短 。
如果在測試數據中使用了不存在的變量,則使用它的關鍵字將失敗。如果需要使用與變量相同的語法作為文字字符串,則必須使用反斜杠對其進行轉義,如\ $ {NAME}。
2.5.2變量類型
本節簡要介紹了不同的變量類型。變量的創建和使用將在以下小節中詳細介紹。
與關鍵字類似,Robot Framework變量不區分大小寫,並且忽略空格和下划線。但是,建議使用帶有全局變量的所有大寫字母(例如,${PATH}
或$ {TWO_WORDS}
)和帶有僅在某些測試用例或用戶關鍵字中可用的變量的小寫字母(例如,$ {my_var}
或 $ {myVar}
)。但更重要的是,應該始終如一地使用案例。
與使用類似變量語法的一些編程語言不同,花邊括號({和})在Robot Framework測試數據中是必需的。基本上,變量名稱可以在花括號之間包含任何字符。但是,建議僅使用a到z的字母字符,數字,下划線和空格,甚至是使用擴展變量語法的要求。
標量變量
在測試數據中使用標量變量時,它們將替換為分配給它們的值。雖然標量變量最常用於簡單字符串,但您可以為它們分配任何對象,包括列表。標量變量語法(例如 ${NAME}
)應該為大多數用戶所熟悉,因為它也用於shell腳本和Perl編程語言。
下面的例子說明了標量變量的用法。假設變量$ {GREET}
和$ {NAME}
可用並分別分配給字符串Hello
和world
,兩個示例測試用例都是等效的。
Test Case | Action | Argument | Argument |
---|---|---|---|
Strings | Log | Hello | |
Log | Hello, world!! | ||
Variables | Log | ${GREET} |
|
Log | ${GREET} , ${NAME} !! |
當標量變量用作測試數據單元格中的唯一值時,標量變量將替換為它具有的值。值可以是任何對象。當標量變量在測試數據單元格中使用其他任何內容(常量字符串或其他變量)時,其值首先轉換為Unicode字符串,然后連接到該單元格中的任何內容。將值轉換為字符串意味着調用對象的方法__unicode __(在Python中,str作為后備)或toString
(在Java中)。
下面的示例演示了單獨使用單元格中的變量或其他內容之間的區別。首先,讓我們假設我們將變量$ {STR}
設置為字符串Hello,world!
和$ {OBJ}
設置為以下Java對象的實例:
public class MyObj { public String toString() { return "Hi, tellus!"; } }
設置這兩個變量后,我們將得到以下測試數據:
Test Case | Action | Argument | Argument |
---|---|---|---|
Objects | KW 1 | ${STR} | |
KW 2 | ${OBJ} | ||
KW 3 | I said "${STR}" | ||
KW 4 | You said "${OBJ}" |
最后,當執行此測試數據時,不同的關鍵字會收到如下所述的參數:
- KW 1得到一個字符串
Hello,world!
- KW 2得到一個存儲變量$ {OBJ}的對象
- KW 3得到一個字符串
I said "Hello, world!"
- KW 4得到了一個字符串
You said "Hi, tellus!"
List變量
List變量是可以為其分配多個值的復合變量。簡而言之,它們總是列表,並且可以包含無限數量的條目(也可以是空列表)。列表變量的主要好處是它們允許您為更大的數據集指定名稱。雖然列表變量通常只包含字符串,但其他內容也是可能的。
在測試數據中使用列表變量時,列表的元素將作為新單元格插入測試數據中。因此,如果列表變量包含兩個元素,則包含列表變量的單元格將變為具有列表變量內容的兩個單元格。請注意,包含列表變量的單元格不應包含其他內容。列表變量語法@ {NAME}
是從Perl借來的。
假設列表變量@ {USER}
設置為值 ['robot','secret']
,則以下兩個測試用例是等效的。
Test Case | Action | User Name | Password |
---|---|---|---|
Strings | Login | robot | secret |
List Variable | Login | @{USER} |
訪問單個列表變量項
也可以使用語法@ {NAME} [i]
從列表變量訪問某個值,其中i是所選值的索引。索引從零開始,並且嘗試訪問索引太大的值會導致錯誤。以這種方式訪問的列表項可以與標量變量類似地使用:
Test Case | Action | Argument | Argument |
---|---|---|---|
Strings | Login | robot | secret |
Title Should Be | Welcome robot! | ||
List Variable | Login | @{USER} | |
Title Should Be | Welcome @{USER}[0]! |
使用列表變量作為標量變量
只需將@替換為$,就可以使用列表變量作為包含列表的標量變量。這使得可以將列表變量與列表相關的關鍵字一起使用,例如,來自BuiltIn和Collections庫。僅當沒有與列表變量具有相同基本名稱的標量變量時,此功能才有效。在這些情況下,標量變量具有優先權,而使用其值。
Test Case | Action | Argument | Argument | Argument |
---|---|---|---|---|
Example | @{items} = | Create List | first | second |
Length Should Be | ${items} | 2 | ||
Append To List | ${items} | third | ||
Length Should Be | ${items} | 3 | ||
Remove From List | ${items} | 1 | ||
Length Should Be | ${items} | 2 | ||
Log Many | @{items} |
使用列表變量和設置
列表變量只能用於某些設置。它們可以用於導入庫和變量文件的參數,但庫和變量文件名本身不能是列表變量。另外,使用setups和teardowns list變量不能用作關鍵字的名稱,但可以在參數中使用。使用標簽相關設置,可以自由使用。在不支持列表變量的位置可以使用標量變量。
Settings | Value | Value | Comment |
---|---|---|---|
Library | ExampleLibrary | @{LIB ARGS} | # This works |
Library | ${LIBRARY} | @{LIB ARGS} | # This works |
Library | @{NAME AND ARGS} | # This does not work | |
Suite Setup | Some Keyword | @{KW ARGS} | # This works |
Suite Setup | ${KEYWORD} | @{KW ARGS} | # This works |
Suite Setup | @{KEYWORD} | # This does not work | |
Default Tags | @{TAGS} | # This works |
環境變量
Robot Framework允許使用語法%{ENV_VAR_NAME}在測試數據中使用環境變量。它們僅限於字符串值。
在測試執行之前在操作系統中設置的環境變量在它期間可用,並且可以使用關鍵字Set Environment Variable創建新變量,或者使用關鍵字Delete Environment Variable刪除現有變量,這兩個變量都在OperatingSystem庫中可用 。由於環境變量是全局變量,因此在一個測試用例中設置的環境變量可以用在其后執行的其他測試用例中。但是,在測試執行后,對環境變量的更改無效。
Test Case | Action | Argument | Argument |
---|---|---|---|
Env Variables | Log | Current user: %{USER} | |
Run | %{JAVA_HOME}${/}javac |
Java系統屬性
使用Jython運行測試時,可以 使用與環境變量相同的語法來訪問Java系統屬性。如果存在環境變量和具有相同名稱的系統屬性,則將使用環境變量。Robot Framework 2.6中添加了對訪問Java系統屬性的支持。
Test Case | Action | Argument | Argument |
---|---|---|---|
System Properties | Log | %{user.name} running tests on %{os.name} |
2.5.3創建變量
變量可以從不同的來源開始存在,如下面的小節所述。
變量表
變量的最常見來源是測試用例文件和資源文件中的變量表。變量表很方便,因為它們允許在與其他測試數據相同的位置創建變量,並且所需的語法非常簡單。它們的主要缺點是它們只能將變量分配到字符串或字符串列表中。如果需要其他值類型,可變文件可能是更好的選擇。
創建標量變量
最簡單的變量賦值是將字符串設置為標量變量。這是通過在Variable表的第一列中給出變量名(包括 $ {})和在第二列中給出值來完成的。如果第二列為空,則將空字符串設置為值。此外,可以在值中使用已定義的變量。
Variable | Value | Value |
---|---|---|
${NAME} | Robot Framework | |
${VERSION} | 2.0 | |
${ROBOT} | ![]() |
在變量名之后使用等號=使得賦值變量稍微更明確也是可能的,但不是強制性的。
Variable | Value | Value |
---|---|---|
${NAME} = | Robot Framework | |
${VERSION} = | 2.0 |
創建列表變量
創建列表變量就像創建標量變量一樣簡單。同樣,變量名稱位於Variable表的第一列中,值位於后續列中。列表變量可以具有任意數量的值,從零開始,如果需要許多值,則可以將它們拆分為多行。
Variable | Value | Value | Value |
---|---|---|---|
@{NAMES} | Matti | Teppo | |
@{NAMES2} | @{NAMES} | Seppo | |
@{NOTHING} | |||
@{MANY} | one | two | three |
... | four | five | six |
... | seven |
變量文件
變量文件是創建不同類型變量的最強大機制。可以使用它們將變量分配給任何對象,並且它們還可以動態創建變量。在資源和變量文件一節中解釋了變量文件語法和使用變量文件。
在命令行中設置變量
可以使用--variable(-v)選項從命令行單獨設置變量,也可以使用帶有--variablefile(-V)選項的變量文件設置變量 。從命令行設置的變量全局可用於所有已執行的測試數據文件,並且它們還會覆蓋變量表和測試數據中導入的變量文件中具有相同名稱的可能變量。
設置單個變量的語法是--variable名稱:值,其中名稱是變量的名稱,而不 $ {}和價值是它的價值。可以多次使用此選項設置多個變量。只能使用此語法設置標量變量,它們只能獲取字符串值。許多特殊字符很難在命令行中表示,但可以使用--escape 選項進行轉義。
--variable EXAMPLE:value --variable HOST:localhost:7272 --variable USER:robot --variable ESCAPED:Qquotes_and_spacesQ --escape quot:Q --escape space:_
在上面的示例中,設置變量以便
$ {EXAMPLE}
獲取value
$ {HOST}
和$ {USER}
獲取localhost:7272
和robot
$ {ESCAPED}
獲取值“quotes and spaces”
從命令行獲取變量文件的基本語法是--variablefile path/to/variables.py
,並且將可變文件轉換為使用部分有更多細節。實際創建的變量取決於引用的變量文件中的變量。
如果從命令行給出變量文件和單個變量,則后者具有更高的優先級。
從關鍵字返回值
關鍵字的返回值也可以設置為變量。這允許甚至在不同的測試庫中不同關鍵字之間的通信。以下示例說明了簡單案例的語法:
Test Case | Action | Argument | Argument |
---|---|---|---|
Returning | ${x} = | Get X | an argument |
Log | We got ${x}! |
在上面的示例中,Get X
關鍵字返回的值首先設置為變量$ {x}
,然后由Log
關鍵字使用。此語法適用於關鍵字返回某些內容的所有情況,並且該變量設置為關鍵字返回的任何值。在變量名之后使用等號=不是強制性的,但建議使用,因為它使賦值更明確。
如果關鍵字返回列表,則還可以將返回值分配給多個標量變量和/或一個列表變量。從Robot Framework 2.5開始,這適用於所有類似列表的對象,但在此之前,只支持Python列表,元組和Java數組。
Test Case | Action | Argument | Argument | Argument |
---|---|---|---|---|
Return Multiple | ${scalar} = | Get 3 | ||
${a} | ${b} | ${c} = | Get 3 | |
${first} | @{rest} = | Get 3 | ||
@{list} = | Get 3 |
假設關鍵字Get 3返回列表 [1,2,3],則創建以下變量:
${scalar}
with the value[1, 2, 3]
${a}
,${b}
and${c}
with the values1
,2
, and3
${first}
with the value1
, and@{rest}
with the value[2, 3]
@{list}
with the value[1, 2, 3]
以這種方式設置的變量在其他方面與任何其他變量類似,但它們僅在測試用例或創建它們的關鍵字的范圍內可用。因此,例如,不可能在一個測試用例中設置變量並在另一個測試用例中使用它。這是因為,通常,自動化測試用例不應相互依賴,並且意外設置在別處使用的變量可能會導致難以調試的錯誤。如果確實需要在一個測試用例中設置變量並在另一個測試用例中使用它,則可以使用內置關鍵字,如下一節所述。
使用內置的Set Test/Suite/Global Variable關鍵字
Builtin庫具有一些關鍵字設置測試變量, 設置suite變量和設置全局變量可用於測試執行過程中動態地設置變量。如果變量已存在於新范圍內,則其值將被覆蓋,否則將創建新變量。
使用Set Suite Variable關鍵字設置的變量在當前執行的測試套件的范圍內隨處可用。因此,使用此關鍵字設置變量與使用測試數據文件中的變量表創建變量或從變量文件導入變量具有相同的效果。其他測試套件(包括可能的子測試套件)不會看到使用此關鍵字設置的變量。
使用Set Global Variable關鍵字設置的變量在設置后執行的所有測試用例和套件中全局可用。因此,使用此關鍵字設置變量與使用選項--variable或 --variablefile 從命令行創建具有相同的效果 。由於此關鍵字可以在任何地方更改變量,因此應謹慎使用。
2.5.4內置變量
Robot Framework提供了一些可自動使用的內置變量。
操作系統變量
與操作系統相關的內置變量使測試數據與操作系統無關。
變量 | 說明 |
---|---|
$ {CURDIR} | 測試數據文件所在目錄的絕對路徑。此變量區分大小寫。 |
$ {TEMPDIR} | 系統臨時目錄的絕對路徑。在類UNIX系統中,這通常是/ tmp,在Windows c:\Documents and Settings<user>\Local Settings\Temp中。 |
$ {EXECDIR} | 從中開始測試執行的目錄的絕對路徑。Robot Framework 2.1中的新功能。 |
$ {/} | 系統目錄路徑分隔符。/在類UNIX系統中,\在Windows中。 |
$ {:} | 系統路徑元素分隔符。:在類UNIX系統中; 在Windows中。 |
Test Case | Action | Argument | Argument |
---|---|---|---|
Example | Create File | ${CURDIR}${/}input.data |
Some text here |
Set Environment Variable | CLASSPATH | ${TEMPDIR}${:}${TEMPDIR}${/}foo.jar |
數字變量
變量語法可用於創建整數和浮點數,如下例所示。當關鍵字期望獲得實際數字而不是看起來像數字的字符串作為參數時,這非常有用。
Test Case | Action | Argument | Argument | Comment |
---|---|---|---|---|
Example 1A | Connect | example.com | 80 | # Connect gets two strings as arguments |
Example 1B | Connect | example.com | ${80} | # Connect gets a string and an integer |
Example 2 | Do X | ${3.14} | ${-1e-4} | # Do X gets floating point numbers 3.14 and -0.0001 |
從Robot Framework 2.6開始,也可以分別使用0b,0o 和0x前綴從二進制,八進制和十六進制值創建整數。語法是區分大小寫的。
Test Case | Action | Argument | Argument |
---|---|---|---|
Example | Should Be Equal | ${0b1011} | ${11} |
Should Be Equal | ${0o10} | ${8} | |
Should Be Equal | ${0xff} | ${255} | |
Should Be Equal | ${0B1010} | ${0XA} |
布爾值和None/null變量
此外,布爾值和Python None
和Java null
可以使用與數字類似的變量語法創建。
Test Case | Action | Argument | Argument | Comment |
---|---|---|---|---|
Boolean | Set Status | ${true} | # Set Status gets Boolean true as an argument | |
Create Y | something | ${false} | # Create Y gets a string and Boolean false | |
None | Do XYZ | ${None} | # Do XYZ gets Python None as an argument | |
Null | ${ret} = | Get Value | arg | # Checking that Get Value returns Java null |
Should Be Equal | ${ret} | ${null} |
這些變量不區分大小寫,例如$ {True}
和$ {true}
是等效的。此外,$ {None}
和$ {null}
是同義詞,因為在Jython解釋器上運行測試時,Jython會在必要時自動將None和 null轉換為正確的格式。
空格和Empty變量
可以分別使用變量 {EMPTY}創建空格和空字符串 。例如,當需要時,這些變量是有用的使用反斜杠轉義空格或空單元格時。如果需要多個空格,則可以使用擴展變量語法,如 $ {SPACE * 5}。在下面的示例中,Should Be Equal關鍵字獲取相同的參數,但使用變量的參數比使用反斜杠的參數更容易理解。
Test Case | Action | Argument | Argument |
---|---|---|---|
One Space | Should Be Equal | ${SPACE} | \ \ |
Four Spaces | Should Be Equal | ${SPACE * 4} | \ \ \ \ \ |
Ten Spaces | Should Be Equal | ${SPACE * 10} | \ \ \ \ \ \ \ \ \ \ \ |
Quoted Space | Should Be Equal | "${SPACE}" | " " |
Quoted Spaces | Should Be Equal | "${SPACE * 2}" | " \ " |
Empty | Should Be Equal | ${EMPTY} | \ |
自動變量
一些自動變量也可用於測試數據。這些變量在測試執行期間可以具有不同的值,並且其中一些變量甚至不可用。
變量 | 說明 | 可得到 |
---|---|---|
$ {TEST NAME} | 當前測試用例的名稱。 | 測試用例 |
@ {TEST TAGS} | 按字母順序包含當前測試用例的標記。 | 測試用例 |
$ {TEST DOCUMENTATION} | 當前測試用例的文檔。 | 測試用例 |
$ {TEST STATUS} | 當前測試用例的狀態,PASS或FAIL。 | 測試拆解 |
$ {TEST MESSAGE} | 當前測試用例的消息。 | 測試拆解 |
$ {PREV TEST NAME} | 上一個測試用例的名稱,如果尚未執行任何測試,則為空字符串。 | 到處 |
$ {PREV TEST STATUS} | 上一個測試用例的狀態:PASS,FAIL或未執行測試時的空字符串。 | 到處 |
$ {PREV TEST MESSAGE} | 上一個測試用例的可能錯誤消息。 | 到處 |
$ {SUITE NAME} | 當前測試套件的全名。 | 到處 |
$ {SUITE SOURCE} | 套件文件或目錄的絕對路徑。Robot Framework 2.5中的新功能。 | 到處 |
$ {SUITE DOCUMENTATION} | 當前測試套件的文檔。 | 到處 |
$ {SUITE STATUS} | 當前測試套件的狀態,PASS或FAIL。 | suite |
$ {SUITE MESSAGE} | 當前測試套件的完整消息,包括統計信息。 | suite |
$ {KEYWORD STATUS} | 當前關鍵字的狀態,PASS或FAIL。Robot Framework 2.7中的新功能 | 關鍵詞拆解 |
$ {KEYWORD MESSAGE} | 當前關鍵字的可能錯誤消息。Robot Framework 2.7中的新功能 | 關鍵詞拆解 |
$ {OUTPUT FILE} | 輸出文件的絕對路徑。 | 到處 |
$ {LOG FILE} | 未創建日志文件時,日志文件的絕對路徑或字符串NONE。 | 到處 |
$ {REPORT FILE} | 未創建報告時報告文件的絕對路徑或字符串NONE。 | 到處 |
$ {DEBUG FILE} | 未創建調試文件時,調試文件的絕對路徑或字符串NONE。 | 到處 |
$ {OUTPUT DIR} | 輸出目錄的絕對路徑。 | 到處 |
2.5.5變量優先級和范圍
來自不同來源的變量具有不同的優先級,並且可以在不同的范圍內使用。
變量優先級
命令行中的變量
在命令行中設置的變量具有在實際測試執行開始之前可以設置的所有變量的最高優先級。它們覆蓋在測試用例文件中的變量表中以及在測試數據中導入的資源和變量文件中創建的可能變量。
單獨設置變量(--variable option)會覆蓋使用變量文件設置的變量(--variablefile選項)。如果多次指定相同的單個變量,則最后指定的變量將覆蓋之前的變量。這允許在啟動腳本中設置變量的默認值,並從命令行覆蓋它們。但請注意,如果多個變量文件具有相同的變量,則首先指定的文件中的變量具有最高優先級。
測試用例文件中的變量表
使用測試用例文件中的Variable表創建的變量可用於該文件中的所有測試用例。這些變量會覆蓋導入的資源和變量文件中具有相同名稱的可能變量。
在變量表中創建的變量在創建它們的文件中的所有其他表中都可用。這意味着它們也可以在Setting表中使用,例如,用於從資源和變量文件導入更多變量。
導入的資源和變量文件
從資源和變量文件導入的變量具有在測試數據中創建的所有變量的最低優先級。資源文件和變量文件中的變量具有相同的優先級。如果多個資源和/或變量文件具有相同的變量,則首先導入的文件中的變量將被使用。
如果資源文件導入資源文件或變量文件,則其自己的Variable表中的變量具有比它導入的變量更高的優先級。所有這些變量都可用於導入此資源文件的文件。
請注意,從資源和變量文件導入的變量在導入它們的文件的變量表中不可用。這是因為在導入資源文件和變量文件的設置表之前處理變量表。
在測試執行期間設置的變量
在測試執行期間使用關鍵字或內置 關鍵字的返回值設置的變量Set Test / Suite / Global Variable始終覆蓋設置范圍內的可能現有變量。從某種意義上說,它們具有最高優先級,但另一方面它們不會影響它們所定義范圍之外的變量。
內置變量
內置變量(如
{TEST_NAME}) 具有所有變量的最高優先級。它們不能使用Variable表或命令行覆蓋,但即使它們也可以在測試執行期間重置。此規則的一個例外是數字變量,如果沒有找到變量,則動態解析。因此可以覆蓋它們,但這通常是一個壞主意。另外$ {CURDIR} 是特殊的,因為它在測試數據處理期間已被替換。
變量作用范圍
根據創建的位置和方式,變量可以具有全局,測試套件,測試用例或用戶關鍵字范圍。
全局變量
全局變量在測試數據中隨處可用。這些變量通常使用 --variable和--variablefile選項從命令行設置,但也可以使用BuiltIn關鍵字Set Global Variable在測試數據中的任何位置創建新的全局變量或更改現有變量。此外,內置變量也是全局變量。
建議對所有全局變量使用大寫字母。
測試套件范圍
具有測試套件范圍的變量可在測試套件中的任何位置使用,可在其中定義或導入。它們可以在變量表中創建,從資源和變量文件導入,或者在測試執行期間使用BuiltIn關鍵字 Set Suite Variable進行設置。
測試套件范圍不是遞歸的,這意味着更高級別測試套件中的可用變量在低級套件中不可用。如有必要,可以使用資源和變量文件來共享變量。
由於這些變量可以在使用它們的測試套件中被視為全局變量,因此建議使用大寫字母。
測試用例范圍
在測試用例中根據關鍵字的返回值創建的變量具有測試用例范圍,並且僅在該測試用例中可用。創建它們的另一種可能性是在該特定測試用例中的任何位置使用BuiltIn關鍵字 Set Test Variable。測試用例變量是本地的,應該使用小寫字母。
用戶關鍵字范圍
用戶關鍵字從傳遞給它們的參數中獲取自己的變量, 並從它們使用的關鍵字返回值。這些變量也是本地的,應該使用小寫字母。
2.5.6高級變量功能
擴展變量語法
擴展變量語法可以與設置為標量變量的對象一起使用。它允許訪問對象的屬性(例如, $ {obj.name}
或$ {obj.some_attr}
),甚至可以調用其方法(例如,$ {obj.get_name()}
或 $ {obj.getSomething ('arg')}
)。
擴展變量語法是一個強大的功能,但應謹慎使用。相反,訪問屬性通常不是問題,因為具有多個屬性的對象的一個變量通常比具有多個變量更好。另一方面,調用方法,特別是當它們與參數一起使用時,可能會使測試數據變得復雜。如果發生這種情況,建議將代碼移動到測試庫中。
擴展變量語法的最常見用法在下面的示例中說明。首先假設我們有以下變量文件 和測試用例:
class MyObject: def __init__(self, name): self.name = name def eat(self, what): return '%s eats %s' % (self.name, what) def __str__(self): return self.name OBJECT = MyObject('Robot') DICTIONARY = { 1: 'one', 2: 'two', 3: 'three'}
Test Case | Action | Argument | Argument |
---|---|---|---|
Example | KW 1 | ${OBJECT.name} | |
KW 2 | ${OBJECT.eat('Cucumber')} | ||
KW 3 | ${DICTIONARY[2]} |
執行此測試數據時,關鍵字將獲取參數,如下所述:
- KW 1 gets string
Robot
- KW 2 gets string
Robot eats Cucumber
- KW 3 gets string
two
擴展變量語法按以下順序計算:
使用完整變量名稱搜索變量。僅在未找到匹配變量時才評估擴展變量語法。
創建基本變量的真實名稱。名稱的主體由所有的字符后 {OBJECT.name}
和DICTIONARY在
$ {DICTIONARY [2]}` )。
搜索與主體匹配的變量。如果沒有匹配項,則引發異常並且測試用例失敗。
大括號內的表達式被計算為Python表達式,因此基本變量名稱將替換為其值。如果由於語法無效而導致評估失敗或查詢的屬性不存在,則會引發異常並且測試失敗。
整個擴展變量將替換為評估返回的值。
如果使用的對象是使用Java實現的,則擴展變量語法允許您使用所謂的bean屬性訪問屬性。實質上,這意味着如果你有一個將 getName
方法設置為變量$ {OBJ}
的對象,那么語法$ {OBJ.name}
相當於但比$ {OBJ.getName()}
更清晰 。因此,上一個示例中使用的Python對象可以替換為以下Java實現:
public class MyObject: private String name; public MyObject(String name) { name = name; } public String getName() { return name; } public String eat(String what) { return name + " eats " + what; } public String toString() { return name; } }
許多標准Python對象(包括字符串和數字)都具有可以顯式或隱式使用擴展變量語法的方法。有時這可能非常有用並且減少了設置臨時變量的需要,但是過度使用它並創建非常神秘的測試數據也很容易。以下示例顯示了幾個相當不錯的用法。
Test Case | Action | Argument | Argument |
---|---|---|---|
String | ${string} = | Set Variable | abc |
Log | ${string.upper()} | # Logs 'ABC' | |
Log | ${string * 2} | # Logs 'abcabc' | |
Number | ${number} = | Set Variable | ${-2} |
Log | ${number * 10} | # Logs -20 | |
Log | ${number.abs()} | # Logs 2 |
請注意,即使在普通Python代碼中建議使用abs(number)
而不是 數字.__ abs __()
,使用 $ {abs(number)}
也不起作用。這是因為變量名必須位於擴展語法的開頭。 在這樣的測試數據中使用__xxx__
方法已經有點疑問了,通常最好將這種邏輯移到測試庫中。