Robot Framework官方教程(六)變量

Robot Framework官方教程(一)入門
Robot Framework官方教程(二)測試數(shù)據(jù)語法
Robot Framework官方教程(三)創(chuàng)建測試用例
Robot Framework官方教程(四)創(chuàng)建測試套件
Robot Framework官方教程(五)使用測試庫
Robot Framework官方教程(六)變量
Robot Framework官方教程(七)創(chuàng)建用戶關(guān)鍵字
Robot Framework官方教程(八) 資源和變量文件
Robot Framework官方教程(九) 執(zhí)行測試用例
Robot Framework官方教程(十)擴(kuò)展RobotFramework框架

變量

2.5.1簡介

變量是Robot Framework的一個(gè)不可或缺的特性,它們可以在測試數(shù)據(jù)的大多數(shù)地方使用。最常見的是,它們用于測試用例表和關(guān)鍵字表中關(guān)鍵字的參數(shù),但所有設(shè)置都允許在其值中使用變量。無法使用變量指定普通關(guān)鍵字名稱,但可以使用BuiltIn關(guān)鍵字 Run Keyword獲得相同的效果。

Robot Framework本身有兩種變量,scalarslists,它們分別具有$ {SCALAR}和@ {LIST}的語法。除此之外,環(huán)境變量可以直接與語法%{VARIABLE}一起使用。

在以下情況下建議使用變量:

  • 當(dāng)字符串經(jīng)常在測試數(shù)據(jù)中更改時(shí)。使用變量,您只需在一個(gè)地方進(jìn)行這些更改。
  • 創(chuàng)建獨(dú)立于系統(tǒng)和操作系統(tǒng)的測試數(shù)據(jù)時(shí)。使用變量而不是硬編碼字符串可以大大減輕。因?yàn)樵趩?dòng)測試時(shí)可以從命令行設(shè)置變量,所以更改系統(tǒng)特定的變量很容易。這也有助于本地化測試,這通常涉及使用不同的字符串運(yùn)行相同的測試。
  • 當(dāng)需要將字符串以外的對象作為關(guān)鍵字的參數(shù)時(shí)。
  • 當(dāng)不同的關(guān)鍵字,甚至在不同的測試庫中,需要進(jìn)行通信。您可以將一個(gè)關(guān)鍵字的返回值分配給變量,并將其作為參數(shù)提供給另一個(gè)變量。
  • 當(dāng)測試數(shù)據(jù)中的值很長或者復(fù)雜時(shí)。例如,$ {URL}比http://long.domain.name:8080/path/to/service?foo=1&bar=2&zap=42短 。

如果在測試數(shù)據(jù)中使用了不存在的變量,則使用它的關(guān)鍵字將失敗。如果需要使用與變量相同的語法作為文字字符串,則必須使用反斜杠對其進(jìn)行轉(zhuǎn)義,如\ $ {NAME}。

2.5.2變量類型

本節(jié)簡要介紹了不同的變量類型。變量的創(chuàng)建和使用將在以下小節(jié)中詳細(xì)介紹。

與關(guān)鍵字類似,Robot Framework變量不區(qū)分大小寫,并且忽略空格和下劃線。但是,建議使用帶有全局變量的所有大寫字母(例如,${PATH}$ {TWO_WORDS})和帶有僅在某些測試用例或用戶關(guān)鍵字中可用的變量的小寫字母(例如,$ {my_var}$ {myVar})。但更重要的是,應(yīng)該始終如一地使用案例。

與使用類似變量語法的一些編程語言不同,花邊括號({和})在Robot Framework測試數(shù)據(jù)中是必需的?;旧?,變量名稱可以在花括號之間包含任何字符。但是,建議僅使用a到z的字母字符,數(shù)字,下劃線和空格,甚至是使用擴(kuò)展變量語法的要求。

標(biāo)量變量

