自动化遇到 webservice 接口怎么办?

本贴最后更新于 1479 天前,其中的信息可能已经水流花落

自动化遇到webservice接口怎么办?

前言:

大家做接口自动化的时候,测的大多数接口都是基于http类型协议的,在python中使用requests去请求接口还是非常简单的。最近有部分小伙伴反映在工作中碰到了webservice的接口,webservice是基于soap协议的,表示不知道怎么用python去做自动化,其实不管什么类型的接口实现自动化的思路都是一样的,在接口请求上会有一些有区别。

SOAP协议其实就是在http协议的基础上,基于XML来进行数据传输的一种简易协议(大家可以自行扩展学习),在python2中有一个叫做suds的库,可以创建soap协议的客户端,用来请求webservice的接口,虽然python3中不再维护suds这个库了,但是python中依然维护了一些suds的分支,比如说suds-jurko、suds-py3等等。接下来就给大家详细的介绍一下如何使用suds-py3来请求webservice的接口

一、suds-py3安装

关于suds-py的安装,安装好python之后,直接在命令行使用pip进行安装就可以了。

二、WSDL文档的介绍

WebService的接口是基于SOAP协议,每个服务地址都有一个对应WSDL文件,WSDL是一个遵循WSDL-XML模式的XML文挡,是用来精确描述Web服务的文档。一个WSDL文档通常包含8个重要的元素,即definitions、types、import、message、portType、operation、binding、service元素。这些元素嵌套在definitions元素中,如下案例所示:

1603702962174.png

WSDL文档中我们可以看到这个webservice的地址中提供了那些服务(接口),每个服务需要一些什么样的参数等等。和HTTP不同的是一个webservice地址中提供了多个服务(接口),我们要去使用那个服务(接口),调用对应的方法进行访问即可,关于WSDL文档如何去看大家也可以自行扩展学习这边不做过多的扩展,重点给大家介绍在python中如何去请求webservice接口。

三、suds的请求webservice

1、案例接口

为了方便大家学习,我边从网上找了2个webservice接口的url地址来给大家做案例演示:

2、案列一

这边我们以qq登录状态查询这个服务地址为例,给大家来讲解;要知道一个webservice的地址中有多少个接口,我们可以直接浏览访问url地址看wsdl的描述文档,我们也可以借助于soapUI这个工具,当然我们也可以通过suds库创建一个客户端对象,访问该地址去看:

from suds import client

url = "http://ws.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"
# 访问url地址返回一个client对象
web_s = client.Client(url)
# 打印客户端对象,就可以看到该地址下所有的服务(接口)
print(web_s)

1603705026079.png

from suds import client

url = "http://ws.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"
# 访问url地址返回一个client对象
web_s = client.Client(url)
# 准备参数,请求接口
res = web_s.service.qqCheckOnline(qqCode='121278987')
# 获取返回的结果:
print(res)

3、案例二

上面的qq状态查询是一个比较简单的案例,接口的请求参数和返回参数都比较简单,那么接下来看一个稍微复杂一点的接口,天气预报查询:

4、自定义类型的请求参数

上面2个案例,接口的请求参数都是比较标准的字符串类型,调用的时候直接传入即可,有些服务的参数可能是服务命名空间中自定义的参数类型,那么调用相关服务之前就需要处理参数了

1 操作
mslemonban 在 2020-10-27 16:21:40 更新了该帖
回帖
请输入回帖内容 ...