使用SUDS测试WSDL

时间:2010-01-14 11:27:58

标签: python soap suds

有没有人知道一个好的SUDS教程。我试图在WSDL文件上运行测试,我无法找到有关如何执行此操作的任何信息。 SUDS与SOAPy有很大的不同吗?有人会建议它对存储在WSDL文件中的函数运行冒烟测试。

我已经读过Python 2.6+不再支持SOAPAy。这是真的吗?

我有一个我输入的WSDL文件:

from suds.client import Client

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

client.service.GetNode()

我收到了这个错误:

    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>

有谁知道为什么会这样?

我可以通过浏览器连接到此文件。我已经安装了所有的泡沫包。是否还需要其他设置?

3 个答案:

答案 0 :(得分:16)

Suds使用非常简单。

from suds.client import Client

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

someMethod是WSDL中描述的方法的名称。

答案 1 :(得分:2)

拒绝连接表示服务器不在那里。您可以在浏览器中访问http://10.51.54.50/ptz.wsdl还是通过curl访问?如果没有,首先先运行SOAP服务,然后再试一次。

答案 2 :(得分:2)

在我的情况下,这是一个愚蠢的错误(就像任何其他错误一样)。

我用来初始化服务的网址就像

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

我可以从与服务在同一台机器上运行的python客户端访问此服务。我可以在本地和远程计算机上浏览浏览器中的wsdl。但是,当我尝试从远程计算机访问此服务时,我收到连接拒绝错误。奇怪的是,在wireshark中,我可以看到服务将wsdl发送回远程客户端。 浪费了几个小时后,我启用了日志记录

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)

日志显示suds从服务器下载了wsdl,但之后它尝试连接到localhost:8000。这解释了连接拒绝错误。我刚刚将WCF服务器上的URI更改为

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

这解决了我的问题