在測試數(shù)據(jù)中使用標(biāo)量變量時(shí),它們將替換為分配給它們的值。雖然標(biāo)量變量最常用于簡單字符串,但您可以為它們分配任何對象,包括列表。標(biāo)量變量語法(例如 ${NAME})應(yīng)該為大多數(shù)用戶所熟悉,因?yàn)樗灿糜趕hell腳本和Perl編程語言。

下面的例子說明了標(biāo)量變量的用法。假設(shè)變量$ {GREET}$ {NAME}可用并分別分配給字符串Helloworld,兩個(gè)示例測試用例都是等效的。

Test Case Action Argument Argument
Strings Log Hello
Log Hello, world!!
Variables Log ${GREET}
Log ${GREET}, ${NAME}!!

當(dāng)標(biāo)量變量用作測試數(shù)據(jù)單元格中的唯一值時(shí),標(biāo)量變量將替換為它具有的值。值可以是任何對象。當(dāng)標(biāo)量變量在測試數(shù)據(jù)單元格中使用其他任何內(nèi)容(常量字符串或其他變量)時(shí),其值首先轉(zhuǎn)換為Unicode字符串,然后連接到該單元格中的任何內(nèi)容。將值轉(zhuǎn)換為字符串意味著調(diào)用對象的方法__unicode __(在Python中,str作為后備)或toString(在Java中)。

下面的示例演示了單獨(dú)使用單元格中的變量或其他內(nèi)容之間的區(qū)別。首先,讓我們假設(shè)我們將變量$ {STR}設(shè)置為字符串Hello,world!$ {OBJ}設(shè)置為以下Java對象的實(shí)例:

public class MyObj {
    public String toString() {
        return "Hi, tellus!";
    }
}

設(shè)置這兩個(gè)變量后,我們將得到以下測試數(shù)據(jù):

Test Case Action Argument Argument
Objects KW 1 ${STR}
KW 2 ${OBJ}
KW 3 I said "${STR}"
KW 4 You said "${OBJ}"

最后,當(dāng)執(zhí)行此測試數(shù)據(jù)時(shí),不同的關(guān)鍵字會(huì)收到如下所述的參數(shù):

  • KW 1得到一個(gè)字符串 Hello,world!
  • KW 2得到一個(gè)存儲(chǔ)變量$ {OBJ}的對象
  • KW 3得到一個(gè)字符串 I said "Hello, world!"
  • KW 4得到了一個(gè)字符串 You said "Hi, tellus!"

List變量

List變量是可以為其分配多個(gè)值的復(fù)合變量。簡而言之,它們總是列表,并且可以包含無限數(shù)量的條目(也可以是空列表)。列表變量的主要好處是它們允許您為更大的數(shù)據(jù)集指定名稱。雖然列表變量通常只包含字符串,但其他內(nèi)容也是可能的。

在測試數(shù)據(jù)中使用列表變量時(shí),列表的元素將作為新單元格插入測試數(shù)據(jù)中。因此,如果列表變量包含兩個(gè)元素,則包含列表變量的單元格將變?yōu)榫哂辛斜碜兞績?nèi)容的兩個(gè)單元格。請注意,包含列表變量的單元格不應(yīng)包含其他內(nèi)容。列表變量語法@ {NAME}是從Perl借來的。

假設(shè)列表變量@ {USER}設(shè)置為值 ['robot','secret'],則以下兩個(gè)測試用例是等效的。

Test Case Action User Name Password
Strings Login robot secret
List Variable Login @{USER}

訪問單個(gè)列表變量項(xiàng)
也可以使用語法@ {NAME} [i]從列表變量訪問某個(gè)值,其中i是所選值的索引。索引從零開始,并且嘗試訪問索引太大的值會(huì)導(dǎo)致錯(cuò)誤。以這種方式訪問??的列表項(xiàng)可以與標(biāo)量變量類似地使用:

Test Case Action Argument Argument
Strings Login robot secret
Title Should Be Welcome robot!
List Variable Login @{USER}
Title Should Be Welcome @{USER}[0]!

