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)建用戶(hù)關(guān)鍵字
Robot Framework官方教程(八) 資源和變量文件
Robot Framework官方教程(九) 執(zhí)行測(cè)試用例
Robot Framework官方教程(十)擴(kuò)展RobotFramework框架
本節(jié)介紹整個(gè)測(cè)試用例語(yǔ)法羔挡。使用測(cè)試用例文件和測(cè)試套件目錄將測(cè)試用例組織到測(cè)試套件中將在下一節(jié)中討論醇锚。
2.2.1測(cè)試用例語(yǔ)法
基本語(yǔ)法
測(cè)試用例由關(guān)鍵字在測(cè)試用例表中構(gòu)建。關(guān)鍵字可以從測(cè)試庫(kù)或資源文件導(dǎo)入,也可以在測(cè)試用例文件本身的關(guān)鍵字表中創(chuàng)建轮蜕。
測(cè)試用例表中的第一列包含測(cè)試用例名稱(chēng)朽合。測(cè)試用例從包含此列的內(nèi)容的行開(kāi)始做入,并繼續(xù)到下一個(gè)測(cè)試用例名稱(chēng)或表的末尾缭嫡。
第二列通常具有關(guān)鍵字名稱(chēng)。此規(guī)則的一個(gè)例外是從關(guān)鍵字返回的值設(shè)置變量惜颇,當(dāng)?shù)诙谢蚝竺娴膸琢邪兞棵Q(chēng)皆刺,且關(guān)鍵字名稱(chēng)位于它們之后時(shí)。在任何一種情況下凌摄,關(guān)鍵字名稱(chēng)后面的列都包含指定關(guān)鍵字的參數(shù)羡蛾。
Test Case | Action | Argument | Argument |
---|---|---|---|
Valid Login | Open Login Page | ||
Input Name | demo | ||
Input Password | mode | ||
Submit Credentials | |||
Welcome Page Should Be Open | |||
Setting Variables | Do Something | first argument | second argument |
${value} = | Get Some Value | ||
Should Be Equal | ${value} | Expected value |
“測(cè)試用例”中的設(shè)置
測(cè)試用例也可以有自己的設(shè)置。設(shè)置名稱(chēng)始終位于第二列中锨亏,其值在后續(xù)列中痴怨。關(guān)鍵字通常也是在第二列煎殷。設(shè)置名稱(chēng)周?chē)蟹嚼ㄌ?hào),以區(qū)別于關(guān)鍵字腿箩『乐保可用設(shè)置如下所示,本節(jié)稍后將對(duì)其進(jìn)行說(shuō)明珠移。
-
[Documentation]
用于指定測(cè)試用例文檔弓乙。
-
[Tags]
-
[Setup]钧惧,[Teardown]
指定測(cè)試設(shè)置和拆卸暇韧。也有同義詞 [Precondition]和[Postcondition]。
-
[Template]
指定要使用的模板關(guān)鍵字浓瞪。測(cè)試本身將僅包含用作該關(guān)鍵字的參數(shù)的數(shù)據(jù)懈玻。
-
[Timeout]
用于設(shè)置測(cè)試用例超時(shí)。超時(shí)在后續(xù)章節(jié)討論乾颁。
Test Case | Action | Argument | Argument |
---|---|---|---|
Test With Settings | [Documentation] | Another dummy test | |
[Tags] | dummy | owner-johndoe | |
Log | Hello, world! |
設(shè)置表中的測(cè)試用例相關(guān)設(shè)置
設(shè)置表具有以下與測(cè)試用例相關(guān)的設(shè)置涂乌。這些設(shè)置主要是前面列出的測(cè)試用例特定設(shè)置的默認(rèn)值。
-
Force Tags, Default Tags
標(biāo)簽的強(qiáng)制值和默認(rèn)值英岭。
-
Test Setup, Test Teardown
測(cè)試設(shè)置和拆卸的默認(rèn)值湾盒。同時(shí)也有同義詞 Test Precondition和Test Postcondition。
-
Test Template
要使用的默認(rèn)模板關(guān)鍵字诅妹。
-
Test Timeout
測(cè)試用例超時(shí)的默認(rèn)值罚勾。超時(shí)在后續(xù)章節(jié)討論。
2.2.2使用參數(shù)
前面的示例已經(jīng)演示了使用不同參數(shù)的關(guān)鍵字吭狡,本節(jié)將更全面地討論這一重要功能尖殃。如何實(shí)際實(shí)現(xiàn)具有不同參數(shù)的用戶(hù)關(guān)鍵字和庫(kù)關(guān)鍵字將在單獨(dú)的部分中討論。
關(guān)鍵字可以接受零個(gè)或多個(gè)參數(shù)划煮,而某些參數(shù)可能具有默認(rèn)值送丰。關(guān)鍵字接受的參數(shù)取決于其實(shí)現(xiàn),通常搜索此信息的最佳位置是關(guān)鍵字的文檔般此。在本節(jié)的示例中蚪战,預(yù)計(jì)文檔將使用libdoc工具生成 牵现,但是有關(guān)通用文檔工具(如javadoc)生成的文檔的相同信息 铐懊。
必需的參數(shù)
大多數(shù)關(guān)鍵字都必須始終給出一定數(shù)量的參數(shù)。在關(guān)鍵字文檔中瞎疼,這通過(guò)指定以逗號(hào)(如第一科乎,第二,第三)分隔的參數(shù)名稱(chēng)來(lái)表示贼急。在這種情況下茅茂,參數(shù)名稱(chēng)實(shí)際上并不重要捏萍,除了它們應(yīng)該解釋參數(shù)的作用,但重要的是具有與文檔中指定的完全相同數(shù)量的參數(shù)空闲。使用太少或太多的參數(shù)將導(dǎo)致錯(cuò)誤令杈。
下面的測(cè)試使用的屬于OperatingSystem庫(kù)的關(guān)鍵字Create Directory
和Copy File
。它們的參數(shù)被指定為 path
和(source
,destination
)碴倾,這意味著它們分別采用一個(gè)和兩個(gè)參數(shù)逗噩。最后一個(gè)關(guān)鍵字,來(lái)自BuiltIn的No Operation
跌榔, 不帶任何參數(shù)异雁。
Test Case | Action | Argument | Argument |
---|---|---|---|
Example | Create Directory | ${TEMPDIR}/stuff | |
Copy File | ${CURDIR}/file.txt | ${TEMPDIR}/stuff | |
No Operation |
默認(rèn)值
參數(shù)通常具有默認(rèn)值,可以給出或不給出僧须。在文檔中纲刀,默認(rèn)值通常與參數(shù)名稱(chēng)分隔,其名稱(chēng)與name = default value相同担平。所有參數(shù)都可能具有默認(rèn)值示绊,但在具有默認(rèn)值的參數(shù)之后不能存在任何位置參數(shù)。
下面的示例說(shuō)明了使用默認(rèn)值暂论,該示例使用 具有參數(shù)path耻台,content =,encoding = UTF-8
的Create File
關(guān)鍵字空另。試圖在沒(méi)有任何參數(shù)或超過(guò)三個(gè)參數(shù)的情況下使用它是行不通的盆耽。
Test Case | Action | Argument | Argument | Argument |
---|---|---|---|---|
Example | Create File | ${TEMPDIR}/empty.txt | ||
Create File | ${TEMPDIR}/utf-8.txt | Hello world | ||
Create File | ${TEMPDIR}/iso-8859-1.txt | Hello world | ISO-8859-1 |
可變數(shù)量的參數(shù)
也可以創(chuàng)建接受任意數(shù)量參數(shù)的關(guān)鍵字。這些參數(shù)可以與必填參數(shù)和帶有默認(rèn)值的參數(shù)組合扼菠,但所謂的varargs只能放在參數(shù)列表的最后一個(gè)摄杂。在文檔中,它們通常在參數(shù)名稱(chēng)之前有一個(gè)星號(hào)循榆,如* varargs析恢。
以下示例中使用的Remove Files
和Join Paths
關(guān)鍵字分別包含參數(shù)*paths
和base,*parts
秧饮。前者可以與任意數(shù)量的參數(shù)一起使用映挂,但后者至少需要一個(gè)參數(shù)。
Test Case | Action | Argument | Argument | Argument |
---|---|---|---|---|
Example | Remove Files | ${TEMPDIR}/f1.txt | ${TEMPDIR}/f2.txt | ${TEMPDIR}/f3.txt |
@{paths} = | Join Paths | ${TEMPDIR} | f1.txt | |
... | f2.txt | f3.txt | f4.txt |
命名參數(shù)
當(dāng)關(guān)鍵字接受具有默認(rèn)值的多個(gè)參數(shù)時(shí)盗尸,不能使用位置參數(shù)僅覆蓋最后一個(gè)參數(shù)柑船。例如,如果在下面的測(cè)試中使用具有參數(shù)arg1 = a泼各,arg2 = b鞍时,arg3 = c
的關(guān)鍵字,則其參數(shù) arg1和arg2都將空字符串作為值而不是其默認(rèn)值。
Test Case | Action | Argument | Argument | Argument |
---|---|---|---|---|
Positional Arguments | [Documentation] | 1st and 2nd | argument get | empty strings |
Example Keyword | value |
為了只給出一些期望默認(rèn)值更容易的參數(shù)逆巍,在Robot Framework 2.5中添加了新的命名參數(shù)語(yǔ)法及塘。使用此語(yǔ)法,需要覆蓋其默認(rèn)值的參數(shù)將在格式為argname = value的必填參數(shù)之后立即給出锐极◇狭牛可以簡(jiǎn)單地省略使用默認(rèn)值的參數(shù)。以下示例測(cè)試說(shuō)明了這在實(shí)踐中如何工作灵再,該測(cè)試使用與上述示例相同的關(guān)鍵字味咳。在此示例中,未指定的參數(shù)將獲取其默認(rèn)值檬嘀。
Test Case | Action | Argument | Argument | Argument |
---|---|---|---|---|
Named Arguments | [Documentation] | Not specified | arguments get | default values |
Example Keyword | arg3=value | |||
Example Keyword | arg2=xxx | arg3=yyy |
當(dāng)沒(méi)有參數(shù)遺留時(shí)槽驶,命名參數(shù)語(yǔ)法自然可以與接受默認(rèn)值的參數(shù)一起使用。這可以使參數(shù)含義比僅顯示值時(shí)更清晰鸳兽。但是掂铐,以這種方式命名必填參數(shù)是不可能的。此外揍异,不能先給出第一個(gè)命名參數(shù)全陨,然后是varargs。
命名參數(shù)功能的最大限制是它目前僅適用于用戶(hù)關(guān)鍵字和使用Python實(shí)現(xiàn)的庫(kù)關(guān)鍵字衷掷,它們使用靜態(tài)庫(kù)API或混合庫(kù)API辱姨。
注意
當(dāng)命名參數(shù)語(yǔ)法與用戶(hù)關(guān)鍵字一起使用時(shí),參數(shù)名稱(chēng)不帶
${}
裝飾戚嗅。例如雨涛,帶參數(shù)${arg1} = default,${arg2} = second
的用戶(hù)關(guān)鍵字懦胞, 必須這樣使用:arg2 = override
替久。
僅當(dāng)?shù)忍?hào)前面的參數(shù)部分與具有默認(rèn)值的參數(shù)名稱(chēng)匹配時(shí),才使用命名參數(shù)語(yǔ)法躏尉。此匹配從給定參數(shù)列表的末尾開(kāi)始蚯根,并在沒(méi)有匹配時(shí)停止。在偶然匹配的極少數(shù)情況下胀糜,可以使用\ 來(lái)轉(zhuǎn)義此語(yǔ)法颅拦,如nomatch\=here
。
注意
命名參數(shù)語(yǔ)法既是大小寫(xiě)也是空格敏感的教藻。前者意味著如果你有一個(gè)參數(shù) arg距帅,你必須這樣使用:
arg=<value>
,并且Arg=<value>
或ARG=<value>
不起作用怖竭。后者意味著在=
號(hào)之前不允許使用空格 锥债,并且在它之后的空格被視為默認(rèn)值本身的一部分陡蝇。
以下示例演示了在不同方案中使用命名參數(shù)痊臭,包括在測(cè)試庫(kù)導(dǎo)入中哮肚。
Setting | Value | Value | Value |
---|---|---|---|
Library | Telnet | prompt=$ |
Test Case | Action | Argument | Argument | Argument |
---|---|---|---|---|
Example | Open connection | 10.0.0.42 | port=${25} | |
List files | options=-lh | |||
List files | path=/tmp | options=-l |
Keyword | Action | Argument | Argument | Argument |
---|---|---|---|---|
List files | [Arguments] | ${path}=. | ${options}= | |
Execute command | ls ${options} ${path} |
2.2.3測(cè)試用例名稱(chēng)和文檔
測(cè)試用例名稱(chēng)直接來(lái)自Test Case表:它正是輸入測(cè)試用例列的內(nèi)容。一個(gè)測(cè)試套件中的測(cè)試用例應(yīng)具有唯一的名稱(chēng)广匙。與此相關(guān)允趟,您還可以使用測(cè)試中的自動(dòng)化變量 ${TEST_NAME}
來(lái)引用測(cè)試名稱(chēng)。無(wú)論何時(shí)執(zhí)行測(cè)試鸦致,它都可用潮剪,包括所有用戶(hù)關(guān)鍵字,以及測(cè)試設(shè)置和測(cè)試拆解分唾。
[Documentation]可以為測(cè)試用例設(shè)置文檔抗碰。該文本顯示在命令行輸出中,以及生成的測(cè)試日志和測(cè)試報(bào)告绽乔。
如果文檔很長(zhǎng)弧蝇,它可以拆分成幾個(gè) 與空格一起連接的單元格≌墼遥可以使用簡(jiǎn)單的 HTML格式看疗,并且可以使用變量使文檔動(dòng)態(tài)化。從Robot Framework 2.7開(kāi)始睦授,如果文檔分為多行两芳,則使用換行符連接多行 。如果行已經(jīng)以換行符結(jié)尾或者以轉(zhuǎn)義的反斜杠結(jié)束去枷,則不會(huì)添加換行符怖辆。
Test Case | Action | Argument | Argument |
---|---|---|---|
Simple | [Documentation] | Simple documentation | |
No Operation | |||
Splitting | [Documentation] | This documentation is a bit longer and | it has been split into several columns. |
No Operation | |||
Many lines | [Documentation] | Here we have | |
... | an automatic newline | ||
No Operation | |||
Formatting | [Documentation] | *This is bold*, _this italic_ and |
here is a link: http://robotframework.org |
No Operation | |||
Variables | [Documentation] | Executed at ${HOST} by ${USER} |
|
No Operation |
測(cè)試用例具有清晰且具有描述性的名稱(chēng)非常重要,在這種情況下删顶,它們通常不需要任何文檔疗隶。如果測(cè)試用例的邏輯需要記錄,那么通常表明測(cè)試用例中的關(guān)鍵字需要更好的名稱(chēng)并且要加強(qiáng)它們翼闹,而不是添加額外的文檔斑鼻。最后,通常使用標(biāo)簽更好地指定元數(shù)據(jù)猎荠,例如上面最后一個(gè)示例中的環(huán)境和用戶(hù)信息坚弱。
2.2.4標(biāo)記測(cè)試用例
在Robot Framework中使用標(biāo)簽是一種簡(jiǎn)單但功能強(qiáng)大的機(jī)制,用于對(duì)測(cè)試用例進(jìn)行分類(lèi)关摇。標(biāo)簽是自由文本荒叶,它們至少可用于以下目的:
- 標(biāo)簽顯示在測(cè)試報(bào)告,日志中输虱,當(dāng)然還包括測(cè)試數(shù)據(jù)中些楣,因此它們?yōu)闇y(cè)試用例提供元數(shù)據(jù)。
- 測(cè)試用例的統(tǒng)計(jì)信息(總計(jì),通過(guò)愁茁,失敗是根據(jù)標(biāo)簽自動(dòng)收集的)蚕钦。
- 使用標(biāo)記,您可以包含或排除要執(zhí)行的測(cè)試用例鹅很。
- 使用標(biāo)記嘶居,您可以指定哪些測(cè)試用例被認(rèn)為是關(guān)鍵的。
在本節(jié)中促煮,僅解釋了如何為測(cè)試用例設(shè)置標(biāo)記邮屁,下面列出了不同的方法。這些方法當(dāng)然可以一起使用菠齿。
-
在設(shè)置表中強(qiáng)制標(biāo)記
Force Tags
具有此設(shè)置的測(cè)試用例文件中的所有測(cè)試用例始終都會(huì)獲得指定的標(biāo)記佑吝。如果在測(cè)試套件初始化文件中使用它,則子測(cè)試套件中的所有測(cè)試用例都會(huì)獲得這些標(biāo)記绳匀。
-
設(shè)置表中的默認(rèn)標(biāo)簽
Default Tags
沒(méi)有自己[Tags]設(shè)置的測(cè)試用例會(huì)獲得這些標(biāo)記迹蛤。從Robot Framework版本2.5開(kāi)始,測(cè)試套件初始化文件中不再支持默認(rèn)標(biāo)記襟士。
-
測(cè)試用例表中的
[Tags]
測(cè)試用例總是獲得這些標(biāo)簽盗飒。此外,它不會(huì)獲取使用默認(rèn)標(biāo)記指定的可能標(biāo)記陋桂,因此可以使用空值覆蓋默認(rèn)標(biāo)記逆趣。從Robot Framework 2.5.6開(kāi)始,也可以使用值NONE 來(lái)覆蓋默認(rèn)標(biāo)記嗜历。
-
--settag
命令行選項(xiàng)除了他們?cè)趧e處獲得的標(biāo)簽之外宣渗,所有執(zhí)行的測(cè)試用例都使用此選項(xiàng)設(shè)置標(biāo)簽。
-
設(shè)置標(biāo)簽
Set Tags
和刪除標(biāo)簽Remove Tags keywords
關(guān)鍵字這些BuiltIn關(guān)鍵字可用于在測(cè)試執(zhí)行期間修改標(biāo)記梨州。
標(biāo)簽是自由文本痕囱,但它們已標(biāo)準(zhǔn)化,框架會(huì)將它們轉(zhuǎn)換為小寫(xiě)并刪除所有空格暴匠。如果測(cè)試用例多次獲得相同的標(biāo)簽鞍恢,則刪除除第一個(gè)之外的其他地方的標(biāo)簽∶拷眩可以使用變量創(chuàng)建標(biāo)記帮掉,當(dāng)然這些變量必須已經(jīng)存在。
Setting | Value | Value | Value |
---|---|---|---|
Force Tags | req-42 | ||
Default Tags | owner-john | smoke |
Variable | Value | Value | Value |
---|---|---|---|
${HOST} | 10.0.1.42 |
Test Case | Action | Argument | Argument |
---|---|---|---|
No own tags | [Documentation] | This test has tags | owner-john, smoke, req-42 |
No Operation | |||
With own tags | [Documentation] | This test has tags | not_ready, owner-mrx, req-42 |
[Tags] | owner-mrx | not_ready | |
No Operation | |||
Own tags with variables | [Documentation] | This test has tags | host-10.0.1.42, req-42 |
[Tags] | host-${HOST} | ||
No Operation | |||
Empty own tags | [Documentation] | This test has tags | req-42 |
[Tags] | |||
No Operation | |||
Set Tags and Remove Tags Keywords | [Documentation] | This test has tags | mytag, owner-john |
Set Tags | mytag | ||
Remove Tags | smoke | req-* |
2.2.5 setup和teardown
Robot Framework具有與許多其他測(cè)試自動(dòng)化框架類(lèi)似的測(cè)試設(shè)置
和測(cè)試拆卸
功能窒典。簡(jiǎn)而言之蟆炊,測(cè)試設(shè)置是在測(cè)試用例之前執(zhí)行的,并且在測(cè)試用例之后執(zhí)行測(cè)試拆卸瀑志。在Robot Framework中涩搓,設(shè)置和拆卸只是可能帶有參數(shù)的普通關(guān)鍵字污秆。
設(shè)置和拆卸只能是一個(gè)關(guān)鍵字。如果他們需要處理多個(gè)單獨(dú)的任務(wù)昧甘,則可以為此目的創(chuàng)建更高級(jí)別的用戶(hù)關(guān)鍵字良拼。另一種解決方案是使用Robot Framework 2.5中添加的BuiltIn關(guān)鍵字 Run Keywords
來(lái)執(zhí)行多個(gè)關(guān)鍵字。
測(cè)試拆卸在兩個(gè)方面是特殊的疾层。首先将饺,它也在測(cè)試用例失敗時(shí)執(zhí)行贡避,因此它可以用于不管測(cè)試用例狀態(tài)的情況下進(jìn)行的清理活動(dòng)痛黎。從Robot Framework 2.5開(kāi)始,即使其中一個(gè)關(guān)鍵字失敗刮吧,也會(huì)執(zhí)行拆卸中的所有關(guān)鍵字湖饱。
在測(cè)試用例文件中為測(cè)試用例指定設(shè)置或拆卸的最簡(jiǎn)單方法是使用“設(shè)置”表中的“ 測(cè)試設(shè)置”和“ 測(cè)試拆卸”設(shè)置。個(gè)別測(cè)試用例也可以有自己的設(shè)置或拆卸杀捻。它們使用測(cè)試用例表中的[Setup]
或[Teardown]
設(shè)置進(jìn)行定義井厌, 并且會(huì)覆蓋設(shè)置表的Test Setup和 Test Teardown設(shè)置。在[Setup]
或[Teardown]
設(shè)置后沒(méi)有關(guān)鍵字 意味著沒(méi)有設(shè)置或拆卸致讥。從Robot Framework 2.5.6開(kāi)始仅仆,也可以使用值NONE來(lái)指示測(cè)試沒(méi)有設(shè)置/拆卸。
Setting | Value | Value | Value |
---|---|---|---|
Test Setup | Open Application | App A | |
Test Teardown | Close Application |
Test Case | Action | Argument | Argument |
---|---|---|---|
Default values | [Documentation] | Setup and teardown | from setting table |
Do Something | |||
Overridden setup | [Documentation] | Own setup, teardown | from setting table |
[Setup] | Open Application | App B | |
Do Something | |||
No teardown | [Documentation] | Default setup, no | teardown at all |
Do Something | |||
[Teardown] | |||
No teardown 2 | [Documentation] | Using special NONE, | works with 2.5.6 |
Do Something | |||
[Teardown] | NONE | ||
Using variables | [Documentation] | Setup and teardown | given as variables |
[Setup] | ${SETUP} |
||
Do Something | |||
[Teardown] | ${TEARDOWN} |
通常在創(chuàng)建類(lèi)似用例的測(cè)試用例時(shí)垢袱,術(shù)語(yǔ)前置條件 和后置條件優(yōu)于術(shù)語(yǔ)設(shè)置和拆卸墓拜。Robot Framework也支持這個(gè)術(shù)語(yǔ),因此前提條件是設(shè)置的同義詞请契,后置條件是拆卸的同義詞咳榜。
Test Setup | Test Precondition |
---|---|
Test Teardown | Test Postcondition |
[Setup] | [Precondition] |
[Teardown] | [Postcondition] |
作為設(shè)置或拆卸執(zhí)行的關(guān)鍵字的名稱(chēng)可以是變量。通過(guò)從命令行提供關(guān)鍵字名稱(chēng)作為變量爽锥,這有助于在不同環(huán)境中進(jìn)行不同的設(shè)置或拆卸涌韩。
注意
測(cè)試套件可以自行設(shè)置和拆卸。套件設(shè)置在該測(cè)試套件中的任何測(cè)試用例或子測(cè)試套件之前執(zhí)行氯夷,同樣在它們之后執(zhí)行套件拆卸臣樱。
2.2.6測(cè)試模板
測(cè)試模板將正常的關(guān)鍵字驅(qū)動(dòng)的測(cè)試用例轉(zhuǎn)換為 數(shù)據(jù)驅(qū)動(dòng)的測(cè)試。正常測(cè)試用例的主體是由關(guān)鍵字及其可能的參數(shù)構(gòu)成的腮考,而帶有模板的測(cè)試用例僅定義了template關(guān)鍵字的參數(shù)擎淤。以下示例測(cè)試用例在功能上完全相同。
Test Case | Action | Argument | Argument |
---|---|---|---|
Normal test case | Example keyword | first argument | second argument |
Templated test case | [Template] | Example keyword | |
first argument | second argument |
如上例所示秸仙,可以使用[Template]
為單個(gè)測(cè)試用例指定模板嘴拢。另一種方法是使用 Setting表中的Test Template
設(shè)置,在這種情況下寂纪,該模板將應(yīng)用于該測(cè)試用例文件中的所有測(cè)試用例席吴。[Template]
會(huì)覆蓋設(shè)置表中的Test Template
設(shè)置赌结,當(dāng)[Template]
設(shè)置為一個(gè)空值,表示該用用例沒(méi)有模板孝冒,即使設(shè)置表中設(shè)置了柬姚。從Robot Framework 2.5.6開(kāi)始,也可以使用值NONE來(lái)指示測(cè)試沒(méi)有模板庄涡。
如果模板化測(cè)試用例的主體中有多個(gè)數(shù)據(jù)行量承,如下例所示,則模板將應(yīng)用于所有行穴店。這意味著多次執(zhí)行相同的關(guān)鍵字撕捍,每次執(zhí)行一次數(shù)據(jù)。模板化測(cè)試也很特殊泣洞,因此即使出現(xiàn)故障也會(huì)執(zhí)行所有輪次忧风。在正常測(cè)試中也可以使用這種continue-on-failure模式,但是通過(guò)模板化測(cè)試球凰,模式會(huì)自動(dòng)啟動(dòng)狮腿。
Test Case | Action | Argument | Argument |
---|---|---|---|
Templated test case | [Template] | Example keyword | |
first round 1 | first round 2 | ||
second round 1 | second round 2 | ||
third round 1 | third round 2 |
如果模板與for循環(huán)一起使用,則模板將應(yīng)用于循環(huán)內(nèi)的所有步驟呕诉。在這種情況下缘厢,continue-on-failure模式也在使用,這意味著即使存在故障甩挫,所有步驟也將使用所有循環(huán)元素執(zhí)行贴硫。
Test Case | Action | Argument | Argument | Argument |
---|---|---|---|---|
Template and for | [Template] | Example keyword | ||
:FOR | ${item} | IN | @{ITEMS} | |
${item} | 2nd arg | |||
:FOR | ${index} | IN RANGE | 42 | |
1st arg | ${index} |
測(cè)試模板的主要用途是減少數(shù)據(jù)驅(qū)動(dòng)測(cè)試的重復(fù)。不是在文件中對(duì)所有測(cè)試重復(fù)相同的關(guān)鍵字捶闸,而是可以在設(shè)置表中僅使用它一次夜畴。下一節(jié)將更詳細(xì)地說(shuō)明此用法。
注意
測(cè)試模板是Robot Framework 2.5中的一項(xiàng)新功能删壮。
注意
目前不能使用變量指定模板關(guān)鍵字贪绘。在將來(lái)的版本中可能會(huì)取消此限制。
2.2.7不同的測(cè)試用例風(fēng)格
可以通過(guò)幾種不同的方式編寫(xiě)測(cè)試用例央碟。描述某種工作流程的測(cè)試用例可以用關(guān)鍵字驅(qū)動(dòng)
或行為驅(qū)動(dòng)
的方式編寫(xiě)税灌。數(shù)據(jù)驅(qū)動(dòng)
的樣式可用于使用不同的輸入數(shù)據(jù)測(cè)試相同的工作流程。
關(guān)鍵字驅(qū)動(dòng)的風(fēng)格
工作流測(cè)試(例如前面描述的有效登錄測(cè)試) 是根據(jù)幾個(gè)關(guān)鍵字及其可能的參數(shù)構(gòu)建的亿虽。它們的正常結(jié)構(gòu)是首先將系統(tǒng)置于初始狀態(tài)(有效登錄示例中的打開(kāi)登錄頁(yè)面)菱涤,然后對(duì)系統(tǒng)執(zhí)行某些操作(輸入名稱(chēng)粘秆,輸入密碼收毫,提交憑證)殷勘,最后驗(yàn)證系統(tǒng)按預(yù)期運(yùn)行(歡迎頁(yè)面應(yīng)該打開(kāi))。
數(shù)據(jù)驅(qū)動(dòng)的風(fēng)格
編寫(xiě)測(cè)試用例的另一種方式是數(shù)據(jù)驅(qū)動(dòng)方法昔搂,其中測(cè)試用例僅使用一個(gè)更高級(jí)別的關(guān)鍵字玲销,通常創(chuàng)建為 用戶(hù)關(guān)鍵字,隱藏實(shí)際的測(cè)試工作流程摘符。當(dāng)需要使用不同的輸入和/或輸出數(shù)據(jù)測(cè)試相同的場(chǎng)景時(shí)贤斜,這些測(cè)試非常有用。每次測(cè)試都可以重復(fù)相同的關(guān)鍵字逛裤,但測(cè)試模板功能允許指定關(guān)鍵字只使用一次瘩绒。
Setting | Value | Value | Value |
---|---|---|---|
Test Template | Login with invalid credentials should fail |
Test Case | User Name | Password | |
---|---|---|---|
Invalid User Name | invalid | ${VALID PASSWORD} | |
Invalid Password | ${VALID USER} | invalid | |
Invalid User Name And Password | invalid | whatever | |
Empty User Name | ${EMPTY} | ${VALID PASSWORD} | |
Empty Password | ${VALID USER} | ${EMPTY} | |
Empty User Name And Password | ${EMPTY} | ${EMPTY} |
上面的示例有六個(gè)單獨(dú)的測(cè)試,每一個(gè)都是無(wú)效的用戶(hù)/密碼組合别凹,下面的示例說(shuō)明了如何只對(duì)一個(gè)測(cè)試進(jìn)行所有組合草讶。使用測(cè)試模板時(shí)洽糟,即使出現(xiàn)故障炉菲,也會(huì)執(zhí)行測(cè)試中的所有輪次,因此這兩種樣式之間沒(méi)有真正的功能差異坤溃。在上面的示例中拍霜,單獨(dú)的組合被命名為更容易看到他們測(cè)試的內(nèi)容,但是大量的這些測(cè)試可能會(huì)弄亂統(tǒng)計(jì)數(shù)據(jù)薪介。使用哪種風(fēng)格取決于具體場(chǎng)景和個(gè)人偏好祠饺。
Test Case | User Name | Password | |
---|---|---|---|
Invalid Password | [Template] | Login with invalid credentials should fail | |
invalid | ${VALID PASSWORD} | ||
${VALID USER} | invalid | ||
invalid | whatever | ||
${EMPTY} | ${VALID PASSWORD} | ||
${VALID USER} | ${EMPTY} | ||
${EMPTY} | ${EMPTY} |
提示
在上述兩個(gè)示例中,列標(biāo)題已更改為與數(shù)據(jù)匹配汁政。這是可能的道偷,因?yàn)樵诘谝恍?a target="_blank">中忽略除第一個(gè)之外的其他單元。
行為驅(qū)動(dòng)的風(fēng)格
也可以將測(cè)試用例編寫(xiě)為非技術(shù)項(xiàng)目利益相關(guān)者必須理解的要求勺鸦。這些可執(zhí)行要求通常稱(chēng)為驗(yàn)收測(cè)試驅(qū)動(dòng)開(kāi)發(fā) (ATDD)的基石换途。
編寫(xiě)這些需求/測(cè)試的一種方法是由行為驅(qū)動(dòng)開(kāi)發(fā)(BDD)推廣的Given-When-Then風(fēng)格。在以這種方式編寫(xiě)測(cè)試用例時(shí)懈息,初始狀態(tài)通常用一個(gè)以單詞Given開(kāi)頭的關(guān)鍵字表示辫继,操作用以When開(kāi)頭的關(guān)鍵字骇两,并用以Then開(kāi)頭的關(guān)鍵字來(lái)描述期望 配阵。如果某個(gè)步驟有多個(gè)操作棋傍,則可以使用以And開(kāi)頭的關(guān)鍵字。
Test Case | Step |
---|---|
Valid Login | Given login page is open |
When valid username and password are inserted | |
and credentials are submitted | |
Then welcome page should be open |
忽略Given/When/Then/AND前綴
如果找不到與全名匹配的關(guān)鍵字麸拄,則在搜索匹配關(guān)鍵字時(shí)刪除Given拢切,When,Then和And前綴主穗。這適用于用戶(hù)關(guān)鍵字和庫(kù)關(guān)鍵字忽媒。例如,在以上示例中打開(kāi)給定登錄頁(yè)面可以實(shí)現(xiàn)為具有或不具有單詞Given的用戶(hù)關(guān)鍵字金赦。忽略前綴還允許使用具有不同前綴的相同關(guān)鍵字夹抗。例如 Welcome page should be open
也可以用作And welcome page should be open
杏愤。
將數(shù)據(jù)嵌入關(guān)鍵字
在編寫(xiě)具體示例時(shí)珊楼,能夠?qū)?shí)際數(shù)據(jù)傳遞給關(guān)鍵字實(shí)現(xiàn)是很有用的。用戶(hù)關(guān)鍵字通過(guò)允許將參數(shù)嵌入關(guān)鍵字名稱(chēng)來(lái)支持此功能已慢。