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

引言:

Robot Framework的四層結(jié)構(gòu)已經(jīng)極大的提高了它的擴(kuò)展性。我們可以使用它豐富的擴(kuò)展庫(kù)來(lái)完成大部分測(cè)試工作??墒桥龅较旅鎯煞N情況,僅靠四層結(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ù)訪問(wèn)(見(jiàn)下圖)。它的實(shí)現(xiàn)思路說(shuō)白了就是設(shè)計(jì)模式中的Proxy模式。

這樣做的好處顯而易見(jiàn)。遠(yuǎn)程庫(kù)只要遵守XML-RPC協(xié)議就可以訪問(wèn)遠(yuǎn)程服務(wù)器,遠(yuǎn)程服務(wù)器的實(shí)現(xiàn)方式是什么就無(wú)關(guān)緊要了,這就意味著我們可以使用任何支持XML-RPC的高級(jí)語(yǔ)言為RF寫擴(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類作為參數(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ù)的名稱都叫做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ǔ)言寫測(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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容