使用列表變量作為標(biāo)量變量
只需將@替換為$,就可以使用列表變量作為包含列表的標(biāo)量變量。這使得可以將列表變量與列表相關(guān)的關(guān)鍵字一起使用,例如,來自BuiltInCollections庫。僅當(dāng)沒有與列表變量具有相同基本名稱的標(biāo)量變量時(shí),此功能才有效。在這些情況下,標(biāo)量變量具有優(yōu)先權(quán),而使用其值。

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}

使用列表變量和設(shè)置

列表變量只能用于某些設(shè)置。它們可以用于導(dǎo)入庫和變量文件的參數(shù),但庫和變量文件名本身不能是列表變量。另外,使用setups和teardowns list變量不能用作關(guān)鍵字的名稱,但可以在參數(shù)中使用。使用標(biāo)簽相關(guān)設(shè)置,可以自由使用。在不支持列表變量的位置可以使用標(biāo)量變量。

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

環(huán)境變量

Robot Framework允許使用語法%{ENV_VAR_NAME}在測試數(shù)據(jù)中使用環(huán)境變量。它們僅限于字符串值。

在測試執(zhí)行之前在操作系統(tǒng)中設(shè)置的環(huán)境變量在它期間可用,并且可以使用關(guān)鍵字Set Environment Variable創(chuàng)建新變量,或者使用關(guān)鍵字Delete Environment Variable刪除現(xiàn)有變量,這兩個(gè)變量都在OperatingSystem庫中可用 。由于環(huán)境變量是全局變量,因此在一個(gè)測試用例中設(shè)置的環(huán)境變量可以用在其后執(zhí)行的其他測試用例中。但是,在測試執(zhí)行后,對環(huán)境變量的更改無效。

Test Case Action Argument Argument
Env Variables Log Current user: %{USER}
Run %{JAVA_HOME}${/}javac

Java系統(tǒng)屬性

使用Jython運(yùn)行測試時(shí),可以 使用與環(huán)境變量相同的語法來訪問Java系統(tǒng)屬性。如果存在環(huán)境變量和具有相同名稱的系統(tǒng)屬性,則將使用環(huán)境變量。Robot Framework 2.6中添加了對訪問Java系統(tǒng)屬性的支持。

Test Case Action Argument Argument
System Properties Log %{user.name} running tests on %{os.name}

2.5.3創(chuàng)建變量

變量可以從不同的來源開始存在,如下面的小節(jié)所述。

變量表

變量的最常見來源是測試用例文件資源文件中的變量表。變量表很方便,因?yàn)樗鼈冊试S在與其他測試數(shù)據(jù)相同的位置創(chuàng)建變量,并且所需的語法非常簡單。它們的主要缺點(diǎn)是它們只能將變量分配到字符串或字符串列表中。如果需要其他值類型,可變文件可能是更好的選擇。

創(chuàng)建標(biāo)量變量

最簡單的變量賦值是將字符串設(shè)置為標(biāo)量變量。這是通過在Variable表的第一列中給出變量名(包括 $ {})和在第二列中給出值來完成的。如果第二列為空,則將空字符串設(shè)置為值。此外,可以在值中使用已定義的變量。

Variable Value Value
${NAME} Robot Framework
${VERSION} 2.0
${ROBOT} {NAME}{VERSION}

在變量名之后使用等號=使得賦值變量稍微更明確也是可能的,但不是強(qiáng)制性的。

Variable Value Value
${NAME} = Robot Framework
${VERSION} = 2.0

創(chuàng)建列表變量
創(chuàng)建列表變量就像創(chuàng)建標(biāo)量變量一樣簡單。同樣,變量名稱位于Variable表的第一列中,值位于后續(xù)列中。列表變量可以具有任意數(shù)量的值,從零開始,如果需要許多值,則可以將它們拆分為多行。

Variable Value Value Value
@{NAMES} Matti Teppo
@{NAMES2} @{NAMES} Seppo
@{NOTHING}
@{MANY} one two three
... four five six
... seven

變量文件

