使用Suds库从WSDL文件生成SOAP XML

0 投票
1 回答
2469 浏览
提问于 2025-04-20 01:01

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

所以对于任何特定的方法,我想从CSV文件中获取数据,把它作为参数传递给服务,然后触发调用,最后输出响应结果。

我想要的帮助是,能不能从给定的WSDL文件中为某个特定的方法生成SOAP的XML?如果可以的话,我该怎么做呢?

1 个回答

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的扁平文件结构映射到一个复杂的结构,你可以用CSV的标题来表示这种映射。

你可以把它映射到一个字典,然后按照SUDS文档中的说明,把它传递给WSDL方法:使用字典的复杂参数

你的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文件中的数据(文本)明确转换成整数、浮点数、布尔值等...

一个想法是可以在标题中指明数据类型:

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中...

撰写回答