使用Suds库从WSDL文件生成SOAP XML
我在一个使用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中...