(11)Robot Framework用戶關(guān)鍵字

我們新建一個(gè)案例码耐,并針對用戶關(guān)鍵字的用法進(jìn)行介紹追迟。

1、先新建一個(gè)用戶關(guān)鍵字骚腥,不用帶arguments。

image.png

在Setting下面的這些呢瓶逃,Documentation就不多說了束铭。

主要看下面4個(gè)設(shè)置:

Arguments: 設(shè)置傳入?yún)?shù)

Teardown: 設(shè)置完成時(shí)的動(dòng)作,比如寫上Close All Browsers厢绝,表示在這個(gè)用戶關(guān)鍵字執(zhí)行完成之后會(huì)執(zhí)行什么關(guān)鍵字契沫。

Timeout: 設(shè)置超時(shí)時(shí)間,如寫上1min昔汉,表示1分鐘超時(shí)懈万,如果這個(gè)關(guān)鍵字執(zhí)行超過1分鐘則認(rèn)為失敗。

Return Value: 設(shè)置返回值

一直以來我都覺得用戶關(guān)鍵字就像一個(gè)函數(shù)一樣靶病,有傳入?yún)?shù)Arguments会通,有返回值Return Value,而且還可以用Teardown作為函數(shù)完成后的清理動(dòng)作娄周。

所以我們也要像函數(shù)一樣來使用User Keyword涕侈。

2、傳入?yún)?shù)Arguments

? 0)變量類型

順帶提一下變量的類型煤辨,RF里的變量分兩種裳涛。

一種是Scalar木张,可以理解為單值變量。Scalar型變量用$符號(hào)開頭端三。

一種是List Variable舷礼,list型變量,或者可以理解為數(shù)組變量郊闯。List型變量用@符號(hào)開頭妻献。

? 1)必填參數(shù)

給我們的關(guān)鍵字先添加4個(gè)參數(shù),參數(shù)之間使用 | 進(jìn)行分隔虚婿。(如果想在默認(rèn)值里使用 | 作為一個(gè)值而不是分隔符旋奢,那么就要使用 | 來表示|的值。

image.png

如果是這樣添加參數(shù)呢然痊,表示這些參數(shù)都是必填的至朗,我們建一個(gè)case3,并調(diào)用關(guān)鍵字測試看一下剧浸,這里的關(guān)鍵字測試后面的4個(gè)格子都是紅色锹引,提示參數(shù)必填。

image.png

我自己添加了case01唆香,但是后面的4個(gè)格子并沒有變紅嫌变。

image.png

? 2)選填參數(shù)

假設(shè)我們想把其中第2個(gè)參數(shù)設(shè)成選填參數(shù),選填參數(shù)就是給參數(shù)加上默認(rèn)值躬它。

默認(rèn)值使用 = 加上值腾啥,如果想默認(rèn)為空,只寫等號(hào)就行了冯吓。

(默認(rèn)值的意思不需要細(xì)講了哈倘待,就是如果你在調(diào)用這個(gè)關(guān)鍵字的時(shí)候,如果不給這個(gè)選填參數(shù)傳值组贺,那么就使用默認(rèn)值作為參數(shù)的值)

image.png

如果我們直接這樣加的話凸舵,點(diǎn)擊OK就會(huì)報(bào)錯(cuò)。意思是說必填參數(shù)不允許在選填參數(shù)后面失尖。

也就是說如果某一個(gè)參數(shù)設(shè)置成了選填參數(shù)啊奄,那么他后面的參數(shù)都必須是選填參數(shù),不能是必填參數(shù)掀潮。

在我們這里就是第2個(gè)參數(shù)如果要可選菇夸,要么把3、4參數(shù)也都設(shè)置上默認(rèn)值胧辽,要么就把第2個(gè)參數(shù)調(diào)整到最后去峻仇。我先調(diào)整成下面這樣,就不會(huì)報(bào)錯(cuò)了邑商。

image.png

? 3)List變量參數(shù)

List變量也是可以作為參數(shù)摄咆,但是List變量只能放在最后一位凡蚜。如果放在前面,就會(huì)報(bào)錯(cuò)吭从。

image.png

我把a(bǔ)rg4改成了@{arg4}這樣的List變量朝蜘,保存時(shí)就會(huì)提示List變量只能作為最后一個(gè)參數(shù)。

為啥只能是最后一個(gè)呢涩金?從英文的角度看是the last argument谱醇,沒有s。步做。副渴。。
得意

