使用Suds-Python从wsdl文件生成SOAP-xml

使用Suds-Python从wsdl文件生成SOAP-xml,python,soap,wsdl,suds,Python,Soap,Wsdl,Suds,我是使用Python的测试团队的一员。现在我们需要使用Python自动化SOAP调用。我有一个WSDL文件,我们有一些CSV中的测试数据 因此,对于任何特定的方法,我希望从CSV获取数据,并将其作为方法的参数传递给服务,触发调用,然后输出响应 我想要的帮助是,我们可以从给定的WSDL文件为特定方法生成SOAP xml吗?如果是,我该如何做?如果您的CSV文件具有与您要测试的WSDL方法的参数相对应的列标题,您可以轻松地执行以下操作: import csv import suds WSDL =

我是使用Python的测试团队的一员。现在我们需要使用Python自动化SOAP调用。我有一个WSDL文件,我们有一些CSV中的测试数据

因此,对于任何特定的方法,我希望从CSV获取数据,并将其作为方法的参数传递给服务,触发调用,然后输出响应


我想要的帮助是,我们可以从给定的WSDL文件为特定方法生成SOAP xml吗?如果是,我该如何做?

如果您的CSV文件具有与您要测试的WSDL方法的参数相对应的列标题,您可以轻松地执行以下操作:

import csv
import suds

WSDL = 'http://some.wsdl.somewhere/'
METHOD = 'theMethodToTest'
CSVFN = '/some/csv/file.csv'

client = suds.client.Client(WSDL)

with open(CSVFN, 'rb') as f:
    reader = csv.DictReader(f)
    for kwargs in reader:
        getattr(client.service, METHOD)(**kwargs)
更新1

如果要将CSV平面文件结构映射到复杂结构,则可以使用CSV标题指示映射

您可以映射到dict并将其传递给WSDL方法,如SUDS文档中所述:

您的CSV标题可能类似于:

person.name.first,person.name.last,person.age,person.phone.0.npa,person.phone.0.nxx,person.phone.0.number
"Elmer","Fudd",35,202,555,1212
这将转化为:

kwargs = {
    'person': {
        'name': {'first':'Elmer', 'last':'Fudd'},
        'age': 35,
        'phone': [
            {'npa':202, 'nxx':555, 'number':1212},
        ]
    }
}
但是,我没有示例代码可以提供给您…:-

您可能还会遇到一个与类型相关的问题。您可能需要将CSV文件文本中的数据显式转换为int、float、bool

一个想法是在标题中指明类型:

person.name.first,person.name.last,person.age:int,person.phone.0.npa:int,person.phone.0.nxx:int,person.phone.0.number:int,married:bool

或者:将测试数据存储在XML中…

是的,SOAP客户端为特定调用生成XML。我收到以下错误:suds.WebFault:Server引发的错误:“处理时发生错误”。我传递的值是针对具有某些嵌套元素的复杂数据类型。