變量文件是創(chuàng)建不同類型變量的最強(qiáng)大機(jī)制。可以使用它們將變量分配給任何對象,并且它們還可以動(dòng)態(tài)創(chuàng)建變量。在資源和變量文件一節(jié)中解釋了變量文件語法和使用變量文件。

在命令行中設(shè)置變量

可以使用--variable(-v)選項(xiàng)從命令行單獨(dú)設(shè)置變量,也可以使用帶有--variablefile(-V)選項(xiàng)的變量文件設(shè)置變量 。從命令行設(shè)置的變量全局可用于所有已執(zhí)行的測試數(shù)據(jù)文件,并且它們還會(huì)覆蓋變量表和測試數(shù)據(jù)中導(dǎo)入的變量文件中具有相同名稱的可能變量。

設(shè)置單個(gè)變量的語法是--variable名稱:值,其中名稱是變量的名稱,而不 $ {}和價(jià)值是它的價(jià)值。可以多次使用此選項(xiàng)設(shè)置多個(gè)變量。只能使用此語法設(shè)置標(biāo)量變量,它們只能獲取字符串值。許多特殊字符很難在命令行中表示,但可以使用--escape 選項(xiàng)進(jìn)行轉(zhuǎn)義。

--variable EXAMPLE:value
--variable HOST:localhost:7272 --variable USER:robot
--variable ESCAPED:Qquotes_and_spacesQ --escape quot:Q --escape space:_

在上面的示例中,設(shè)置變量以便

  • $ {EXAMPLE}獲取 value
  • $ {HOST}$ {USER}獲取localhost:7272robot
  • $ {ESCAPED}獲取值“quotes and spaces”

從命令行獲取變量文件的基本語法是--variablefile path/to/variables.py,并且將可變文件轉(zhuǎn)換為使用部分有更多細(xì)節(jié)。實(shí)際創(chuàng)建的變量取決于引用的變量文件中的變量。

如果從命令行給出變量文件和單個(gè)變量,則后者具有更高的優(yōu)先級

從關(guān)鍵字返回值

關(guān)鍵字的返回值也可以設(shè)置為變量。這允許甚至在不同的測試庫中不同關(guān)鍵字之間的通信。以下示例說明了簡單案例的語法:

Test Case Action Argument Argument
Returning ${x} = Get X an argument
Log We got ${x}!

在上面的示例中,Get X關(guān)鍵字返回的值首先設(shè)置為變量$ {x},然后由Log 關(guān)鍵字使用。此語法適用于關(guān)鍵字返回某些內(nèi)容的所有情況,并且該變量設(shè)置為關(guān)鍵字返回的任何值。在變量名之后使用等號=不是強(qiáng)制性的,但建議使用,因?yàn)樗官x值更明確。

如果關(guān)鍵字返回列表,則還可以將返回值分配給多個(gè)標(biāo)量變量和/或一個(gè)列表變量。從Robot Framework 2.5開始,這適用于所有類似列表的對象,但在此之前,只支持Python列表,元組和Java數(shù)組。

Test Case Action Argument Argument Argument
Return Multiple ${scalar} = Get 3
${a} $ ${c} = Get 3
${first} @{rest} = Get 3
@{list} = Get 3

假設(shè)關(guān)鍵字Get 3返回列表 [1,2,3],則創(chuàng)建以下變量:

  • ${scalar}with the value[1, 2, 3]
  • ${a},$ and ${c} with the values 1, 2, and 3
  • ${first} with the value1, and @{rest} with the value [2, 3]
  • @{list} with the value[1, 2, 3]

以這種方式設(shè)置的變量在其他方面與任何其他變量類似,但它們僅在測試用例或創(chuàng)建它們的關(guān)鍵字的范圍內(nèi)可用。因此,例如,不可能在一個(gè)測試用例中設(shè)置變量并在另一個(gè)測試用例中使用它。這是因?yàn)?,通常,自?dòng)化測試用例不應(yīng)相互依賴,并且意外設(shè)置在別處使用的變量可能會(huì)導(dǎo)致難以調(diào)試的錯(cuò)誤。如果確實(shí)需要在一個(gè)測試用例中設(shè)置變量并在另一個(gè)測試用例中使用它,則可以使用內(nèi)置關(guān)鍵字,如下一節(jié)所述。