如果一定要試試最后2個(gè)都放list變量呢全度,也是會(huì)報(bào)錯(cuò)的煮剧。

image.png

這是為什么呢?首先将鸵,List變量本來來說勉盅,他是一個(gè)可變的,即List的成員數(shù)量不確定顶掉。而List作為參數(shù)的話草娜,有幾個(gè)成員就是相當(dāng)于幾個(gè)單值參數(shù),他實(shí)際上是提供了一種參數(shù)個(gè)數(shù)可變的方式痒筒。那么既然可變宰闰,如果放在前面的話(見第一個(gè)例子的圖),他就沒法確定傳入的參數(shù)到底哪些是給arg4的簿透,哪個(gè)是給arg2的了议蟆;同理,如果放2個(gè)List也是不行的(見第二個(gè)例子的圖)萎战,因?yàn)橐彩菬o法區(qū)分傳入的參數(shù)到底哪些是給arg4,哪些是給arg2舆逃。

而且2個(gè)可變和1個(gè)可變沒什么差別滴蚂维,所以最終限定是只能有1個(gè)List參數(shù),并且必須放在最后路狮。

但是我最后2個(gè)都放list變量居然添加成功了虫啥,有點(diǎn)蒙。
關(guān)于@{List}變量 和 ${Scalar}單值變量

image.png

最后看一下List參數(shù)的實(shí)例奄妨,其他幾種實(shí)例應(yīng)該沒什么復(fù)雜的涂籽,大家自己練習(xí)一下即可。

為了看的方便砸抛,我把參數(shù)數(shù)量減少點(diǎn)评雌,只放2個(gè)參數(shù)树枫,${arg1} | @{arg2},然后用了個(gè)Fail景东,目的是想把值打印在運(yùn)行界面上砂轻。

image.png

然后我們在case01里給他傳幾個(gè)值。

image.png

按住Ctrl, 把鼠標(biāo)移動(dòng)到關(guān)鍵字上斤吐,可以看到agr2前面有個(gè)*搔涝,表示他可以接受任意個(gè)參數(shù),Python里其實(shí)也是這樣處理多參數(shù)的和措。

運(yùn)行一下案例庄呈,看一下打印出來的內(nèi)容。

image.png

繼續(xù)介紹User Keyword里面的Teardown和Return Value的內(nèi)容

3派阱、Teardown測試完成回收清理

如果有用過Junit的朋友應(yīng)該記得Junit的案例一般都是有一個(gè)Setup诬留、一個(gè)Test、一個(gè)Teardown的颁褂,同樣我們的TestCase也是有這2個(gè)的故响,大家可以自己看一下case的Setting。

python的unittest也是有setUp和tearDown的

那么這個(gè)User Keyword的Teardown颁独,作用都是差不多的彩届,如果是Case的Teardown,那么是案例結(jié)束的時(shí)候做回收清理誓酒;而User Keyword的Teardown就是用在調(diào)用User Keyword完成之后才會(huì)做的數(shù)據(jù)回收清理樟蠕。

當(dāng)然,用于什么可以根據(jù)你自己的需求自己調(diào)整靠柑,并不一定是數(shù)據(jù)回收清理寨辩,是系統(tǒng)關(guān)鍵字或者用戶關(guān)鍵字都可以〖弑總之可以理解為關(guān)鍵字完成后還要調(diào)一個(gè)關(guān)鍵字靡狞。參數(shù)要用 | 分隔。

我這里改造一下上一篇寫的關(guān)鍵字測試隔嫡,以便于演示Teardown的作用甸怕。

image.png

改完的效果是先把a(bǔ)rg1的值賦給temp,然后把a(bǔ)rg2的列表第三項(xiàng)值賦給arg1(這里算個(gè)小bug腮恩,如果傳的參數(shù)少于3個(gè)就會(huì)報(bào)錯(cuò)了梢杭,這里只是演示,請忽略)秸滴,然后log打印出arg1和arg2的值武契。

在Teardown這里我使用了Set Suite Variable 或者Set Global Variable 方法,把temp的值覆蓋arg1,并把a(bǔ)rg1設(shè)為Suite級別的變量咒唆,然后我再case01里調(diào)用完關(guān)鍵字測試后又用log打印出arg1的值届垫。

image.png

如果不用Set Suite Variable 或者Set Global Variable 這兩個(gè)方法的話,在case01里是找不到arg1這個(gè)變量的钧排。

