1:在Python接口自动化中,对于soap协议的xml的请求我们可以使用Suds Client来实现,其soap协议传参的类型基本上是有2种:
第一种是传参,不需要再创建啥,
第二种就是ns0类型的,如果直接以dict类型传进去的话是,里面的程序是无法将对应的参数一一对应上的,所以我们这边需要创建一个工厂,然后把这些工厂当做参数传入进去。下面就进行一步步解释一下这个步骤
Service ( BssUserManageServiceService ) tns="http://service.bos.webservice.os.ot.fontw.com/"
Prefixes (1)
ns0 = "http://bssUserManage.service.bos.webservice.os.ot.fontw.com/"
Ports (1):
(BssUserManageServicePort)
Methods (2):
createUserApi(ns0:custBeanFh custBean, ns0:userBeanFh userBean, ns0:acctBeanFh acctBean, ns0:orderBeanFhArray orderBeanArray, xs:string sequenceID, )
modifyUserPwdApi(xs:string userID, xs:string pwd, xs:string sequenceID, )
Types (7):
ns0:Exception
ns0:acctBeanFh
ns0:custBeanFh
ns0:orderBeanFh
ns0:orderBeanFhArray
ns0:resultBeanFh
ns0:userBeanFh
2:以第一个createUserApi方法为例:
这个方法的参数类型就是ns0,代码如下:
# 导入suds库
from suds.client import Client
user_url = "http://192.168.0.1:7008/oss/rest/bss?wsdl" # 这里是你的webservice访问地址
client = Client(user_url) # Client里面直接放访问的URL,可以生成一个webservice对象
print(client) # 打印所webservice里面的所有接口方法名称
# 对每个含有 ns0的参数类型进行创建一个工厂
userBean = client.factory.create("ns0:userBeanFh")
userBean_temp = createuserApi ["userBean"]
custBean = client.factory.create("ns0:custBeanFh")
custBean_temp = createuserApi ["custBean"]
orderBeanArray = client.factory.create("ns0:orderBeanFhArray")
orderBeanArray.item = createuserApi ["orderBeanArray"]
# 把对应的参数数据传进你所要调用的方法即可
createuserApi = {
"custBean": {"custID": "custid08", "custName": "custname08", "custTelephone": "88888888"},
"userBean": {"userID": "100000", "userName": "Test", "password": "123456789"},
"sequenceID": 20170831205310
}
# 调用对应的方法
result = client.service.createUserApi(orderBeanArray=orderBeanArray, acctBean=userBean_temp ,
userBean=userBean_temp ,
custBean=custBean_temp , sequenceID=param["sequenceID"])
官方文档参考:https://webkul.com/blog/python-suds-client/
自己之前的操作是没有创建其工厂,就直接传参数进去,导致其一直没有跑通过,最后得已于自己导师的帮助才得以解决,在此非常感谢他。