使用內(nèi)置的Set Test/Suite/Global Variable關(guān)鍵字

Builtin庫具有一些關(guān)鍵字設(shè)置測試變量, 設(shè)置suite變量和設(shè)置全局變量可用于測試執(zhí)行過程中動(dòng)態(tài)地設(shè)置變量。如果變量已存在于新范圍內(nèi),則其值將被覆蓋,否則將創(chuàng)建新變量。

使用Set Suite Variable關(guān)鍵字設(shè)置的變量在當(dāng)前執(zhí)行的測試套件的范圍內(nèi)隨處可用。因此,使用此關(guān)鍵字設(shè)置變量與使用測試數(shù)據(jù)文件中的變量表創(chuàng)建變量或從變量文件導(dǎo)入變量具有相同的效果。其他測試套件(包括可能的子測試套件)不會(huì)看到使用此關(guān)鍵字設(shè)置的變量。

使用Set Global Variable關(guān)鍵字設(shè)置的變量在設(shè)置后執(zhí)行的所有測試用例和套件中全局可用。因此,使用此關(guān)鍵字設(shè)置變量與使用選項(xiàng)--variable或 --variablefile 從命令行創(chuàng)建具有相同的效果 。由于此關(guān)鍵字可以在任何地方更改變量,因此應(yīng)謹(jǐn)慎使用。

2.5.4內(nèi)置變量

Robot Framework提供了一些可自動(dòng)使用的內(nèi)置變量。

操作系統(tǒng)變量

與操作系統(tǒng)相關(guān)的內(nèi)置變量使測試數(shù)據(jù)與操作系統(tǒng)無關(guān)。

變量 說明
$ {CURDIR} 測試數(shù)據(jù)文件所在目錄的絕對路徑。此變量區(qū)分大小寫。
$ {TEMPDIR} 系統(tǒng)臨時(shí)目錄的絕對路徑。在類UNIX系統(tǒng)中,這通常是/ tmp,在Windows c:\Documents and Settings<user>\Local Settings\Temp中。
$ {EXECDIR} 從中開始測試執(zhí)行的目錄的絕對路徑。Robot Framework 2.1中的新功能。
$ {/} 系統(tǒng)目錄路徑分隔符。/在類UNIX系統(tǒng)中,\在Windows中。
$ {:} 系統(tǒng)路徑元素分隔符。:在類UNIX系統(tǒng)中; 在Windows中。
Test Case Action Argument Argument
Example Create File ${CURDIR}${/}input.data Some text here
Set Environment Variable CLASSPATH ${TEMPDIR}${:}${TEMPDIR}${/}foo.jar

數(shù)字變量

變量語法可用于創(chuàng)建整數(shù)和浮點(diǎn)數(shù),如下例所示。當(dāng)關(guān)鍵字期望獲得實(shí)際數(shù)字而不是看起來像數(shù)字的字符串作為參數(shù)時(shí),這非常有用。

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前綴從二進(jìn)制,八進(jìn)制和十六進(jìn)制值創(chuàng)建整數(shù)。語法是區(qū)分大小寫的。

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可以使用與數(shù)字類似的變量語法創(chuàng)建。

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}

這些變量不區(qū)分大小寫,例如$ {True}$ {true}是等效的。此外,$ {None}$ {null}是同義詞,因?yàn)樵贘ython解釋器上運(yùn)行測試時(shí),Jython會(huì)在必要時(shí)自動(dòng)將None和 null轉(zhuǎn)換為正確的格式。

空格和Empty變量

