使用遠(yuǎn)程接口庫(kù)進(jìn)一步擴(kuò)展Robot Framework的測(cè)試能力

引言:

Robot Framework的四層結(jié)構(gòu)已經(jīng)極大的提高了它的擴(kuò)展性跑芳。我們可以使用它豐富的擴(kuò)展庫(kù)來(lái)完成大部分測(cè)試工作〉0埽可是碰到下面兩種情況贯要,僅靠四層結(jié)構(gòu)就不好使了:

1.有些復(fù)雜的測(cè)試可能跨越多個(gè)物理機(jī)器,且有的測(cè)試庫(kù)也必須部署在被測(cè)系統(tǒng)上冬念。

2.一個(gè)測(cè)試要使用多個(gè)庫(kù)趁窃,但是有的只能用jybot運(yùn)行,有的只能用pybot運(yùn)行(這種情況很常見(jiàn))急前。

遠(yuǎn)程庫(kù)接口的原理:

為了解決上述兩個(gè)難題醒陆,Robot Framework提供了遠(yuǎn)程庫(kù)接口技術(shù)(remote library interface)。

什么是遠(yuǎn)程庫(kù)接口技術(shù)呢裆针?其實(shí)很簡(jiǎn)單刨摩,遠(yuǎn)程庫(kù)接口就是把原來(lái)的測(cè)試庫(kù)變成了三部分

一部分我們可以叫他遠(yuǎn)程庫(kù)(Remote Library),第二部分叫做遠(yuǎn)程服務(wù)器(Remote Server)据块,第三部分是真正的測(cè)試庫(kù)(Test Library)码邻。 測(cè)試庫(kù)提供真正的測(cè)試功能,它被遠(yuǎn)程服務(wù)器包裹起來(lái)另假,通過(guò)XML-RPC協(xié)議被遠(yuǎn)程庫(kù)訪(fǎng)問(wèn)(見(jiàn)下圖)像屋。它的實(shí)現(xiàn)思路說(shuō)白了就是設(shè)計(jì)模式中的Proxy模式。

這樣做的好處顯而易見(jiàn)边篮。遠(yuǎn)程庫(kù)只要遵守XML-RPC協(xié)議就可以訪(fǎng)問(wèn)遠(yuǎn)程服務(wù)器己莺,遠(yuǎn)程服務(wù)器的實(shí)現(xiàn)方式是什么就無(wú)關(guān)緊要了奏甫,這就意味著我們可以使用任何支持XML-RPC的高級(jí)語(yǔ)言為RF寫(xiě)擴(kuò)展庫(kù)了,查了查資料凌受,幾乎所有的高級(jí)語(yǔ)言都支持這個(gè)古老的簡(jiǎn)單協(xié)議阵子。

使用遠(yuǎn)程接口庫(kù):

如上文所說(shuō),RF把原來(lái)的測(cè)試庫(kù)分成了遠(yuǎn)程庫(kù)胜蛉、遠(yuǎn)程服務(wù)器挠进、測(cè)試庫(kù)三部分。那么怎樣才能把原有的測(cè)試庫(kù)進(jìn)行改造呢誊册?我們首先得有個(gè)Server领突。目前RF 提供了Python,Ruby案怯,.Net君旦,Java,Perl和Clojure的Server嘲碱。在這個(gè)鏈接可以下載它們:

http://code.google.com/p/robotframework/wiki/RemoteLibrary

下載到遠(yuǎn)程服務(wù)器后進(jìn)行包裹工作金砍,然后在RF調(diào)用遠(yuǎn)程庫(kù)。

下面我使用Python例子來(lái)詳細(xì)說(shuō)明如何使用遠(yuǎn)程庫(kù)麦锯。

?? 下載Server

Python的server實(shí)現(xiàn)的非常簡(jiǎn)單恕稠,只有一個(gè)文件,幾kb大小离咐。

我們可以在這個(gè)網(wǎng)址下載它:

http://robotframework.googlecode.com/hg/tools/remoteserver/robotremoteserver.py

?? 改造測(cè)試庫(kù)

有人會(huì)問(wèn)谱俭,不是用proxy模式么?為什么要改造測(cè)試庫(kù)宵蛀?不是應(yīng)該改造做proxy的server么?

其實(shí)改造誰(shuí)都行县貌。但是python有一個(gè)非常好的特性就是能夠根據(jù)是直接被調(diào)用或者間接被調(diào)用動(dòng)態(tài)決定行為术陶。我們利用這一點(diǎn),就能改造已有的測(cè)試庫(kù)煤痕,使它同時(shí)能夠當(dāng)做本地庫(kù)梧宫,也能被遠(yuǎn)程調(diào)用。

拿Robotframework的內(nèi)建String庫(kù)為例:

首先我們將robotremoteserver.py拷貝到String.py同一目錄下摆碉,然后打開(kāi)String庫(kù)的源代碼并在最后加入下面代碼:

if __name__ == '__main__':

import sys

from robotremoteserver import RobotRemoteServer

RobotRemoteServer(String(), *sys.argv[1:])

保存塘匣。然后一個(gè)遠(yuǎn)程服務(wù)器包裹的String庫(kù)就好了。

分析一下代碼巷帝,我們只是實(shí)例化了一個(gè)遠(yuǎn)程服務(wù)器忌卤,并且將String類(lèi)作為參數(shù)傳了進(jìn)去。

