在做完基于http協(xié)議的接口測試之后,開始弄soap協(xié)議了,之前有過開發(fā)java webservice自動化框架的經(jīng)驗(yàn),所以我想著應(yīng)該并不會很難。對于webservice的簡介,服務(wù)器端和客戶端的開發(fā)的簡單例子前面的隨筆有分享過,就不再次重復(fù)。然后在網(wǎng)上隨便搜了下,似乎RobotFrameWork并沒有提供基于soap協(xié)議的庫,于是自己用python做了個簡單的模塊。 服務(wù)器端是用java開發(fā)的,實(shí)際上提供了wsdl文件,跟什么語言開發(fā)的不會影響客戶端的調(diào)用。用python做soap的客戶端,用到的是suds庫,首先當(dāng)然是安裝suds了,執(zhí)行pip install suds或者到http://pypi./pypi/suds下載壓縮包,安裝成功后,可以在官網(wǎng)上搜索它的相關(guān)文檔介紹https:///suds/wiki/Documentation,然后可以開心的進(jìn)行客戶端開發(fā)了。
# -*- coding: cp936 -*- 運(yùn)行后,結(jié)果如下: 第一個紅框內(nèi)返回的是可以遠(yuǎn)程調(diào)用的所有方法,第二個紅框是具體一個接口測試后返回的數(shù)據(jù) 介于是做demo演示,于是就只做了一個py文件進(jìn)行調(diào)用,就做一個關(guān)鍵字吧。然后關(guān)鍵字的參數(shù)就是url,遠(yuǎn)程調(diào)用的方法,方法內(nèi)的參數(shù)。而且方法名傳遞進(jìn)來后,如果放在.的后面(ws.service.getkeyCode),ws.service.method是無效的,method已經(jīng)不當(dāng)字符串處理了,只能當(dāng)函數(shù)名處理(js支持,一般語言都不支持),于是需要自己做個簡單的映射,寫完如下:
# -*- coding: cp936 -*- from suds.client import Client def webService(url,test_method,rootuname,pwd_md5,keyCode): client = Client(url) dic_metode={'getkeyCode':client.service.getkeyCode} method_test = dic_metode.get(test_method) return method_test(rootuname, pwd_md5, keyCode) 這個就可以直接在RF內(nèi)導(dǎo)入,做一個接口的測試了(暫時只能證明可行,易用性是欠缺,但相比java之前寫的代碼,已經(jīng)簡潔了無數(shù)倍,java的稍晚復(fù)雜點(diǎn),嘿嘿),在RF內(nèi)導(dǎo)入XML(內(nèi)置庫)就可以對返回的標(biāo)準(zhǔn)xml數(shù)據(jù)進(jìn)行解析,測試腳本和運(yùn)行結(jié)果如下所示:
|
|