可以分別使用變量{SPACE}和 {EMPTY}創(chuàng)建空格和空字符串 。例如,當(dāng)需要時(shí),這些變量是有用的使用反斜杠轉(zhuǎn)義空格或空單元格時(shí)。如果需要多個(gè)空格,則可以使用擴(kuò)展變量語法,如 $ {SPACE * 5}。在下面的示例中,Should Be Equal關(guān)鍵字獲取相同的參數(shù),但使用變量的參數(shù)比使用反斜杠的參數(shù)更容易理解。

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} \

自動(dòng)變量

一些自動(dòng)變量也可用于測試數(shù)據(jù)。這些變量在測試執(zhí)行期間可以具有不同的值,并且其中一些變量甚至不可用。

變量 說明 可得到
$ {TEST NAME} 當(dāng)前測試用例的名稱。 測試用例
@ {TEST TAGS} 按字母順序包含當(dāng)前測試用例的標(biāo)記。 測試用例
$ {TEST DOCUMENTATION} 當(dāng)前測試用例的文檔。 測試用例
$ {TEST STATUS} 當(dāng)前測試用例的狀態(tài),PASS或FAIL。 測試拆解
$ {TEST MESSAGE} 當(dāng)前測試用例的消息。 測試拆解
$ {PREV TEST NAME} 上一個(gè)測試用例的名稱,如果尚未執(zhí)行任何測試,則為空字符串。 到處
$ {PREV TEST STATUS} 上一個(gè)測試用例的狀態(tài):PASS,F(xiàn)AIL或未執(zhí)行測試時(shí)的空字符串。 到處
$ {PREV TEST MESSAGE} 上一個(gè)測試用例的可能錯(cuò)誤消息。 到處
$ {SUITE NAME} 當(dāng)前測試套件的全名。 到處
$ {SUITE SOURCE} 套件文件或目錄的絕對路徑。Robot Framework 2.5中的新功能。 到處
$ {SUITE DOCUMENTATION} 當(dāng)前測試套件的文檔。 到處
$ {SUITE STATUS} 當(dāng)前測試套件的狀態(tài),PASS或FAIL。 suite
$ {SUITE MESSAGE} 當(dāng)前測試套件的完整消息,包括統(tǒng)計(jì)信息。 suite
$ {KEYWORD STATUS} 當(dāng)前關(guān)鍵字的狀態(tài),PASS或FAIL。Robot Framework 2.7中的新功能 關(guān)鍵詞拆解
$ {KEYWORD MESSAGE} 當(dāng)前關(guān)鍵字的可能錯(cuò)誤消息。Robot Framework 2.7中的新功能 關(guān)鍵詞拆解
$ {OUTPUT FILE} 輸出文件的絕對路徑。 到處
$ {LOG FILE} 未創(chuàng)建日志文件時(shí),日志文件的絕對路徑或字符串NONE。 到處
$ {REPORT FILE} 未創(chuàng)建報(bào)告時(shí)報(bào)告文件的絕對路徑或字符串NONE。 到處
$ {DEBUG FILE} 未創(chuàng)建調(diào)試文件時(shí),調(diào)試文件的絕對路徑或字符串NONE。 到處
$ {OUTPUT DIR} 輸出目錄的絕對路徑。 到處

2.5.5變量優(yōu)先級和范圍

來自不同來源的變量具有不同的優(yōu)先級,并且可以在不同的范圍內(nèi)使用。

變量優(yōu)先級

命令行中的變量

在命令行中設(shè)置的變量具有在實(shí)際測試執(zhí)行開始之前可以設(shè)置的所有變量的最高優(yōu)先級。它們覆蓋在測試用例文件中的變量表中以及在測試數(shù)據(jù)中導(dǎo)入的資源和變量文件中創(chuàng)建的可能變量。

單獨(dú)設(shè)置變量(--variable option)會(huì)覆蓋使用變量文件設(shè)置的變量(--variablefile選項(xiàng))。如果多次指定相同的單個(gè)變量,則最后指定的變量將覆蓋之前的變量。這允許在啟動(dòng)腳本中設(shè)置變量的默認(rèn)值,并從命令行覆蓋它們。但請注意,如果多個(gè)變量文件具有相同的變量,則首先指定的文件中的變量具有最高優(yōu)先級。