其實(shí)我們?cè)谶@里還能設(shè)置遠(yuǎn)程服務(wù)器IP和端口號(hào)楞泼。

if __name__ == '__main__':

import sys

from robotremoteserver import RobotRemoteServer

RobotRemoteServer(String(),’172.22.xx.xx’,’8081’ *sys.argv[1:])

如果不設(shè)置驰徊,也可以在運(yùn)行這個(gè)Server的時(shí)候設(shè)置笤闯。

?? 運(yùn)行遠(yuǎn)程庫(kù)

在命令行模式進(jìn)入String.py所在的目錄,執(zhí)行

String.py? 172.22.22.42? 8081

這時(shí)候RF就會(huì)告訴你一個(gè)包裹著測(cè)試庫(kù)的遠(yuǎn)程服務(wù)器已經(jīng)被啟動(dòng)了棍厂。

?? 在RF中調(diào)用遠(yuǎn)程庫(kù)

首先我們要引用Remote Library颗味,引用后就能直接使用了,跟使用本地庫(kù)沒(méi)有任何區(qū)別牺弹。

下面是測(cè)試遠(yuǎn)程String庫(kù)的腳本浦马。

*** Settings ***

Library?????????? Remote??? 172.22.22.42:8081??? WITH NAME??? RString

*** Test Cases ***

TestFetch

${str}??? Fetchfromleft??? I love test??? 5

腳本中引用了剛才我們建立的遠(yuǎn)程庫(kù),所有遠(yuǎn)程庫(kù)的名稱(chēng)都叫做Remote张漂,不同的只是后面的ip地址和端口號(hào)晶默,我們也可用WITH NAME 關(guān)鍵字給它起一個(gè)別名,這是為了解決多個(gè)遠(yuǎn)程庫(kù)里有相同關(guān)鍵字的問(wèn)題(可以使用關(guān)鍵字前加命名空間的方式加以區(qū)分)

下面鏈接是其它高級(jí)語(yǔ)言實(shí)現(xiàn)的遠(yuǎn)程庫(kù)接口的說(shuō)明鹃锈,由于原理相似荤胁,就不再一一說(shuō)明了。

JAVA:http://code.google.com/p/jrobotremoteserver/

Perl:http://code.google.com/p/plrobotremoteserver/

.NET:http://code.google.com/p/sharprobotremoteserver/

小結(jié):

利用遠(yuǎn)程庫(kù)接口技術(shù)屎债,我們幾乎可以把所有提供接口的測(cè)試工具都粘合起來(lái)仅政,外邊報(bào)個(gè)皮就行了。我們也可以用各種高級(jí)語(yǔ)言寫(xiě)測(cè)試庫(kù)了盆驹。不過(guò)值得說(shuō)明的是圆丹,有些 server還不完善,比如Java遠(yuǎn)程庫(kù)接口就不能正確的傳遞Exception躯喇,猜測(cè)是一些復(fù)雜對(duì)象不好通過(guò)XML-RPC協(xié)議進(jìn)行序列化辫封,感覺(jué)這個(gè) 可以再包一層皮:)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市廉丽,隨后出現(xiàn)的幾起案子倦微,更是在濱河造成了極大的恐慌,老刑警劉巖正压,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件欣福,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡焦履,警方通過(guò)查閱死者的電腦和手機(jī)拓劝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嘉裤,“玉大人郑临,你說(shuō)我怎么就攤上這事⌒汲瑁” “怎么了厢洞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我犀变,道長(zhǎng)妹孙,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任获枝,我火速辦了婚禮蠢正,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘省店。我一直安慰自己嚣崭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布懦傍。 她就那樣靜靜地躺著雹舀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粗俱。 梳的紋絲不亂的頭發(fā)上说榆,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音寸认,去河邊找鬼签财。 笑死,一個(gè)胖子當(dāng)著我的面吹牛偏塞,可吹牛的內(nèi)容都是我干的唱蒸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼灸叼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼神汹!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起古今,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤屁魏,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后捉腥,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蚁堤,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年但狭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撬即。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡立磁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出剥槐,到底是詐尸還是另有隱情唱歧,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站颅崩,受9級(jí)特大地震影響几于,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沿后,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一沿彭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尖滚,春花似錦喉刘、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至撼唾,卻和暖如春廉邑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背倒谷。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工蛛蒙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恨锚。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓宇驾,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親猴伶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子课舍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)他挎,斷路器筝尾,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,970評(píng)論 6 13
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法办桨,內(nèi)部類(lèi)的語(yǔ)法筹淫,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法呢撞,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,631評(píng)論 18 399
  • 第一卷第009章離家出走 08年來(lái)到地肺山的第一個(gè)車(chē)間大車(chē)床工作了二個(gè)月后就開(kāi)始加班了损姜。我那時(shí)討厭加班,每周的一三...
    8e237ca4f2ca閱讀 338評(píng)論 0 0
  • 原創(chuàng)文章&經(jīng)驗(yàn)總結(jié)&從校招到A廠(chǎng)一路陽(yáng)光一路滄桑 詳情請(qǐng)戳www.codercc.com 1. final的簡(jiǎn)介 ...
    你聽(tīng)___閱讀 8,000評(píng)論 6 22