Robot Framework官方教程(六)變量

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本身有兩種變量翁垂,scalarslists,它們分別具有$ {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}可用并分別分配給字符串Helloworld院崇,兩個(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)自BuiltInCollections庫(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} {NAME}{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:7272robot
  • $ {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 values 1, 2, and 3
  • ${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變量

可以分別使用變量{SPACE}和 {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)置變量({TEMPDIR}和 {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í)名稱握童。名稱的主體由所有的字符后{直到非字母數(shù)字字符或空間的第一次出現(xiàn)(例如澡绩, OBJECT在` {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ù)中驱证。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末延窜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子抹锄,更是在濱河造成了極大的恐慌逆瑞,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伙单,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)窿侈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)见间,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人布疼,你說(shuō)我怎么就攤上這事摊趾。” “怎么了游两?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵砾层,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我贱案,道長(zhǎng)肛炮,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任轰坊,我火速辦了婚禮铸董,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肴沫。我一直安慰自己粟害,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布颤芬。 她就那樣靜靜地躺著悲幅,像睡著了一般套鹅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上汰具,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天卓鹿,我揣著相機(jī)與錄音,去河邊找鬼留荔。 笑死吟孙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的聚蝶。 我是一名探鬼主播杰妓,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼碘勉!你這毒婦竟也來(lái)了巷挥?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤验靡,失蹤者是張志新(化名)和其女友劉穎倍宾,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體胜嗓,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡高职,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了兼蕊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片初厚。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖孙技,靈堂內(nèi)的尸體忽然破棺而出产禾,到底是詐尸還是另有隱情,我是刑警寧澤牵啦,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布亚情,位于F島的核電站,受9級(jí)特大地震影響哈雏,放射性物質(zhì)發(fā)生泄漏楞件。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一裳瘪、第九天 我趴在偏房一處隱蔽的房頂上張望土浸。 院中可真熱鬧,春花似錦彭羹、人聲如沸黄伊。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)还最。三九已至墓阀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拓轻,已是汗流浹背斯撮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扶叉,地道東北人勿锅。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像辜梳,于是被迫代替她去往敵國(guó)和親粱甫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容