測試用例文件中的變量表

使用測試用例文件中的Variable表創(chuàng)建的變量可用于該文件中的所有測試用例。這些變量會(huì)覆蓋導(dǎo)入的資源和變量文件中具有相同名稱的可能變量。

在變量表中創(chuàng)建的變量在創(chuàng)建它們的文件中的所有其他表中都可用。這意味著它們也可以在Setting表中使用,例如,用于從資源和變量文件導(dǎo)入更多變量。

導(dǎo)入的資源和變量文件

資源和變量文件導(dǎo)入的變量具有在測試數(shù)據(jù)中創(chuàng)建的所有變量的最低優(yōu)先級。資源文件和變量文件中的變量具有相同的優(yōu)先級。如果多個(gè)資源和/或變量文件具有相同的變量,則首先導(dǎo)入的文件中的變量將被使用。

如果資源文件導(dǎo)入資源文件或變量文件,則其自己的Variable表中的變量具有比它導(dǎo)入的變量更高的優(yōu)先級。所有這些變量都可用于導(dǎo)入此資源文件的文件。

請注意,從資源和變量文件導(dǎo)入的變量在導(dǎo)入它們的文件的變量表中不可用。這是因?yàn)樵趯?dǎo)入資源文件和變量文件的設(shè)置表之前處理變量表。

在測試執(zhí)行期間設(shè)置的變量

在測試執(zhí)行期間使用關(guān)鍵字內(nèi)置 關(guān)鍵字的返回值設(shè)置的變量Set Test / Suite / Global Variable始終覆蓋設(shè)置范圍內(nèi)的可能現(xiàn)有變量。從某種意義上說,它們具有最高優(yōu)先級,但另一方面它們不會(huì)影響它們所定義范圍之外的變量。

內(nèi)置變量

內(nèi)置變量({TEMPDIR}和 {TEST_NAME}) 具有所有變量的最高優(yōu)先級。它們不能使用Variable表或命令行覆蓋,但即使它們也可以在測試執(zhí)行期間重置。此規(guī)則的一個(gè)例外是數(shù)字變量,如果沒有找到變量,則動(dòng)態(tài)解析。因此可以覆蓋它們,但這通常是一個(gè)壞主意。另外$ {CURDIR} 是特殊的,因?yàn)樗跍y試數(shù)據(jù)處理期間已被替換。

變量作用范圍

根據(jù)創(chuàng)建的位置和方式,變量可以具有全局,測試套件,測試用例或用戶關(guān)鍵字范圍。

全局變量

全局變量在測試數(shù)據(jù)中隨處可用。這些變量通常使用 --variable和--variablefile選項(xiàng)從命令行設(shè)置,但也可以使用BuiltIn關(guān)鍵字Set Global Variable在測試數(shù)據(jù)中的任何位置創(chuàng)建新的全局變量或更改現(xiàn)有變量。此外,內(nèi)置變量也是全局變量。

建議對所有全局變量使用大寫字母。

測試套件范圍

具有測試套件范圍的變量可在測試套件中的任何位置使用,可在其中定義或?qū)?。它們可以在變量表中?chuàng)建,從資源和變量文件導(dǎo)入,或者在測試執(zhí)行期間使用BuiltIn關(guān)鍵字 Set Suite Variable進(jìn)行設(shè)置。

測試套件范圍不是遞歸的,這意味著更高級別測試套件中的可用變量在低級套件中不可用。如有必要,可以使用資源和變量文件來共享變量。

由于這些變量可以在使用它們的測試套件中被視為全局變量,因此建議使用大寫字母。

測試用例范圍

在測試用例中根據(jù)關(guān)鍵字的返回值創(chuàng)建的變量具有測試用例范圍,并且僅在該測試用例中可用。創(chuàng)建它們的另一種可能性是在該特定測試用例中的任何位置使用BuiltIn關(guān)鍵字 Set Test Variable。測試用例變量是本地的,應(yīng)該使用小寫字母。

