2010-01-14 15 views
6

Kennt jemand ein gutes SUDS-Tutorial. Ich versuche, Tests auf WSDL-Dateien auszuführen, und ich habe Probleme, Informationen darüber zu finden, wie dies zu tun ist. Ist SUDS sehr verschieden von SOAPy und würde jemand empfehlen, dass er Rauchtests für Funktionen ausführt, die in WSDL-Dateien gespeichert sind.Verwenden von SUDS zum Testen von WSDL

Ich habe gelesen, dass SOAPAy in Python 2.6+ nicht mehr unterstützt wird. Ist das wahr?

Ich habe eine WSDL-Datei, die ich eingegeben haben:

from suds.client import Client 

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

client.service.GetNode() 

ich diesen Fehler habe:

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> 

Weiß jemand, warum dies geschieht?

Ich kann eine Verbindung zu dieser Datei über meinen Browser herstellen. Ich habe alle Seifenpakete installiert. Ist ein anderes Setup erforderlich?

+0

'urlopen Fehler [Errno 111] Anschluss refused' klingt wie Sie sind nicht erlaubt die IP zugreifen. –

+0

Nein, ein zusätzliches Setup ist nicht erforderlich. –

+0

Konnten Sie das schaumbasierte Testframework entwickeln? Wenn ja, hat Ihr Ergebnis ein Junit-XML-Format? – kamal

Antwort

15

Suds ist sehr einfach zu bedienen.

from suds.client import Client 

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

someMethod ist der Name eines Verfahrens, wie in der WSDL beschrieben.

2

Verbindung abgelehnt zeigt an, dass der Server nicht da ist. Können Sie auf http://10.51.54.50/ptz.wsdl in einem Browser oder über curl zugreifen? Wenn nicht, starten Sie zuerst den SOAP-Dienst und versuchen Sie es erneut.

2

In meinem Fall war es ein dummer Fehler (genau wie bei jedem anderen Fehler).

Die URL, die ich verwendet habe meinen Dienst so etwas wie

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

war zu initialisieren ich diesen Dienst aus einem Python-Client auf demselben Rechner wie der Dienst ausgeführt zugreifen konnte. Ich könnte die WSDL von einem Browser sowohl lokal als auch von einem entfernten Rechner aus durchsuchen. Wenn ich jedoch versucht habe, von einem Remote-Computer aus auf diesen Dienst zuzugreifen, wurde der Fehler Verbindung verweigert. Das Seltsame war, dass ich in Wireshark sehen konnte, dass der Dienst die WSDL an den Remote-Client zurücksendet. Nach ein paar Stunden verschwenden, ich aktivierter Protokollierung

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) 

Die Protokolle zeigten, dass Schaum die Wsdl vom Server heruntergeladen, aber nach, dass es versucht, localhost zu verbinden: 8000. Und das erklärte die Verbindung verweigert Fehler. Ich habe gerade die URI auf der WCF-Server

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

Und das mein Problem gelöst

Verwandte Themen