2010-01-14 4 views
6

Est-ce que quelqu'un connaît un bon didacticiel SUDS? J'essaie d'exécuter des tests sur des fichiers WSDL et j'ai des difficultés à trouver des informations sur la façon de procéder. SUDS est-il très différent de SOAPy et est-ce que quelqu'un le recommande pour exécuter des tests de fumée sur les fonctions stockées dans les fichiers WSDL.Utilisation de SUDS pour tester WSDL

J'ai lu que SOAPAy n'est plus supporté dans Python 2.6+. Est-ce vrai?

Je dispose d'un fichier WSDL Je suis entré:

from suds.client import Client 

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

client.service.GetNode() 

J'ai eu cette erreur:

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> 

Est-ce que quelqu'un sait pourquoi cela se passe?

Je peux me connecter à ce fichier via mon navigateur. J'ai installé tous les paquets de mousse. Y a-t-il d'autres configurations requises?

+0

'erreur urlopen [Errno 111] Connexion refused' semble que vous n'êtes pas autorisé à accéder à la propriété intellectuelle. –

+0

Non, la configuration supplémentaire n'est pas requise. –

+0

avez-vous été en mesure de développer le cadre de test à base de mousse? si oui, votre résultat at-il un format XML de type junit? – kamal

Répondre

15

Suds est très simple à utiliser.

from suds.client import Client 

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

someMethod est le nom d'un procédé tel que décrit dans le document WSDL.

2

La connexion refusée indique que le serveur n'est pas présent. Pouvez-vous accéder à http://10.51.54.50/ptz.wsdl dans un navigateur ou via curl? Si ce n'est pas le cas, commencez par exécuter le service SOAP en premier, puis réessayez.

2

Dans mon cas c'était une erreur stupide (comme n'importe quel autre bug).

L'URL que je l'avais utilisé pour initialiser mon service était quelque chose comme

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

je pouvais accéder à ce service à partir d'un client de python en cours d'exécution sur la même machine que le service. Je pourrais naviguer le wsdl à partir d'un navigateur à la fois localement et à partir d'une machine distante. Cependant, lorsque j'ai essayé d'accéder à ce service à partir d'une machine distante, j'ai eu une erreur de connexion refusée. La chose étrange était que dans wireshark, je pouvais voir que le service renvoie le wsdl au client distant. Après avoir perdu quelques heures, je vous connecter permis

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) 

Les journaux ont montré que suds téléchargé le fichier WSDL du serveur, mais après qu'il a essayé de se connecter à localhost: 8000. Et cela a expliqué la connexion a refusé l'erreur. Je viens de modifier l'URI sur le serveur WCF à

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

Et qui a résolu mon problème

Questions connexes