用戶關(guān)鍵字范圍

用戶關(guān)鍵字從傳遞給它們的參數(shù)中獲取自己的變量, 并從它們使用的關(guān)鍵字返回值。這些變量也是本地的,應(yīng)該使用小寫字母。

2.5.6高級變量功能

擴(kuò)展變量語法

擴(kuò)展變量語法可以與設(shè)置為標(biāo)量變量的對象一起使用。它允許訪問對象的屬性(例如, $ {obj.name}$ {obj.some_attr}),甚至可以調(diào)用其方法(例如,$ {obj.get_name()}或 $ {obj.getSomething ('arg')})。

擴(kuò)展變量語法是一個(gè)強(qiáng)大的功能,但應(yīng)謹(jǐn)慎使用。相反,訪問屬性通常不是問題,因?yàn)榫哂卸鄠€(gè)屬性的對象的一個(gè)??變量通常比具有多個(gè)變量更好。另一方面,調(diào)用方法,特別是當(dāng)它們與參數(shù)一起使用時(shí),可能會(huì)使測試數(shù)據(jù)變得復(fù)雜。如果發(fā)生這種情況,建議將代碼移動(dòng)到測試庫中。

擴(kuò)展變量語法的最常見用法在下面的示例中說明。首先假設(shè)我們有以下變量文件 和測試用例:

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]}

執(zhí)行此測試數(shù)據(jù)時(shí),關(guān)鍵字將獲取參數(shù),如下所述:

  • KW 1 gets string Robot
  • KW 2 gets string Robot eats Cucumber
  • KW 3 gets string two

擴(kuò)展變量語法按以下順序計(jì)算:

使用完整變量名稱搜索變量。僅在未找到匹配變量時(shí)才評估擴(kuò)展變量語法。
創(chuàng)建基本變量的真實(shí)名稱。名稱的主體由所有的字符后{直到非字母數(shù)字字符或空間的第一次出現(xiàn)(例如, OBJECT在` {OBJECT.name}和DICTIONARY在$ {DICTIONARY [2]}` )。
搜索與主體匹配的變量。如果沒有匹配項(xiàng),則引發(fā)異常并且測試用例失敗。
大括號內(nèi)的表達(dá)式被計(jì)算為Python表達(dá)式,因此基本變量名稱將替換為其值。如果由于語法無效而導(dǎo)致評估失敗或查詢的屬性不存在,則會(huì)引發(fā)異常并且測試失敗。
整個(gè)擴(kuò)展變量將替換為評估返回的值。

如果使用的對象是使用Java實(shí)現(xiàn)的,則擴(kuò)展變量語法允許您使用所謂的bean屬性訪問屬性。實(shí)質(zhì)上,這意味著如果你有一個(gè)將 getName方法設(shè)置為變量$ {OBJ}的對象,那么語法$ {OBJ.name}相當(dāng)于但比$ {OBJ.getName()}更清晰 。因此,上一個(gè)示例中使用的Python對象可以替換為以下Java實(shí)現(xiàn):

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;
    }
}

許多標(biāo)準(zhǔn)Python對象(包括字符串和數(shù)字)都具有可以顯式或隱式使用擴(kuò)展變量語法的方法。有時(shí)這可能非常有用并且減少了設(shè)置臨時(shí)變量的需要,但是過度使用它并創(chuàng)建非常神秘的測試數(shù)據(jù)也很容易。以下示例顯示了幾個(gè)相當(dāng)不錯(cuò)的用法。

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)而不是 數(shù)字.__ abs __(),使用 $ {abs(number)}也不起作用。這是因?yàn)樽兞棵仨毼挥跀U(kuò)展語法的開頭。 在這樣的測試數(shù)據(jù)中使用__xxx__方法已經(jīng)有點(diǎn)疑問了,通常最好將這種邏輯移到測試庫中。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容