接口测试 利用 python 的第三方库 suds 去测试 webservice 接口,部分接口不能正确传入参数,希望有大神能指导下,先在此谢过!问题如下

小小测试 · 2018年01月29日 · 最后由 我去催饭 回复于 2018年01月29日 · 2658 次阅读

最近遇到 webservice 接口,想用 python 的第三方库实现测试。遇到如下问题,希望能有大神指导下。谢谢

在 soapui 上的报文截图:
查询接口:

认证查询接口:

自己写的 python 脚本(看到网上资料写的):

运行 python 脚本时,认证查询接口使用字典的方式传参可以成功运行。但是运行查询接口却报错,(查询接口 Entities 是可以同时传入多个的,进行批量查询),请问大神这种该怎么传参才能正常运行呢

报错如下:(其中圈出来的是接口参数名,报错的时候这个是不固定的,有可能是其他参数名)

共收到 15 条回复 时间 点赞

自己先顶一下,大神快来啊,坐等大神

批量查询的那个接口,数据外面加个 [ ] 套住,它支持查多条数据,你应该要传列表而不是字典。

Felix Lu 回复

试过,还是会报一样的错

Felix Lu 回复

你意思是这样
也试了还是报一样的错误

是,看起来你的 IsForce 放错地方了,要在列表外面、或直接删掉(是可选参数吧?)

Felix Lu 回复

必填参数,在一个群里问了下,有人说是因为 suds 库是老版本的,要更新个新的。可以这样么

IsForce 移到列表外,这个试了么?

Felix Lu 回复

移到列表外该怎么写啊,我正在尝试,把格式写不对

Felix Lu 回复

确实参数是你说的那样,isforce 是单独出来的一个参数不能写到一起。所以我这么写了
首先最外面的{}表示用字典传整个参数,然后 [] 表示一个实体(多个 [] 就是多个实体),[] 中的{}表示实体内的参数,最后 isforce 这个参数再单独写在{}里。但是这么写会报错 invalid syntax(无效的语法);应该是格式哪里错了,

按照下面的方法试一下呢?

InvoiceQuerydata = {
    "IsForce": False,
    "Entities": {
        "AccountAmount": "",
        "AuthenticationAmount": "",
        "CheckDigit": "183613",
        "InvoiceCode": "012001700111",
        "InvoiceNumber": "40287711",
        "InvoiceType": "002",
        "PrintDate": "2017-11-02",
        "TotalAmount": "63.22"
    }

}
query = client.service.InvoiceQuery(**InvoiceQuerydata)
0x43 回复

这样写也不行,

截个 SoapUI 写了参数的图,和你的 python 写的参数对比一下看看是哪里不同。怀疑还是你传参数的格式不对

非常感谢大大家帮忙,已经搞定了,确实是格式没写对,下面发一个 soapui 和 python 传参的格式对比:

我去催饭 回复

谢谢,已经搞定,

小小测试 回复

😊 是吧 我也踩过这个坑

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册