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

时间:2014-09-05 14:14:50

标签: python soap wsdl suds

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

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

我想要的帮助是否可以从给定的WSDL文件中为特定方法生成SOAP xml?如果是这样,我该怎么做?

1 个答案:

答案 0 :(得分:0)

如果您的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 flat 文件结构映射到复杂结构,则可以使用CSV标头指示映射。

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

您的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格式存储您的测试数据......