基于Robot Framework實(shí)現(xiàn)的RESTful Webservice接口自動化測試方法
【專利摘要】本發(fā)明涉及一種基于Robot Framework實(shí)現(xiàn)的RESTful Webservice接口自動化測試方法,該方法通過Robot Framework測試框架粘合測試用例、測試庫及被測試系統(tǒng),實(shí)現(xiàn)RESTful Webservice接口的自動化測試,具體包括以下步驟:1)設(shè)計(jì)測試用例,每條測試用例中包含測試數(shù)據(jù)、期望結(jié)果和一個或多個用戶關(guān)鍵字;2)在Robot Framework測試框架中,根據(jù)測試用例對關(guān)鍵字進(jìn)行逐層調(diào)用,最終通過用于交互的Python庫關(guān)鍵字實(shí)現(xiàn)與被測試系統(tǒng)的交互,所述交互包括向被測試系統(tǒng)發(fā)送HTTP request和接收被測試系統(tǒng)的返回值;3)定義用于檢查的Python庫關(guān)鍵字,通過所定義的Python庫關(guān)鍵字對返回值進(jìn)行檢查,實(shí)現(xiàn)自動化測試。與現(xiàn)有技術(shù)相比,本發(fā)明具有減少工作量、測試可信度高等優(yōu)點(diǎn)。
【專利說明】基于Robot Framework實(shí)現(xiàn)的RESTf u I Webserv i ce接口自動化測試方法
技術(shù)領(lǐng)域
[0001 ]本發(fā)明屬于軟件測試技術(shù)領(lǐng)域,涉及一種自動化測試方法,尤其是涉及一種基于Robot Framework實(shí)現(xiàn)的RESTful Webservice接口自動化測試方法。
【背景技術(shù)】
[0002]隨著IT環(huán)境的不斷變化,數(shù)據(jù)備份與恢復(fù)系統(tǒng)的功能也越來越復(fù)雜,測試一個功能不斷增多的備份與恢復(fù)系統(tǒng)成為一項(xiàng)龐大的工程,怎樣使用更少的人力、更快的完成測試更是一個巨大的挑戰(zhàn)。
[0003]傳統(tǒng)的測試方法是使用手工測試的方式,通過WEB界面操作產(chǎn)品進(jìn)行測試。業(yè)界流行的自動化測試工具,比如QTP等,不適用于頁面頻繁變更的產(chǎn)品。由于現(xiàn)有技術(shù)中沒有找到合適的自動測試方法,導(dǎo)致每次程序的修改都需要大量的人員采用手工的方式進(jìn)行回歸測試,效率低、可?目度差。
[0004]Robot Framework是一款python編寫的功能自動化測試框架,具備良好的可擴(kuò)展性,支持關(guān)鍵字驅(qū)動,可以同時測試多種類型的客戶端或者接口,可以進(jìn)行分布式測試執(zhí)行,主要用于輪次很多的驗(yàn)收測試和驗(yàn)收測試驅(qū)動開發(fā)(ATDD) Aobot Framework是開源軟件,由Nokia Siemens Networks開發(fā)并提供支持。
[0005]RESTful是一種軟件架構(gòu)風(fēng)格,提供了一組設(shè)計(jì)原則和約束,RESTful的每一個URI代表一種資源,RESTful是客戶端和服務(wù)器之間傳遞URI這種資源的某種表現(xiàn)層。RESTfulWebservice使用標(biāo)準(zhǔn)的HTTP方法(GET/PUT/P0ST/DELETE)來抽象所有Web系統(tǒng)的服務(wù)??蛻舳送ㄟ^四個HTTP動詞對服務(wù)器端資源進(jìn)行操作,實(shí)現(xiàn)〃表現(xiàn)層狀態(tài)轉(zhuǎn)化〃:GET用來獲取資源,POST用來新建資源(也可以用于更新資源)JUT用來更新資源,DELETE用來刪除資源。RESTful直接基于http,不再需要任何別的諸如消息協(xié)議等,HTTP動詞操作面向資源,一目了然,具有自解釋性;數(shù)據(jù)描述簡單,一般以xml、json做數(shù)據(jù)交換。
[0006]現(xiàn)有技術(shù)中還未有針對RESTful Webservice接口的自動化測試的研究。
【發(fā)明內(nèi)容】
[0007]本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供一種減少工作量、測試可信度高的基于Robot Framework實(shí)現(xiàn)的RESTful Webservice接口自動化測試方法。
[0008]本發(fā)明的目的可以通過以下技術(shù)方案來實(shí)現(xiàn):
[0009]一種基于Robot Framework實(shí)現(xiàn)的RESTful Webservice接口自動化測試方法,該方法通過Robot Framework測試框架粘合測試用例、測試庫及被測試系統(tǒng),實(shí)現(xiàn)RESTfulWebservice接口的自動化測試,具體包括以下步驟:
[0010]I)設(shè)計(jì)測試用例,每條測試用例中包含測試數(shù)據(jù)、期望結(jié)果和一個或多個用戶關(guān)鍵字;
[0011]2)在Robot Framework測試框架中,根據(jù)測試用例對關(guān)鍵字進(jìn)行逐層調(diào)用,最終通過用于交互的Python庫關(guān)鍵字實(shí)現(xiàn)與被測試系統(tǒng)的交互,所述交互包括向被測試系統(tǒng)發(fā)送HTTP request和接收被測試系統(tǒng)的返回值;
[0012]3)定義用于檢查的Python庫關(guān)鍵字,通過所定義的Python庫關(guān)鍵字對返回值進(jìn)行檢查,實(shí)現(xiàn)自動化測試。
[0013]所述步驟I)中,設(shè)計(jì)測試用例時,每條測試用例中包含完整且正確的期望結(jié)果。
[0014]所述Robot Framework測試框架粘合測試用例前,將測試用例拆解為表格的形式,表格中的每一行僅包含一個用戶關(guān)鍵字及該用戶關(guān)鍵字對應(yīng)的期望結(jié)果。
[0015]所述步驟2)中,對關(guān)鍵字進(jìn)行逐層調(diào)用具體為:用戶關(guān)鍵字調(diào)用用戶關(guān)鍵字或內(nèi)建關(guān)鍵字或Python庫關(guān)鍵字,用戶關(guān)鍵字或內(nèi)建關(guān)鍵字或Python庫關(guān)鍵字調(diào)用Python庫關(guān)鍵字。
[0016]所述步驟2)中,通過Python庫關(guān)鍵字實(shí)現(xiàn)與被測試系統(tǒng)的交互時,將多個Python庫關(guān)鍵字組成的Py文件添加至Robot Framework測試框架中的一個資源文件中,測試用例通過加載所述資源文件實(shí)現(xiàn)對Python庫關(guān)鍵字的調(diào)用。
[0017]所述步驟2)中,與被測試系統(tǒng)的交互具體是通過測試工具實(shí)現(xiàn)。
[0018]所述步驟2)中,所述HTTP request的獲取步驟具體為:
[0019]將協(xié)議、IP、端口、接口名稱封裝為URI,利用UR1、用戶名、密碼構(gòu)造可用的HTTPrequest header,將UR1、HTTP request header、HTTP請求方法、接口、超時時間、重連時間封裝為HTTP request。
[0020]所述步驟3)中,通過用于檢查的Python庫關(guān)鍵字對返回值進(jìn)行檢查具體為:
[0021 ] 所述測試用例包括正常流測試用例和異常流測試用例,當(dāng)測試用例為正常流測試用例時,若返回值中不包含異常且返回值與期望結(jié)果一致,則判定為成功,否則判定為失敗;當(dāng)測試用例為異常流測試用例時,若返回值中包含異常且錯誤提示信息與期望結(jié)果一致,則判定為成功,否則判定為失敗。
[0022]與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn):
[0023]1、提升了回歸測試效率。在未引入該測試方法前,執(zhí)行備份恢復(fù)系統(tǒng)的回歸測試需要花費(fèi)50人*天的工作量,引入該方法后,同樣的工作只需要5人*天,使用更少的人力、更快地完成RESTful Webservice接口的自動化回歸測試工作。
[0024]2、減少了測試人員的工作量。測試可以自動執(zhí)行,測試人員可以利用這個時間做其他事情。
[0025]3、增加了測試的可信度。自動測試有預(yù)設(shè)的預(yù)期結(jié)果,可以做到每測試一次都進(jìn)行完整的比較,而手工測試可能會出現(xiàn)疏忽或者遺漏的情況。
[0026]4、本發(fā)明定義了 python庫關(guān)鍵字進(jìn)行被測試系統(tǒng)的返回結(jié)果的檢查,可以準(zhǔn)確快速地獲得測試結(jié)果,提高了自動化測試效率。
[0027]5、本發(fā)明的數(shù)據(jù)僅加載在測試用例中,將數(shù)據(jù)與流程分離,簡單易學(xué)、實(shí)現(xiàn)效率尚O
【附圖說明】
[0028]圖1為本發(fā)明的自動化測試框架圖;
[0029]圖2為本發(fā)明的自動化測試流程圖;
[0030]圖3為本發(fā)明的邏輯判斷流程圖;
[0031]圖4為本發(fā)明的加載成功的Python庫文件。
【具體實(shí)施方式】
[0032]下面結(jié)合附圖和具體實(shí)施例對本發(fā)明進(jìn)行詳細(xì)說明。本實(shí)施例以本發(fā)明技術(shù)方案為前提進(jìn)行實(shí)施,給出了詳細(xì)的實(shí)施方式和具體的操作過程,但本發(fā)明的保護(hù)范圍不限于下述的實(shí)施例。
[0033]如圖1-圖2所不,本實(shí)施例提供一種基于Robot Framework實(shí)現(xiàn)的RESTfulWebservice接口自動化測試方法,該方法通過Robot Framework測試框架粘合測試用例、測試庫及被測試系統(tǒng),測試庫調(diào)用測試工具或者直接與被測系統(tǒng)交互,實(shí)現(xiàn)RESTfulWebservice接口的自動化測試,使用更少的人力、更快的完成RESTful Webservice接口的自動化回歸測試工作。該方法具體包括以下步驟:
[0034]I)設(shè)計(jì)測試用例,每條測試用例中包含測試數(shù)據(jù)、期望結(jié)果和一個或多個用戶關(guān)鍵字。設(shè)計(jì)測試用例時,確保測試用例的結(jié)果檢查范圍及內(nèi)容是正確并且完整的。
[0035]將測試用例拆解為表格的形式,粘合入RobotFramework測試框架中,表格中的每一行僅包含一個用戶關(guān)鍵字及該用戶關(guān)鍵字對應(yīng)的期望結(jié)果,一個用戶關(guān)鍵字對應(yīng)一個操作步驟。由此,測試用例轉(zhuǎn)化成多個用戶關(guān)鍵字及參數(shù)。
[0036]2)在Robot Framework測試框架中,根據(jù)測試用例對關(guān)鍵字進(jìn)行逐層調(diào)用,最終通過用于交互的Python庫關(guān)鍵字實(shí)現(xiàn)與被測試系統(tǒng)的交互,所述交互包括向被測試系統(tǒng)發(fā)送HTTP request和接收被測試系統(tǒng)的返回值。
[0037]利用Python實(shí)現(xiàn)用于交互的python庫關(guān)鍵字具體包括:
[0038]get_login_headers(self):用于構(gòu)造登陸后的HTTP request的header,每次HTTPrequest發(fā)送都需要消息頭,當(dāng)消息頭為空時,該函數(shù)封裝uri并模擬登陸,偽造一個已經(jīng)登陸成功的header。
[0039]get_from_svc(self ,url,param):利用url及para構(gòu)造URI,利用Tornado里面的HTTPClient模擬發(fā)送方法為get的http Request。利用httpclient.fetch獲取httpresponse。當(dāng)請求執(zhí)行失敗時,異常退出,用例執(zhí)行失敗,當(dāng)請求執(zhí)行成功時,返回httpresponse(返回值)。
[0040]post_to_svc(self,url ,param):利用url及para構(gòu)造URI,利用Tornado里面的HTTPCl i ent模擬發(fā)送方法為po s Utlhttp Request。利用httpclient.fetch獲取httpresponse。當(dāng)請求執(zhí)行失敗時,異常退出,用例執(zhí)行失敗,當(dāng)請求執(zhí)行成功時,返回httpresponse。
[0041 ] put_to_svc (self, url, param):利用 url 及 par a 構(gòu)造URI,利用 Tornado里面的HTTPClient模擬發(fā)送方法為put的http Request。利用httpclient.fetch獲取httpresponse。當(dāng)請求執(zhí)行失敗時,異常退出,用例執(zhí)行失敗,當(dāng)請求執(zhí)行成功時,返回httpresponse。
[0042]delete_to_svc(self ,url ,param):利用url及para構(gòu)造URI,利用Tornado里面的HTTPCl ient模擬發(fā)送方法為delete的http Request。利用httpcl ient.fetch獲取httpresponse。當(dāng)請求執(zhí)行失敗時,異常退出,用例執(zhí)行失敗,當(dāng)請求執(zhí)行成功時,返回httpresponse。
[0043]對關(guān)鍵字進(jìn)行逐層調(diào)用具體為:用戶關(guān)鍵字調(diào)用用戶關(guān)鍵字或內(nèi)建關(guān)鍵字或Python庫關(guān)鍵字,用戶關(guān)鍵字或內(nèi)建關(guān)鍵字或Py thon庫關(guān)鍵字調(diào)用Py thon庫關(guān)鍵字,如圖2所示。
[0044]通過Python庫關(guān)鍵字實(shí)現(xiàn)與被測試系統(tǒng)的交互時,將多個Python庫關(guān)鍵字組成的Py文件作為一個Library添加至Robot Framework測試框架中的一個資源文件中,測試用例通過加載所述資源文件實(shí)現(xiàn)對Python庫關(guān)鍵字的調(diào)用。所有需要用到該庫的用例只要加載了這個資源文件,就可以使用該文件中的所有關(guān)鍵字。
[0045]如圖3所示,步驟2)中,HTTP request的獲取步驟具體為:
[0046]將協(xié)議、IP、端口、接口名稱封裝為URI,利用UR1、用戶名、密碼構(gòu)造可用的HTTPrequest header,將UR1、HTTP request header、HTTP請求方法、接口、超時時間、重連時間封裝為HTTP request。
[0047]接收被測試系統(tǒng)的返回值前首先進(jìn)行初次判斷,判斷整個測試用例是否可以執(zhí)行(包含關(guān)鍵字及被測系統(tǒng)的執(zhí)行),如果可以執(zhí)行,則返回被測系統(tǒng)的返回值,如果不可以執(zhí)行,則整條用例執(zhí)行失敗。
[0048]3)在所述資源文件下定義用于檢查的Python庫關(guān)鍵字,調(diào)用Python庫中的方法,通過用于檢查的Python庫關(guān)鍵字對返回值進(jìn)行檢查,即進(jìn)行二次判斷,實(shí)現(xiàn)自動化測試,具體為:
[0049]所述測試用例包括正常流測試用例和異常流測試用例,當(dāng)測試用例為正常流測試用例時,若返回值中不包含異常且返回值與期望結(jié)果一致,則判定為成功,否則判定為失敗;當(dāng)測試用例為異常流測試用例時,若返回值中包含異常且錯誤提示信息與期望結(jié)果一致,則判定為成功,否則判定為失敗。
[0050]定義的用于檢查的Python庫關(guān)鍵字如下:
[°°511 get_notcontain,用于判斷get_from_svc方法的返回值是否包含異常,當(dāng)包含異常時,用例執(zhí)行失敗。未包含異常時,該關(guān)鍵字執(zhí)行成功,并將返回值定義為全局變量。
[0052]get_contain,用于判斷get_from_svc方法的返回值是否與期望結(jié)果一致。一致則用例執(zhí)行成功,否則用例執(zhí)行失敗。
[°°53] put_notcontain,用于判斷put_to_svc方法的返回值是否包含異常,當(dāng)包含異常時,用例執(zhí)行失敗。未包含異常時,該關(guān)鍵字執(zhí)行成功,并將返回值定義為全局變量。
[0054]put_contain,用于判斷put_to_svc方法的返回值是否與期望結(jié)果一致。一致則用例執(zhí)行成功,否則用例執(zhí)行失敗。
[°°55] post_notcontain,用于判斷post_to_svc方法的返回值是否包含異常,當(dāng)包含異常時,用例執(zhí)行失敗。未包含異常時,該關(guān)鍵字執(zhí)行成功,并將返回值定義為全局變量。[°°56] post_contain,用于判斷post_to_svc方法的返回值是否與期望結(jié)果一致。一致則用例執(zhí)行成功,否則用例執(zhí)行失敗。
[0057] delete_notcontain,用于判斷delete_to_svc方法的返回值是否包含異常,當(dāng)包含異常時,用例執(zhí)行失敗。
[°°58] (^16七6_(301^3;[11,用于判斷(1616七6_1:0_8¥(3方法的返回值是否與期望結(jié)果一致。一致則用例執(zhí)行成功,否則用例執(zhí)行失敗。
[0059]使用到的內(nèi)建關(guān)鍵字如下:
[0000]should not contain:作用是用來比較某變量是否包含了指定的字符串,如果包含則用例執(zhí)行結(jié)果為失敗。
[0061]Set Global variable:作用是將某個變量設(shè)置為全局變量,,該變量的生命周期為當(dāng)前這個tastcase。
[0062]should contain:作用是用來比較是否包含了定義的值,如果不包含則用例執(zhí)行結(jié)果為失敗。
[0063]Run Keyword And Continue On Failure,當(dāng)一個關(guān)鍵字執(zhí)行失敗的時候,繼續(xù)執(zhí)行下一個關(guān)鍵字。
[0064]Evaluate:獲取Python庫關(guān)鍵字的返回值并賦值給另一個變量。
[0065]Sleep:等待。
[0066]基于上述方法,以測試是否可以根據(jù)客戶端ID獲取到該客戶端的詳細(xì)信息為例,具體流程如下:
[0067]1、在服務(wù)器A上搭建被測系統(tǒng)。
[0068]2、在服務(wù)器B上搭建Robot Framework環(huán)境,安裝Python2.7.3版本,安裝ride。
[0069]3、根據(jù)本發(fā)明實(shí)現(xiàn)步驟完成py文件中的get_from_svc,并將該文件作為一個庫文件加載至Robot Framework中的資源文件resouce.txt中。
[0070]4、定義關(guān)鍵字 get_contain,調(diào)用get_from_svc,傳入ID、接口、ip、port、pro toco I及預(yù)期結(jié)果等變量并獲取返回值進(jìn)行比較。
[0071]5、定義一個關(guān)鍵字“獲取指定客戶端信息實(shí)現(xiàn)”,加載資源resouce.txt,調(diào)用關(guān)鍵字get_contain。
[0072]6、完成測試用例,調(diào)用關(guān)鍵字“獲取指定客戶端信息實(shí)現(xiàn)”,傳入實(shí)際的客戶端ID,控制臺IP、端口等參數(shù)以及期望結(jié)果。
[0073]7、運(yùn)行該用例。
【主權(quán)項(xiàng)】
1.一種基于RobotFramework實(shí)現(xiàn)的RESTful Webservice接口自動化測試方法,其特征在于,該方法通過Robot Framework測試框架粘合測試用例、測試庫及被測試系統(tǒng),實(shí)現(xiàn)RESTful Webservice接口的自動化測試,具體包括以下步驟: 1)設(shè)計(jì)測試用例,每條測試用例中包含測試數(shù)據(jù)、期望結(jié)果和一個或多個用戶關(guān)鍵字; 2)在RobotFramework測試框架中,根據(jù)測試用例對關(guān)鍵字進(jìn)行逐層調(diào)用,最終通過用于交互的Python庫關(guān)鍵字實(shí)現(xiàn)與被測試系統(tǒng)的交互,所述交互包括向被測試系統(tǒng)發(fā)送HTTPrequest和接收被測試系統(tǒng)的返回值; 3)定義用于檢查的Python庫關(guān)鍵字,通過所定義的Python庫關(guān)鍵字對返回值進(jìn)行檢查,實(shí)現(xiàn)自動化測試。2.根據(jù)權(quán)利要求1所述的基于RobotFramework實(shí)現(xiàn)的RESTful Webservice接口自動化測試方法,其特征在于,所述步驟I)中,設(shè)計(jì)測試用例時,每條測試用例中包含完整且正確的期望結(jié)果。3.根據(jù)權(quán)利要求1所述的基于RobotFramework實(shí)現(xiàn)的RESTful Webservice接口自動化測試方法,其特征在于,所述Robot Framework測試框架粘合測試用例前,將測試用例拆解為表格的形式,表格中的每一行僅包含一個用戶關(guān)鍵字及該用戶關(guān)鍵字對應(yīng)的期望結(jié)果O4.根據(jù)權(quán)利要求1所述的基于RobotFramework實(shí)現(xiàn)的RESTful Webservice接口自動化測試方法,其特征在于,所述步驟2)中,對關(guān)鍵字進(jìn)行逐層調(diào)用具體為:用戶關(guān)鍵字調(diào)用用戶關(guān)鍵字或內(nèi)建關(guān)鍵字或Python庫關(guān)鍵字,用戶關(guān)鍵字或內(nèi)建關(guān)鍵字或Python庫關(guān)鍵字調(diào)用Python庫關(guān)鍵字。5.根據(jù)權(quán)利要求1所述的基于RobotFramework實(shí)現(xiàn)的RESTful Webservice接口自動化測試方法,其特征在于,所述步驟2)中,通過Python庫關(guān)鍵字實(shí)現(xiàn)與被測試系統(tǒng)的交互時,將多個Python庫關(guān)鍵字組成的Py文件添加至Robot Framework測試框架中的一個資源文件中,測試用例通過加載所述資源文件實(shí)現(xiàn)對Python庫關(guān)鍵字的調(diào)用。6.根據(jù)權(quán)利要求1所述的基于RobotFramework實(shí)現(xiàn)的RESTful Webservice接口自動化測試方法,其特征在于,所述步驟2)中,與被測試系統(tǒng)的交互具體是通過測試工具實(shí)現(xiàn)。7.根據(jù)權(quán)利要求1所述的基于RobotFramework實(shí)現(xiàn)的RESTful Webservice接口自動化測試方法,其特征在于,所述步驟2)中,所述HTTP request的獲取步驟具體為: 將協(xié)議、IP、端口、接口名稱封裝為URI,利用UR1、用戶名、密碼構(gòu)造可用的HTTPrequest header,將UR1、HTTP request header、HTTP請求方法、接口、超時時間、重連時間封裝為HTTP request。8.根據(jù)權(quán)利要求1所述的基于RobotFramework實(shí)現(xiàn)的RESTful Webservice接口自動化測試方法,其特征在于,所述步驟3)中,通過用于檢查的Python庫關(guān)鍵字對返回值進(jìn)行檢查具體為: 所述測試用例包括正常流測試用例和異常流測試用例,當(dāng)測試用例為正常流測試用例時,若返回值中不包含異常且返回值與期望結(jié)果一致,則判定為成功,否則判定為失??;當(dāng)測試用例為異常流測試用例時,若返回值中包含異常且錯誤提示信息與期望結(jié)果一致,則判定為成功,否則判定為失敗。
【文檔編號】G06F11/36GK106095677SQ201610403083
【公開日】2016年11月9日
【申請日】2016年6月8日
【發(fā)明人】黃亞楠
【申請人】上海愛數(shù)信息技術(shù)股份有限公司