【问题标题】:Using SUDS to test WSDL使用 SUDS 测试 WSDL
【发布时间】:2010-01-14 11:27:58
【问题描述】:

有谁知道一个好的 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>

有人知道为什么会这样吗?

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

【问题讨论】:

  • urlopen error [Errno 111] Connection refused 听起来您不允许访问 IP。
  • 不,不需要额外的设置。
  • 您是否能够开发基于 suds 的测试框架?如果是这样,您的结果是否具有 junit 类型的 XML 格式?
  • @kamal - 我用泡沫进行了烟雾测试。我用单元测试和泡沫。如果您查看我的一些基于泡沫的答案,您可以看到使用了什么。

标签: python soap suds


【解决方案1】:

Suds 使用起来非常简单。

from suds.client import Client

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

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

【讨论】:

    【解决方案2】:

    连接被拒绝表示服务器不存在。您可以在浏览器中或通过 curl 访问 http://10.51.54.50/ptz.wsdl 吗?如果没有,首先让 SOAP 服务运行,然后重试。

    【讨论】:

      【解决方案3】:

      就我而言,这是一个愚蠢的错误(就像任何其他错误一样)。

      我用来初始化服务的 URL 类似于

      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");
      

      这解决了我的问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多