2010-01-14 8 views
6

Qualcuno sa di un buon tutorial SUDS. Sto cercando di eseguire test sui file WSDL e sto riscontrando problemi nel trovare informazioni su come farlo. SUDS è molto diverso da SOAPy e chiunque lo raccomanderebbe per eseguire test del fumo sulle funzioni memorizzate nei file WSDL.Utilizzo di SUDS per testare WSDL

Ho letto che SOAPAy non è più supportato in Python 2.6+. È vero?

Ho un file WSDL ho inserito:

from suds.client import Client 

client = Client('http://10.51.54.50/ptz.wsdl') 

client.service.GetNode() 

ho ottenuto questo errore:

in open 
    response = self._open(req, data) 
    File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 407, in _open 
    '_open', req) 
    File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 367, in _call_chain 
    result = func(*args) 
    File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 1146, in http_open 
    return self.do_open(httplib.HTTPConnection, req) 
    File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 1121, in do_open 
    raise URLError(err) 
urllib2.URLError: <urlopen error [Errno 111] Connection refused> 

Qualcuno sa perché questo sta accadendo?

Posso collegarmi a questo file tramite il mio browser. Ho installato tutti i pacchetti di suds. Sono necessarie altre impostazioni?

+0

'errore urlopen [Errno 111] refused' Connection suona come non ti è permesso di accedere al IP. –

+0

No, l'installazione aggiuntiva non è richiesta. –

+0

sei riuscito a sviluppare il framework di test basato su sud? se sì, il tuo risultato ha un formato XML di tipo junit? – kamal

risposta

15

Suds è molto semplice da usare.

from suds.client import Client 

client = Client("http://example.com/foo.wsdl") 
client.service.someMethod(someParameter) 

someMethod è il nome di un metodo come descritto nel WSDL.

2

Connessione rifiutata indica che il server non è presente. È possibile accedere a http://10.51.54.50/ptz.wsdl in un browser o tramite curl? In caso contrario, avviare prima l'esecuzione del servizio SOAP, quindi riprovare.

2

Nel mio caso è stato uno sbaglio stupido (proprio come qualsiasi altro bug).

L'URL che avevo usato per inizializzare il mio servizio è stato qualcosa di simile

Uri httpUri = new Uri("http://localhost:8000/CalculatorService"); 

ho potuto accedere a questo servizio da un client di pitone in esecuzione sulla stessa macchina come il servizio. Potrei browser wsdl da un browser sia localmente che da una macchina remota. Tuttavia, quando ho provato ad accedere a questo servizio da una macchina remota, ho ricevuto errore di connessione rifiutata. La cosa strana è che in wireshark, ho potuto vedere che il servizio rimanda il wsdl al client remoto. Dopo sprecare un paio d'ore, ho attivato la registrazione

logging.getLogger('suds.client').setLevel(logging.DEBUG) 
logging.getLogger('suds.transport').setLevel(logging.DEBUG) 
logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG) 
logging.getLogger('suds.wsdl').setLevel(logging.DEBUG) 

I registri hanno dimostrato che schiuma scaricato il WSDL dal server ma dopo che ha tentato di connettersi al localhost: 8000. E questo ha spiegato che la connessione ha rifiutato l'errore. Ho appena cambiato l'URI sul server WCF per

Uri httpUri = new Uri("http://192.168.0.1:8000/CalculatorService"); 

E che risolto il mio problema

Problemi correlati