1. 程式人生 > >python在webservice接口測試中的應用

python在webservice接口測試中的應用

模塊 ports else syn tmp 字符 吐槽 pop ray

接口測試第二波,webservice接口來咯,歡迎各位小夥伴吐槽~
本次拿免費的互聯網國內手機號碼歸屬地查詢WEB服務webservice接口做例子,當然有很多免費webservice接口可以供大家使用,百度一下就有N多,手機號碼歸屬地查詢wsdl地址如下:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
打開後可以看到有一個getMobileCodeInfo方法,入參是一個電話號碼,當然也可以通過python調用來看到,接下來會介紹。使用python的suds模塊,這是一個第三方模塊,需要安裝,如果安裝了setuptools或pip,可以直接用easy_install 或pip命令安裝,easy_install suds或pip install suds即可,如果沒有安裝,可以去官網上下載,http://pypi.python.org/pypi/suds,下載後進入suds目錄python setup.py install 即可。
由於每個接口方法都是不一樣的,入參也不一樣,所以沒有辦法像http rest接口一樣寫成一個通用類,只能在測試的時候修改接口的方法名和入參了。
首先我們來看一下這個wsdl下都有哪些方法:from suds.client import Client#導入suds.client 模塊下的Client類
client = Client()#創建一個wsdl對象
print client#打印這個對象的詳細信息打印出來的結果如下:

Suds ( https://fedorahosted.org/suds/ ) version: 0.4 GA build: R699-20100913
Service ( MobileCodeWS ) tns="http://WebXml.com.cn/"
Prefixes (1)
ns0 = "http://WebXml.com.cn/"
Ports (2):
(MobileCodeWSSoap)
Methods (2):
getDatabaseInfo()
getMobileCodeInfo(xs:string mobileCode, xs:string userID, )
Types (1):
ArrayOfString
(MobileCodeWSSoap12)
Methods (2):
getDatabaseInfo()
getMobileCodeInfo(xs:string mobileCode, xs:string userID, )
Types (1):
ArrayOfString
=================================================

從上面的結果可以看到有兩個方法一個是getDatabaseInfo()沒有入參,一個是getMobileCodeInfo(),入參是一個字符串,手機號和用戶id,免費用戶的用戶id可以不填,下面就是用來測試的代碼了,註釋也很詳細:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 from suds.client import Client #導入suds.client 模塊下的Client類 Mobile_url="http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl"#手機號碼歸屬地
QQ_url="http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"#qq在線狀態 Random_url=‘http://webservice.webxml.com.cn/WebServices/RandomFontsWebService.asmx?wsdl‘#生成隨機字符串 def WsTest(url,Wsname,data): ‘‘‘ :param url: wsdl地址 :param Wsname: 方法名,做保存結果的文件名 :param data: 方法的傳入參數 :return: ‘‘‘ client = Client(url)#創建一個webservice接口對象 client.service.getMobileCodeInfo(data)#調用這個接口下的getMobileCodeInfo方法,並傳入參數 req = str(client.last_sent())#保存請求報文,因為返回的是一個實例,所以要轉換成str response = str(client.last_received())#保存返回報文,把它轉換成一個字符串,返回的也是一個實例 print(response)#打印返回報文 WriteRes(Wsname,req,response,data)#調用寫入結果函數,把方法名、請求報文、返回報文、和入參傳進去 def WriteRes(WsName,req,response,data): ‘‘‘ :param WsName: 接口的方法名 :param req: 請求報文 :param response: 返回報文 :param data: 傳入的數據 ‘‘‘ res = response.find(data)#從返回結果裏面找data,如果找到的話返回data的下標,也就是索引,找不到的話返回-1 fw_flag = open(‘/tmp/WsTestRes/WsTestRes.txt‘,‘a‘)#以追加模式打開寫入結果文件 if res>0: fw_flag.write(‘%s pass‘%WsName)#如果在返回報文中找到data的話,就寫pass,否則就寫fail else: fw_flag.write(‘%s fail‘%WsName) fw_flag.close()#關閉結果文件 fw_result = open(‘/tmp/WsTestRes/%s_result.txt‘%WsName,‘w‘)#打開以接口方法命名的文件 fw_result.write(req+‘\n‘*3+response)#保存請求報文和返回報文,\n*3的意思是換行三次 fw_result.close()#關閉結果文件 if __name__ ==‘__main__‘: WsTest(Mobile_url,‘getMobileCodeInfo‘,‘110‘)

python在webservice接口測試中的應用