Robot Framework官方教程(一)入門(mén)
Robot Framework官方教程(二)測(cè)試數(shù)據(jù)語(yǔ)法
Robot Framework官方教程(三)創(chuàng)建測(cè)試用例
Robot Framework官方教程(四)創(chuàng)建測(cè)試套件
Robot Framework官方教程(五)使用測(cè)試庫(kù)
Robot Framework官方教程(六)變量
Robot Framework官方教程(七)創(chuàng)建用戶關(guān)鍵字
Robot Framework官方教程(八) 資源和變量文件
Robot Framework官方教程(九) 執(zhí)行測(cè)試用例
Robot Framework官方教程(十)擴(kuò)展RobotFramework框架
變量
2.5.1簡(jiǎn)介
變量是Robot Framework的一個(gè)不可或缺的特性,它們可以在測(cè)試數(shù)據(jù)的大多數(shù)地方使用统倒。最常見(jiàn)的是,它們用于測(cè)試用例表和關(guān)鍵字表中關(guān)鍵字的參數(shù),但所有設(shè)置都允許在其值中使用變量。無(wú)法使用變量指定普通關(guān)鍵字名稱,但可以使用BuiltIn關(guān)鍵字 Run Keyword獲得相同的效果。
Robot Framework本身有兩種變量翁垂,scalars和lists,它們分別具有$ {SCALAR}和@ {LIST}的語(yǔ)法硝桩。除此之外沿猜,環(huán)境變量可以直接與語(yǔ)法%{VARIABLE}一起使用。
在以下情況下建議使用變量:
- 當(dāng)字符串經(jīng)常在測(cè)試數(shù)據(jù)中更改時(shí)碗脊。使用變量啼肩,您只需在一個(gè)地方進(jìn)行這些更改。
- 創(chuàng)建獨(dú)立于系統(tǒng)和操作系統(tǒng)的測(cè)試數(shù)據(jù)時(shí)衙伶。使用變量而不是硬編碼字符串可以大大減輕祈坠。因?yàn)樵趩?dòng)測(cè)試時(shí)可以從命令行設(shè)置變量,所以更改系統(tǒng)特定的變量很容易痕支。這也有助于本地化測(cè)試颁虐,這通常涉及使用不同的字符串運(yùn)行相同的測(cè)試。
- 當(dāng)需要將字符串以外的對(duì)象作為關(guān)鍵字的參數(shù)時(shí)卧须。
- 當(dāng)不同的關(guān)鍵字另绩,甚至在不同的測(cè)試庫(kù)中,需要進(jìn)行通信花嘶。您可以將一個(gè)關(guān)鍵字的返回值分配給變量笋籽,并將其作為參數(shù)提供給另一個(gè)變量。
- 當(dāng)測(cè)試數(shù)據(jù)中的值很長(zhǎng)或者復(fù)雜時(shí)椭员。例如车海,$ {URL}比http://long.domain.name:8080/path/to/service?foo=1&bar=2&zap=42短 。
如果在測(cè)試數(shù)據(jù)中使用了不存在的變量隘击,則使用它的關(guān)鍵字將失敗侍芝。如果需要使用與變量相同的語(yǔ)法作為文字字符串,則必須使用反斜杠對(duì)其進(jìn)行轉(zhuǎn)義埋同,如\ $ {NAME}州叠。
2.5.2變量類型
本節(jié)簡(jiǎn)要介紹了不同的變量類型。變量的創(chuàng)建和使用將在以下小節(jié)中詳細(xì)介紹凶赁。
與關(guān)鍵字類似咧栗,Robot Framework變量不區(qū)分大小寫(xiě)逆甜,并且忽略空格和下劃線。但是致板,建議使用帶有全局變量的所有大寫(xiě)字母(例如交煞,${PATH}
或$ {TWO_WORDS}
)和帶有僅在某些測(cè)試用例或用戶關(guān)鍵字中可用的變量的小寫(xiě)字母(例如,$ {my_var}
或 $ {myVar}
)斟或。但更重要的是素征,應(yīng)該始終如一地使用案例。
與使用類似變量語(yǔ)法的一些編程語(yǔ)言不同缕粹,花邊括號(hào)({和})在Robot Framework測(cè)試數(shù)據(jù)中是必需的稚茅≈交矗基本上平斩,變量名稱可以在花括號(hào)之間包含任何字符。但是咽块,建議僅使用a到z的字母字符绘面,數(shù)字,下劃線和空格侈沪,甚至是使用擴(kuò)展變量語(yǔ)法的要求揭璃。
標(biāo)量變量
在測(cè)試數(shù)據(jù)中使用標(biāo)量變量時(shí),它們將替換為分配給它們的值亭罪。雖然標(biāo)量變量最常用于簡(jiǎn)單字符串瘦馍,但您可以為它們分配任何對(duì)象,包括列表应役。標(biāo)量變量語(yǔ)法(例如 ${NAME}
)應(yīng)該為大多數(shù)用戶所熟悉情组,因?yàn)樗灿糜趕hell腳本和Perl編程語(yǔ)言。
下面的例子說(shuō)明了標(biāo)量變量的用法箩祥。假設(shè)變量$ {GREET}
和$ {NAME}
可用并分別分配給字符串Hello
和world
院崇,兩個(gè)示例測(cè)試用例都是等效的。
Test Case | Action | Argument | Argument |
---|---|---|---|
Strings | Log | Hello | |
Log | Hello, world!! | ||
Variables | Log | ${GREET} |
|
Log |
${GREET} , ${NAME} !! |
當(dāng)標(biāo)量變量用作測(cè)試數(shù)據(jù)單元格中的唯一值時(shí)袍祖,標(biāo)量變量將替換為它具有的值底瓣。值可以是任何對(duì)象。當(dāng)標(biāo)量變量在測(cè)試數(shù)據(jù)單元格中使用其他任何內(nèi)容(常量字符串或其他變量)時(shí)蕉陋,其值首先轉(zhuǎn)換為Unicode字符串捐凭,然后連接到該單元格中的任何內(nèi)容。將值轉(zhuǎn)換為字符串意味著調(diào)用對(duì)象的方法__unicode __(在Python中凳鬓,str作為后備)或toString
(在Java中)茁肠。
下面的示例演示了單獨(dú)使用單元格中的變量或其他內(nèi)容之間的區(qū)別。首先村视,讓我們假設(shè)我們將變量$ {STR}
設(shè)置為字符串Hello官套,world!
和$ {OBJ}
設(shè)置為以下Java對(duì)象的實(shí)例:
public class MyObj {
public String toString() {
return "Hi, tellus!";
}
}
設(shè)置這兩個(gè)變量后,我們將得到以下測(cè)試數(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í)行此測(cè)試數(shù)據(jù)時(shí)惋嚎,不同的關(guān)鍵字會(huì)收到如下所述的參數(shù):
- KW 1得到一個(gè)字符串
Hello,world站刑!
- KW 2得到一個(gè)存儲(chǔ)變量$ {OBJ}的對(duì)象
- KW 3得到一個(gè)字符串
I said "Hello, world!"
- KW 4得到了一個(gè)字符串
You said "Hi, tellus!"
List變量
List變量是可以為其分配多個(gè)值的復(fù)合變量另伍。簡(jiǎn)而言之,它們總是列表绞旅,并且可以包含無(wú)限數(shù)量的條目(也可以是空列表)摆尝。列表變量的主要好處是它們?cè)试S您為更大的數(shù)據(jù)集指定名稱。雖然列表變量通常只包含字符串因悲,但其他內(nèi)容也是可能的堕汞。
在測(cè)試數(shù)據(jù)中使用列表變量時(shí),列表的元素將作為新單元格插入測(cè)試數(shù)據(jù)中晃琳。因此讯检,如果列表變量包含兩個(gè)元素,則包含列表變量的單元格將變?yōu)榫哂辛斜碜兞績(jī)?nèi)容的兩個(gè)單元格卫旱。請(qǐng)注意人灼,包含列表變量的單元格不應(yīng)包含其他內(nèi)容。列表變量語(yǔ)法@ {NAME}
是從Perl借來(lái)的顾翼。
假設(shè)列表變量@ {USER}
設(shè)置為值 ['robot'投放,'secret']
,則以下兩個(gè)測(cè)試用例是等效的适贸。
Test Case | Action | User Name | Password |
---|---|---|---|
Strings | Login | robot | secret |
List Variable | Login | @{USER} |
訪問(wèn)單個(gè)列表變量項(xiàng)
也可以使用語(yǔ)法@ {NAME} [i]
從列表變量訪問(wèn)某個(gè)值灸芳,其中i是所選值的索引。索引從零開(kāi)始取逾,并且嘗試訪問(wèn)索引太大的值會(huì)導(dǎo)致錯(cuò)誤耗绿。以這種方式訪問(wèn)??的列表項(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)鍵字一起使用误阻,例如,來(lái)自BuiltIn和Collections庫(kù)晴埂。僅當(dāng)沒(méi)有與列表變量具有相同基本名稱的標(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)入庫(kù)和變量文件的參數(shù)卦停,但庫(kù)和變量文件名本身不能是列表變量向胡。另外,使用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允許使用語(yǔ)法%{ENV_VAR_NAME}在測(cè)試數(shù)據(jù)中使用環(huán)境變量。它們僅限于字符串值凿跳。
在測(cè)試執(zhí)行之前在操作系統(tǒng)中設(shè)置的環(huán)境變量在它期間可用件豌,并且可以使用關(guān)鍵字Set Environment Variable創(chuàng)建新變量,或者使用關(guān)鍵字Delete Environment Variable刪除現(xiàn)有變量控嗜,這兩個(gè)變量都在OperatingSystem庫(kù)中可用 茧彤。由于環(huán)境變量是全局變量,因此在一個(gè)測(cè)試用例中設(shè)置的環(huán)境變量可以用在其后執(zhí)行的其他測(cè)試用例中躬审。但是棘街,在測(cè)試執(zhí)行后蟆盐,對(duì)環(huán)境變量的更改無(wú)效承边。
Test Case | Action | Argument | Argument |
---|---|---|---|
Env Variables | Log | Current user: %{USER} | |
Run | %{JAVA_HOME}${/}javac |
Java系統(tǒng)屬性
使用Jython運(yùn)行測(cè)試時(shí),可以 使用與環(huán)境變量相同的語(yǔ)法來(lái)訪問(wèn)Java系統(tǒng)屬性石挂。如果存在環(huán)境變量和具有相同名稱的系統(tǒng)屬性博助,則將使用環(huán)境變量。Robot Framework 2.6中添加了對(duì)訪問(wèn)Java系統(tǒng)屬性的支持痹愚。
Test Case | Action | Argument | Argument |
---|---|---|---|
System Properties | Log | %{user.name} running tests on %{os.name} |
2.5.3創(chuàng)建變量
變量可以從不同的來(lái)源開(kāi)始存在富岳,如下面的小節(jié)所述。
變量表
變量的最常見(jiàn)來(lái)源是測(cè)試用例文件和資源文件中的變量表拯腮。變量表很方便窖式,因?yàn)樗鼈冊(cè)试S在與其他測(cè)試數(shù)據(jù)相同的位置創(chuàng)建變量,并且所需的語(yǔ)法非常簡(jiǎn)單动壤。它們的主要缺點(diǎn)是它們只能將變量分配到字符串或字符串列表中萝喘。如果需要其他值類型,可變文件可能是更好的選擇琼懊。
創(chuàng)建標(biāo)量變量
最簡(jiǎn)單的變量賦值是將字符串設(shè)置為標(biāo)量變量阁簸。這是通過(guò)在Variable表的第一列中給出變量名(包括 $ {})和在第二列中給出值來(lái)完成的。如果第二列為空哼丈,則將空字符串設(shè)置為值启妹。此外,可以在值中使用已定義的變量醉旦。
Variable | Value | Value |
---|---|---|
${NAME} | Robot Framework | |
${VERSION} | 2.0 | |
${ROBOT} | {VERSION} |
在變量名之后使用等號(hào)=使得賦值變量稍微更明確也是可能的饶米,但不是強(qiáng)制性的桨啃。
Variable | Value | Value |
---|---|---|
${NAME} = | Robot Framework | |
${VERSION} = | 2.0 |
創(chuàng)建列表變量
創(chuàng)建列表變量就像創(chuàng)建標(biāo)量變量一樣簡(jiǎn)單。同樣檬输,變量名稱位于Variable表的第一列中优幸,值位于后續(xù)列中。列表變量可以具有任意數(shù)量的值褪猛,從零開(kāi)始网杆,如果需要許多值,則可以將它們拆分為多行伊滋。
Variable | Value | Value | Value |
---|---|---|---|
@{NAMES} | Matti | Teppo | |
@{NAMES2} | @{NAMES} | Seppo | |
@{NOTHING} | |||
@{MANY} | one | two | three |
... | four | five | six |
... | seven |
變量文件
變量文件是創(chuàng)建不同類型變量的最強(qiáng)大機(jī)制碳却。可以使用它們將變量分配給任何對(duì)象笑旺,并且它們還可以動(dòng)態(tài)創(chuàng)建變量昼浦。在資源和變量文件一節(jié)中解釋了變量文件語(yǔ)法和使用變量文件。
在命令行中設(shè)置變量
可以使用--variable(-v)選項(xiàng)從命令行單獨(dú)設(shè)置變量筒主,也可以使用帶有--variablefile(-V)選項(xiàng)的變量文件設(shè)置變量 关噪。從命令行設(shè)置的變量全局可用于所有已執(zhí)行的測(cè)試數(shù)據(jù)文件,并且它們還會(huì)覆蓋變量表和測(cè)試數(shù)據(jù)中導(dǎo)入的變量文件中具有相同名稱的可能變量乌妙。
設(shè)置單個(gè)變量的語(yǔ)法是--variable名稱:值使兔,其中名稱是變量的名稱,而不 $ {}和價(jià)值是它的價(jià)值藤韵∨傲ぃ可以多次使用此選項(xiàng)設(shè)置多個(gè)變量。只能使用此語(yǔ)法設(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:7272
和robot
-
$ {ESCAPED}
獲取值“quotes and spaces”
從命令行獲取變量文件的基本語(yǔ)法是--variablefile path/to/variables.py
,并且將可變文件轉(zhuǎn)換為使用部分有更多細(xì)節(jié)然低。實(shí)際創(chuàng)建的變量取決于引用的變量文件中的變量喜每。
如果從命令行給出變量文件和單個(gè)變量,則后者具有更高的優(yōu)先級(jí)脚翘。
從關(guān)鍵字返回值
關(guān)鍵字的返回值也可以設(shè)置為變量灼卢。這允許甚至在不同的測(cè)試庫(kù)中不同關(guān)鍵字之間的通信。以下示例說(shuō)明了簡(jiǎn)單案例的語(yǔ)法:
Test Case | Action | Argument | Argument |
---|---|---|---|
Returning | ${x} = | Get X | an argument |
Log | We got ${x}! |
在上面的示例中来农,Get X
關(guān)鍵字返回的值首先設(shè)置為變量$ {x}
鞋真,然后由Log
關(guān)鍵字使用。此語(yǔ)法適用于關(guān)鍵字返回某些內(nèi)容的所有情況沃于,并且該變量設(shè)置為關(guān)鍵字返回的任何值涩咖。在變量名之后使用等號(hào)=不是強(qiáng)制性的海诲,但建議使用,因?yàn)樗官x值更明確檩互。
如果關(guān)鍵字返回列表特幔,則還可以將返回值分配給多個(gè)標(biāo)量變量和/或一個(gè)列表變量。從Robot Framework 2.5開(kāi)始闸昨,這適用于所有類似列表的對(duì)象蚯斯,但在此之前,只支持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 values1
,2
, and3
-
${first}
with the value1
, and@{rest}
with the value[2, 3]
-
@{list}
with the value[1, 2, 3]
以這種方式設(shè)置的變量在其他方面與任何其他變量類似,但它們僅在測(cè)試用例或創(chuàng)建它們的關(guān)鍵字的范圍內(nèi)可用茄猫。因此狈蚤,例如,不可能在一個(gè)測(cè)試用例中設(shè)置變量并在另一個(gè)測(cè)試用例中使用它划纽。這是因?yàn)榇辔辏ǔ#詣?dòng)化測(cè)試用例不應(yīng)相互依賴阿浓,并且意外設(shè)置在別處使用的變量可能會(huì)導(dǎo)致難以調(diào)試的錯(cuò)誤他嚷。如果確實(shí)需要在一個(gè)測(cè)試用例中設(shè)置變量并在另一個(gè)測(cè)試用例中使用它,則可以使用內(nèi)置關(guān)鍵字芭毙,如下一節(jié)所述。
使用內(nèi)置的Set Test/Suite/Global Variable關(guān)鍵字
Builtin庫(kù)具有一些關(guān)鍵字設(shè)置測(cè)試變量卸耘, 設(shè)置suite變量和設(shè)置全局變量可用于測(cè)試執(zhí)行過(guò)程中動(dòng)態(tài)地設(shè)置變量退敦。如果變量已存在于新范圍內(nèi),則其值將被覆蓋蚣抗,否則將創(chuàng)建新變量侈百。
使用Set Suite Variable關(guān)鍵字設(shè)置的變量在當(dāng)前執(zhí)行的測(cè)試套件的范圍內(nèi)隨處可用。因此翰铡,使用此關(guān)鍵字設(shè)置變量與使用測(cè)試數(shù)據(jù)文件中的變量表創(chuàng)建變量或從變量文件導(dǎo)入變量具有相同的效果钝域。其他測(cè)試套件(包括可能的子測(cè)試套件)不會(huì)看到使用此關(guān)鍵字設(shè)置的變量。
使用Set Global Variable關(guān)鍵字設(shè)置的變量在設(shè)置后執(zhí)行的所有測(cè)試用例和套件中全局可用锭魔。因此例证,使用此關(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)置變量使測(cè)試數(shù)據(jù)與操作系統(tǒng)無(wú)關(guān)。
變量 | 說(shuō)明 |
---|---|
$ {CURDIR} | 測(cè)試數(shù)據(jù)文件所在目錄的絕對(duì)路徑笙蒙。此變量區(qū)分大小寫(xiě)抵屿。 |
$ {TEMPDIR} | 系統(tǒng)臨時(shí)目錄的絕對(duì)路徑。在類UNIX系統(tǒng)中捅位,這通常是/ tmp轧葛,在Windows c:\Documents and Settings<user>\Local Settings\Temp中。 |
$ {EXECDIR} | 從中開(kāi)始測(cè)試執(zhí)行的目錄的絕對(duì)路徑艇搀。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ù)字變量
變量語(yǔ)法可用于創(chuàng)建整數(shù)和浮點(diǎn)數(shù)右莱,如下例所示。當(dāng)關(guān)鍵字期望獲得實(shí)際數(shù)字而不是看起來(lái)像數(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開(kāi)始,也可以分別使用0b郭膛,0o 和0x前綴從二進(jìn)制晨抡,八進(jìn)制和十六進(jìn)制值創(chuàng)建整數(shù)。語(yǔ)法是區(qū)分大小寫(xiě)的则剃。
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ù)字類似的變量語(yǔ)法創(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ū)分大小寫(xiě)棍现,例如$ {True}
和$ {true}
是等效的调煎。此外,$ {None}
和$ {null}
是同義詞己肮,因?yàn)樵贘ython解釋器上運(yùn)行測(cè)試時(shí)士袄,Jython會(huì)在必要時(shí)自動(dòng)將None和 null轉(zhuǎn)換為正確的格式。
空格和Empty變量
可以分別使用變量 {EMPTY}創(chuàng)建空格和空字符串 谎僻。例如娄柳,當(dāng)需要時(shí),這些變量是有用的使用反斜杠轉(zhuǎn)義空格或空單元格時(shí)艘绍。如果需要多個(gè)空格赤拒,則可以使用擴(kuò)展變量語(yǔ)法,如 $ {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)變量也可用于測(cè)試數(shù)據(jù)肋乍。這些變量在測(cè)試執(zhí)行期間可以具有不同的值鹅颊,并且其中一些變量甚至不可用。
變量 | 說(shuō)明 | 可得到 |
---|---|---|
$ {TEST NAME} | 當(dāng)前測(cè)試用例的名稱墓造。 | 測(cè)試用例 |
@ {TEST TAGS} | 按字母順序包含當(dāng)前測(cè)試用例的標(biāo)記堪伍。 | 測(cè)試用例 |
$ {TEST DOCUMENTATION} | 當(dāng)前測(cè)試用例的文檔。 | 測(cè)試用例 |
$ {TEST STATUS} | 當(dāng)前測(cè)試用例的狀態(tài)觅闽,PASS或FAIL帝雇。 | 測(cè)試拆解 |
$ {TEST MESSAGE} | 當(dāng)前測(cè)試用例的消息。 | 測(cè)試拆解 |
$ {PREV TEST NAME} | 上一個(gè)測(cè)試用例的名稱蛉拙,如果尚未執(zhí)行任何測(cè)試尸闸,則為空字符串。 | 到處 |
$ {PREV TEST STATUS} | 上一個(gè)測(cè)試用例的狀態(tài):PASS孕锄,F(xiàn)AIL或未執(zhí)行測(cè)試時(shí)的空字符串吮廉。 | 到處 |
$ {PREV TEST MESSAGE} | 上一個(gè)測(cè)試用例的可能錯(cuò)誤消息。 | 到處 |
$ {SUITE NAME} | 當(dāng)前測(cè)試套件的全名畸肆。 | 到處 |
$ {SUITE SOURCE} | 套件文件或目錄的絕對(duì)路徑宦芦。Robot Framework 2.5中的新功能。 | 到處 |
$ {SUITE DOCUMENTATION} | 當(dāng)前測(cè)試套件的文檔轴脐。 | 到處 |
$ {SUITE STATUS} | 當(dāng)前測(cè)試套件的狀態(tài)调卑,PASS或FAIL。 | suite |
$ {SUITE MESSAGE} | 當(dāng)前測(cè)試套件的完整消息大咱,包括統(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} | 輸出文件的絕對(duì)路徑。 | 到處 |
$ {LOG FILE} | 未創(chuàng)建日志文件時(shí)餐抢,日志文件的絕對(duì)路徑或字符串NONE。 | 到處 |
$ {REPORT FILE} | 未創(chuàng)建報(bào)告時(shí)報(bào)告文件的絕對(duì)路徑或字符串NONE低匙。 | 到處 |
$ {DEBUG FILE} | 未創(chuàng)建調(diào)試文件時(shí)旷痕,調(diào)試文件的絕對(duì)路徑或字符串NONE。 | 到處 |
$ {OUTPUT DIR} | 輸出目錄的絕對(duì)路徑顽冶。 | 到處 |
2.5.5變量?jī)?yōu)先級(jí)和范圍
來(lái)自不同來(lái)源的變量具有不同的優(yōu)先級(jí)欺抗,并且可以在不同的范圍內(nèi)使用。
變量?jī)?yōu)先級(jí)
命令行中的變量
在命令行中設(shè)置的變量具有在實(shí)際測(cè)試執(zhí)行開(kāi)始之前可以設(shè)置的所有變量的最高優(yōu)先級(jí)强重。它們覆蓋在測(cè)試用例文件中的變量表中以及在測(cè)試數(shù)據(jù)中導(dǎo)入的資源和變量文件中創(chuàng)建的可能變量绞呈。
單獨(dú)設(shè)置變量(--variable option)會(huì)覆蓋使用變量文件設(shè)置的變量(--variablefile選項(xiàng))贸人。如果多次指定相同的單個(gè)變量,則最后指定的變量將覆蓋之前的變量佃声。這允許在啟動(dòng)腳本中設(shè)置變量的默認(rèn)值艺智,并從命令行覆蓋它們。但請(qǐng)注意圾亏,如果多個(gè)變量文件具有相同的變量十拣,則首先指定的文件中的變量具有最高優(yōu)先級(jí)。
測(cè)試用例文件中的變量表
使用測(cè)試用例文件中的Variable表創(chuàng)建的變量可用于該文件中的所有測(cè)試用例志鹃。這些變量會(huì)覆蓋導(dǎo)入的資源和變量文件中具有相同名稱的可能變量夭问。
在變量表中創(chuàng)建的變量在創(chuàng)建它們的文件中的所有其他表中都可用。這意味著它們也可以在Setting表中使用曹铃,例如缰趋,用于從資源和變量文件導(dǎo)入更多變量。
導(dǎo)入的資源和變量文件
從資源和變量文件導(dǎo)入的變量具有在測(cè)試數(shù)據(jù)中創(chuàng)建的所有變量的最低優(yōu)先級(jí)陕见。資源文件和變量文件中的變量具有相同的優(yōu)先級(jí)秘血。如果多個(gè)資源和/或變量文件具有相同的變量,則首先導(dǎo)入的文件中的變量將被使用淳玩。
如果資源文件導(dǎo)入資源文件或變量文件直撤,則其自己的Variable表中的變量具有比它導(dǎo)入的變量更高的優(yōu)先級(jí)。所有這些變量都可用于導(dǎo)入此資源文件的文件蜕着。
請(qǐng)注意谋竖,從資源和變量文件導(dǎo)入的變量在導(dǎo)入它們的文件的變量表中不可用。這是因?yàn)樵趯?dǎo)入資源文件和變量文件的設(shè)置表之前處理變量表承匣。
在測(cè)試執(zhí)行期間設(shè)置的變量
在測(cè)試執(zhí)行期間使用關(guān)鍵字或內(nèi)置 關(guān)鍵字的返回值設(shè)置的變量Set Test / Suite / Global Variable始終覆蓋設(shè)置范圍內(nèi)的可能現(xiàn)有變量蓖乘。從某種意義上說(shuō),它們具有最高優(yōu)先級(jí)韧骗,但另一方面它們不會(huì)影響它們所定義范圍之外的變量嘉抒。
內(nèi)置變量
內(nèi)置變量(如 {TEST_NAME}) 具有所有變量的最高優(yōu)先級(jí)。它們不能使用Variable表或命令行覆蓋袍暴,但即使它們也可以在測(cè)試執(zhí)行期間重置些侍。此規(guī)則的一個(gè)例外是數(shù)字變量,如果沒(méi)有找到變量政模,則動(dòng)態(tài)解析岗宣。因此可以覆蓋它們,但這通常是一個(gè)壞主意淋样。另外$ {CURDIR} 是特殊的耗式,因?yàn)樗跍y(cè)試數(shù)據(jù)處理期間已被替換。
變量作用范圍
根據(jù)創(chuàng)建的位置和方式,變量可以具有全局刊咳,測(cè)試套件彪见,測(cè)試用例或用戶關(guān)鍵字范圍。
全局變量
全局變量在測(cè)試數(shù)據(jù)中隨處可用娱挨。這些變量通常使用 --variable和--variablefile選項(xiàng)從命令行設(shè)置余指,但也可以使用BuiltIn關(guān)鍵字Set Global Variable在測(cè)試數(shù)據(jù)中的任何位置創(chuàng)建新的全局變量或更改現(xiàn)有變量。此外让蕾,內(nèi)置變量也是全局變量浪规。
建議對(duì)所有全局變量使用大寫(xiě)字母。
測(cè)試套件范圍
具有測(cè)試套件范圍的變量可在測(cè)試套件中的任何位置使用探孝,可在其中定義或?qū)胨裥觥K鼈兛梢栽谧兞勘碇袆?chuàng)建,從資源和變量文件導(dǎo)入顿颅,或者在測(cè)試執(zhí)行期間使用BuiltIn關(guān)鍵字 Set Suite Variable進(jìn)行設(shè)置缸濒。
測(cè)試套件范圍不是遞歸的,這意味著更高級(jí)別測(cè)試套件中的可用變量在低級(jí)套件中不可用粱腻。如有必要庇配,可以使用資源和變量文件來(lái)共享變量。
由于這些變量可以在使用它們的測(cè)試套件中被視為全局變量绍些,因此建議使用大寫(xiě)字母捞慌。
測(cè)試用例范圍
在測(cè)試用例中根據(jù)關(guān)鍵字的返回值創(chuàng)建的變量具有測(cè)試用例范圍,并且僅在該測(cè)試用例中可用柬批。創(chuàng)建它們的另一種可能性是在該特定測(cè)試用例中的任何位置使用BuiltIn關(guān)鍵字 Set Test Variable啸澡。測(cè)試用例變量是本地的,應(yīng)該使用小寫(xiě)字母氮帐。
用戶關(guān)鍵字范圍
用戶關(guān)鍵字從傳遞給它們的參數(shù)中獲取自己的變量嗅虏, 并從它們使用的關(guān)鍵字返回值上沐。這些變量也是本地的龄广,應(yīng)該使用小寫(xiě)字母。
2.5.6高級(jí)變量功能
擴(kuò)展變量語(yǔ)法
擴(kuò)展變量語(yǔ)法可以與設(shè)置為標(biāo)量變量的對(duì)象一起使用。它允許訪問(wèn)對(duì)象的屬性(例如, $ {obj.name}
或$ {obj.some_attr}
),甚至可以調(diào)用其方法(例如迫横,$ {obj.get_name()}
或 $ {obj.getSomething ('arg')}
)。
擴(kuò)展變量語(yǔ)法是一個(gè)強(qiáng)大的功能呛讲,但應(yīng)謹(jǐn)慎使用贝搁。相反,訪問(wèn)屬性通常不是問(wèn)題膀哲,因?yàn)榫哂卸鄠€(gè)屬性的對(duì)象的一個(gè)??變量通常比具有多個(gè)變量更好蛮放。另一方面,調(diào)用方法,特別是當(dāng)它們與參數(shù)一起使用時(shí)泼差,可能會(huì)使測(cè)試數(shù)據(jù)變得復(fù)雜堆缘。如果發(fā)生這種情況,建議將代碼移動(dòng)到測(cè)試庫(kù)中吼肥。
擴(kuò)展變量語(yǔ)法的最常見(jiàn)用法在下面的示例中說(shuō)明麻车。首先假設(shè)我們有以下變量文件 和測(cè)試用例:
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í)行此測(cè)試數(shù)據(jù)時(shí),關(guān)鍵字將獲取參數(shù)动猬,如下所述:
- KW 1 gets string
Robot
- KW 2 gets string
Robot eats Cucumber
- KW 3 gets string
two
擴(kuò)展變量語(yǔ)法按以下順序計(jì)算:
使用完整變量名稱搜索變量。僅在未找到匹配變量時(shí)才評(píng)估擴(kuò)展變量語(yǔ)法争占。
創(chuàng)建基本變量的真實(shí)名稱握童。名稱的主體由所有的字符后 {OBJECT.name}和DICTIONARY在
$ {DICTIONARY [2]}` )俺附。
搜索與主體匹配的變量肥卡。如果沒(méi)有匹配項(xiàng),則引發(fā)異常并且測(cè)試用例失敗事镣。
大括號(hào)內(nèi)的表達(dá)式被計(jì)算為Python表達(dá)式步鉴,因此基本變量名稱將替換為其值。如果由于語(yǔ)法無(wú)效而導(dǎo)致評(píng)估失敗或查詢的屬性不存在璃哟,則會(huì)引發(fā)異常并且測(cè)試失敗氛琢。
整個(gè)擴(kuò)展變量將替換為評(píng)估返回的值。
如果使用的對(duì)象是使用Java實(shí)現(xiàn)的随闪,則擴(kuò)展變量語(yǔ)法允許您使用所謂的bean屬性訪問(wèn)屬性阳似。實(shí)質(zhì)上,這意味著如果你有一個(gè)將 getName
方法設(shè)置為變量$ {OBJ}
的對(duì)象铐伴,那么語(yǔ)法$ {OBJ.name}
相當(dāng)于但比$ {OBJ.getName()}
更清晰 撮奏。因此俏讹,上一個(gè)示例中使用的Python對(duì)象可以替換為以下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對(duì)象(包括字符串和數(shù)字)都具有可以顯式或隱式使用擴(kuò)展變量語(yǔ)法的方法。有時(shí)這可能非常有用并且減少了設(shè)置臨時(shí)變量的需要挽荡,但是過(guò)度使用它并創(chuàng)建非常神秘的測(cè)試數(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 |
請(qǐng)注意定拟,即使在普通Python代碼中建議使用abs(number)
而不是 數(shù)字.__ abs __()
,使用 $ {abs(number)}
也不起作用逗嫡。這是因?yàn)樽兞棵仨毼挥跀U(kuò)展語(yǔ)法的開(kāi)頭青自。 在這樣的測(cè)試數(shù)據(jù)中使用__xxx__
方法已經(jīng)有點(diǎn)疑問(wèn)了,通常最好將這種邏輯移到測(cè)試庫(kù)中驱证。