糯米文學吧

位置:首頁 > 設計 > 網頁設計

WebService自動化-WSDL調用

在做自動化測試的過程中,有時候需要測試一個業務流程特定的部分, 這個特定部分可能是接口,它往往需要依賴前期產生的數據輸出作為輸入,這個時候,重新跑一遍前邊流程來獲得需要的數據顯然不合理, 那麼利用後端開發發佈出來的web service來直接生成所需數據就顯得尤為便捷, 今天我們就來看如何利用suds調用web service。

WebService自動化-WSDL調用

Suds is a lightweight SOAP python client for consuming Web Services.

The suds Client class provides a consolidated API for consuming web services. The object contains (2) sub-namespaces:

service

The service namespace provides a proxy for the consumed service. This object is used to invoke operations (methods) provided by the service endpoint.

factory

The factory namespace provides a factory that may be used to create instances of objects and types defined in the WSDL.

suds Client 是作為一個API來消費提供的web services, 它有兩個子命名空間:

Service :對象用來調用被消費的web service提供的方法。

Factory:提供一個工廠用來生成一個定義在WSDL的對象或方法的實例。

簡單來説就是service用來直接調用web service裏的方法,factory用來生成一個web service對象實例。

我們用一段代碼來説明:

from nt import Client

class WebServices(object):

WSDL_ADDRESS = "http://*/services/*/

def __init__(self):

_service = Client(_ADDRESS)

print _service

def is_class_booked(self, class_id, member_id):

return _assBooked(class_id, member_id)["ClassBooked"]

def cancel_clas(self, class_id, member_id):

parameter = _te("CancelClass")

print parameter

print dir(parameter)

s_id = class_id

er_id = member_id

elBy = 'T'

elReason = 'test'

return _elClass(m)

if __name__ == '__main__':

web_service_class = WebServices()

print web_service__class_booked('315983', '23540202')

print web_service_el_clas('315983', '23540202')

以上代碼裏:

WSDL_ADRESS:是我們提供的web service的地址。

__init__方法: 實現了suds client的生成, client的用法如下:

from nt import Client

url = 'http://*.?wsdl'

client = Client(url)

is_class_booked 方法:使用了client的service這個命名空間,即直接調用web service 的可用方法。那麼如何知道哪個方法如何調用呢?

參考代碼裏__init__方法的print語句,打印出來了所有可用的方法和類型, print的打印結果片段如下:

Suds ( ) version: 0.4 GA build: R699-20100913

Service ( StudentPrivateLessonService ) tns=""

Prefixes (9)

ns0 = "iceParams"

ns1 = "entPrivateLesson"

*

ns8 = ""

Ports (1):

(BasicHttpBinding_IStudentPrivateLessonService)

Methods (18):

*

CancelClass(ns1:CancelParameter param, )

*

IsClassBooked(xs:int class_id, xs:int member_id, )

*

Types (47):

ns4:ArrayOfBatchCancelDetail

ns4:ArrayOfBookablePLClass

ns4:ArrayOfBookedPLClass

*

從打印結果可以看出,IsClassBooked方法可以直接調用,它需要2個參數,類型為int型。

Cancel_class方法:利用了 client的factory這個命名空間。

parameter = _te("CancelClass")

創建了Cancel Class這個方法的一個實例,然後通過 print parameter,可以看出這個函數的參數組成:

suds_inpect.png

它是一個字典,字典的m的值又是一個字典,故我們要調用這個方法時下需要用s_id 這樣的方式來引用。

下圖是整段代碼的運行結果:

證明成功,我們再去DB裏查下結果:

可以看出,有一條心的記錄添加出來。

以上,只要給出WSDL的地址,導入suds,通過Client, service, factory這3個類就可以實現web services的自動化調用,是不是很簡單?