image.png

接著我們執(zhí)行一下案例敦腔,看看報(bào)告。

image.png

如上面所說恨溜,

首先把a(bǔ)rg1的值111賦給了temp;

然后又把a(bǔ)rg2的第3個(gè)值444賦給了arg1;

最后再把temp的值賦給arg1符衔。

這個(gè)就算是一種清理吧,讓參數(shù)的值在關(guān)鍵字內(nèi)部發(fā)生變化糟袁,在Teardown的時(shí)候把他的值恢復(fù)回來判族。

Teardown這里只能寫一行語句,如果你要執(zhí)行多行語句的話项戴,那最好是再專門寫一個(gè)關(guān)鍵字形帮,然后在Teardown這里調(diào)用這個(gè)新增的關(guān)鍵字。

4周叮、Return Value返回值

這個(gè)應(yīng)該不用怎么解釋了辩撑,只是說說用法,因?yàn)槲覀儌魅雲(yún)?shù)的時(shí)候可以用單值變量仿耽,也可以用List變量合冀,那么在Return Value的時(shí)候也是可以用單值變量和List變量的。

下面分別用一個(gè)例子來說明吧项贺。

? 1)單個(gè)單值變量返回

我把a(bǔ)rg1放到Return Value里了君躺,因?yàn)槲彝ο肟纯词窍萊eturn還是先Teardown,不過我覺得應(yīng)該還是先Return开缎,順便驗(yàn)證一下棕叫。

image.png

在case02里,我們用一個(gè)變量arg5獲取這個(gè)返回值奕删,然后打印出來俺泣。其他的代碼都不動(dòng)。

image.png

運(yùn)行之后完残,我們看一下日志打印的效果砌滞。

image.png

看來還是我猜錯(cuò)了,是在Teardown之后才Return的.

大家可以看到我標(biāo)記的地方坏怪,是先執(zhí)行了給arg1賦值111,然后又把這個(gè)arg1返回給了arg5绊茧,所以arg5的值也是111铝宵。我本來還以為應(yīng)該是444的,所以這里大家也要注意一下。

這種單個(gè)單值變量返回的是一種比較普遍的鹏秋,后面幾種稍微少見一些尊蚁,但是也比較有用處。

? 2)多個(gè)單值變量返回

在設(shè)置返回值的時(shí)候可能大家已經(jīng)看到了侣夷,這里是支持多個(gè)變量返回的横朋,也是用 | 分隔的。

? 2.1)這里我們繼續(xù)改造百拓,再增加一個(gè)變量的值返回琴锭。

image.png

同樣的,我們在case3那里也要做一下相應(yīng)的修改衙传,當(dāng)然不修改也可以决帖,這里就會(huì)比較自由了。我們先看看不改的蓖捶。圖和上面的case3一樣地回,我們直接看執(zhí)行的結(jié)果。

image.png

雖然我們用的是${arg5}俊鱼,但是因?yàn)榉祷亓?個(gè)值刻像,他自動(dòng)的轉(zhuǎn)換成了list

? 2.2)那么可能有人覺得這里返回的是list,我們最好用list變量來接收并闲,那么我們把第一個(gè)${arg5}改成@{arg5}

image.png

再運(yùn)行一下细睡,看看結(jié)果

image.png

差別基本不大,只是在與${arg5}和@{arg5}的顯示不同焙蚓。

? 2.3)那么還有一個(gè)方式纹冤,因?yàn)槲覀冎烙?個(gè)返回值,所以可以用2個(gè)變量來獲取值购公。

image.png

接著運(yùn)行一下萌京,看看日志

image.png

這樣可以直接使用對應(yīng)的變量了。

上面的3種方式前兩種差不多一樣宏浩,第三種是最好能知道返回值的個(gè)數(shù)知残,這樣可以一一對應(yīng),如果不一樣怎么辦呢比庄?

A:返回值個(gè)數(shù)大于取值變量個(gè)數(shù)求妹。

這種放2個(gè)變量返回多余2個(gè)的用法在新版本Robotframework里已經(jīng)不支持

實(shí)際上在2.1里已經(jīng)有了一個(gè)類似的,${arg5}會(huì)自動(dòng)轉(zhuǎn)為list佳窑。這是只有一個(gè)取值的變量制恍,那么我們試試多個(gè)的。

image.png

在case06里還是用2個(gè)變量取值

