2014-09-05 127 views
0

我是使用Python的测试团队的一员。现在我们需要使用Python自动化SOAP调用。我有一个WSDL文件,我们有一些CSV格式的测试数据。使用Suds Python从wsdl文件生成SOAP xml

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

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

+0

是的,SOAP客户端为特定的调用产生XML。 – 2014-09-05 14:34:08

回答

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方法: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文件(文本)到整数,浮点,布尔转换...

一个想法是,以指示头类型:

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测试数据...

+0

我收到以下错误:suds.WebFault:服务器发生故障:'处理时发生故障。' 我传递的值是具有一些嵌套元素的复杂数据类型。 – 2014-09-05 16:17:34