image.png

運(yùn)行一下看看結(jié)果神凑。

image.png

我這里運(yùn)行會(huì)報(bào)錯(cuò)Cannot set variables: Expected 2 return values, got 3.

我把值改為@{arg6}, 接收list之后便可以成功運(yùn)行了净神。

image.png

而參考文章是直接運(yùn)行成功何吝,我再看了確認(rèn)了一下文章。

這種放2個(gè)變量返回多余2個(gè)的用法在新版本Robotframework里已經(jīng)不支持

所以失敗是很正常的鹃唯。

他會(huì)先把第一個(gè)值給了arg5爱榕,然后把后面的值給了arg6,于是arg6變成了list變量坡慌。

所以可以得出結(jié)論黔酥,對于多個(gè)取值變量的個(gè)數(shù)少于返回值的個(gè)數(shù),他會(huì)先把前面的值一一對應(yīng)的給前面的取值變量賦值洪橘,這些變量仍然是單值變量跪者,而最后一個(gè)變量會(huì)轉(zhuǎn)成list變量接收剩下的值。

B:返回值個(gè)數(shù)小于取值變量個(gè)數(shù)梨树。

我們把return value改成只有一個(gè)${arg1}坑夯,然后運(yùn)行一下,看看結(jié)果抡四。

image.png

這種就會(huì)報(bào)錯(cuò)了柜蜈,因?yàn)橹粋骰貋硪粋€(gè)值,而這里期待的是多個(gè)值指巡,list-like的像list的變量淑履。

因此,知道返回值的個(gè)數(shù)比較重要藻雪,如果不確定返回值的個(gè)數(shù)秘噪,如同接下來的那種情況,最好使用list變量或單個(gè)變量來取值勉耀,避免出現(xiàn)返回值個(gè)數(shù)少于取值變量個(gè)數(shù)的情況指煎。

? 3)list變量返回

因?yàn)閘ist變量本身就是不確定有多少個(gè)成員,所以對于這種返回值便斥,最好使用list變量或單個(gè)變量來取值(即2.1和2.2的用法)至壤。那么返回值里返回1個(gè)list還是多個(gè)list都無所謂了,因?yàn)樗€會(huì)組裝成一個(gè)大的list枢纠。

稍微改造一個(gè)復(fù)雜的:

image.png

返回值里我們放了一個(gè)list變量加上一個(gè)單值變量再加上一個(gè)list變量像街,而在case3里的取值就用1個(gè)變量就可以了。

image.png

最后運(yùn)行一下晋渺,查看結(jié)果镰绎。

image.png

轉(zhuǎn)載:

http://blog.csdn.net/tulituqi/article/details/7906130

http://blog.csdn.net/tulituqi/article/details/7907770

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市木西,隨后出現(xiàn)的幾起案子畴栖,更是在濱河造成了極大的恐慌,老刑警劉巖八千,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驶臊,死亡現(xiàn)場離奇詭異挪挤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)关翎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸠信,“玉大人纵寝,你說我怎么就攤上這事⌒橇ⅲ” “怎么了爽茴?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長绰垂。 經(jīng)常有香客問我室奏,道長,這世上最難降的妖魔是什么劲装? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任胧沫,我火速辦了婚禮,結(jié)果婚禮上占业,老公的妹妹穿的比我還像新娘绒怨。我一直安慰自己,他們只是感情好谦疾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布南蹂。 她就那樣靜靜地躺著,像睡著了一般念恍。 火紅的嫁衣襯著肌膚如雪六剥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天峰伙,我揣著相機(jī)與錄音疗疟,去河邊找鬼。 笑死词爬,一個(gè)胖子當(dāng)著我的面吹牛秃嗜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播顿膨,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼锅锨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了恋沃?” 一聲冷哼從身側(cè)響起必搞,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎囊咏,沒想到半個(gè)月后恕洲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體塔橡,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年霜第,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了葛家。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泌类,死狀恐怖癞谒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情刃榨,我是刑警寧澤弹砚,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站枢希,受9級特大地震影響桌吃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜苞轿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一茅诱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呕屎,春花似錦让簿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蹂安,卻和暖如春椭迎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背田盈。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工畜号, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人允瞧。 一個(gè)月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓简软,卻偏偏與公主長得像,于是被迫代替她去往敵國和親述暂。 傳聞我的和親對象是個(gè)殘疾皇子痹升,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

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