Python3接口测试框架之suds封装webservice请求类

前言:requests库

Python中的requests库能很友善的对http协议的接口发送请求,但对webservice却不那么友好,
应该说不是不能使用requests库来完成webservice的请求,只是相对较复杂些,需要都xml格式的数据解析。

工具:soapui、jmeter、loadrunner

如果你想做某件事,恰巧某人也在做且已做好,那么你懂的,我们可以拿来借鉴,以此来实现自己的需求。

顺带提醒一下,别人开发好的工具是工具,自己再开发一个功能/工具那还是工具;唯一的区别在于后者知道工具内部的实现逻辑。

所以给你一个webservice协议的接口请求该如何去做?先是要了解协议的相关知识点,再着手解决其中所遇到的问题。
  • soapui这个工具可以说是很友好的支持webservice协议的测试工作了:创建工程,输入wsdl路径,自动解析xml格式的参数;
    • 至于工具的下载、安装、使用过程的截图我就不一一举例了,一是没为了写东西特意安装,二是百度搜索一应俱全。
  • jmeter在比较早的版本中也支持,但是对于其中的参数部分没soapui自动识别的好;
  • 再说loadrunner也可以实现webservice协议接口测试,就是有点大材小用了,不解释。

中军:suds库

webservice接口测试,需要用到suds库,其只支持python2,如果是Python3版本,需要用到suds-jurko;

安装方式一:
pip install suds

安装方式二:
若是安装失败,则[下载suds文件](https://files.pythonhosted.org/packages/bc/d6/960acce47ee6f096345fe5a7d9be7708135fd1d0713571836f073efc7393/suds-0.4.tar.gz)是

注意:如果在py中写代码 import suds报错,就要把suds-jurko-0.4.1.jurko.4文件夹下面的dist、suds以及suds_jurko.egg-info这三个文件夹,拷贝到Lib下面的site-packages路径下面;

python3的安装方式:
如果使用python3,则一步到位:pip install suds-jurko
如果安装失败,则下载[suds-jurko文件](https://files.pythonhosted.org/packages/d0/88/f3bed9b494e0dae26bd55e5f3d527b8244208125024727267e8109956a11/suds-jurko-0.6.zip)

进入python/Script/suds-jurko,执行python setup.py install

如果from suds.clientimportClient,提示 ImportError:No module named version
最后pip install --upgrade suds-jurko

suds发送webservice请求示例

import json
from suds.client import Client
# webservice请求地址
url='http://120.24.225.115:9010/sms-service-war-1.0/ws/smsFacade.ws?wsdl'
# 创建webservice请求对象
soap=Client(url)
# 输出wsdl请求的所有方法
print(soap)
# webservice协议接口请求参数的表达方式也是dict数据类型
data={"client_ip":"121.11.1.1","tmpl_id":1,"mobile":13225113411}
# webservice请求方式:对象.service.function(params)
res=soap.service.sendMCode(data)
# 以下方式同样支持
# res="soap.service.sendMCode({})".format(data)
# 输出请求的响应报文,json序列化输出/ loads反序列化,str转成json对象
print(json.dumps(dict(res)))

后军:封装webservice接口请求类

#coding:utf-8
import json
from suds.client import Client


class HandleWebservice:
    '''
            定义一个webservice类型的接口处理类
    '''
    def __init__(self, api_addr, api_name):
        '''
                        构造器
        :param api_addr:接口地址
        :param api_name:接口名称
        '''
        self.api_name = api_name
        self.client = Client(api_addr)

    def soap_req(self, data):
        '''
        webservice请求处理方法
        :param data: 字典数据类型的请求体
        :return: json数据格式类型的str
        '''
        try:
#             res = eval("self.client.service.{}({})".format(self.api_name,data))
            res = "self.client.service.{}({})".format(self.api_name,data)
            res = eval(res)
  #          res_str = json.dumps(dict(res), ensure_ascii=False)
            return  dict(res)
        except Exception as e:
            res = e
#            res_str = json.dumps(dict(res.fault), ensure_ascii=False)
            return dict(res.fault)
        
if __name__ == '__main__':
    url='http://120.24.234.106:9010/sms-service-war-1.0/ws/smsFacade.ws?wsdl'
    data={"client_ip":"121.11.1.1","tmpl_id":1,"mobile":13131121321}
    soap=HandleWebservice(url,"sendMCode")
    res=soap.soap_req(data)
    print(res)

#     url1='http://120.24.225.105:9010/finance-user_info-war-1.0/ws/financeUserInfoFacade.ws?wsdl'
#     data1={"verify_code":1111,"user_id":"test001","channel_id":1,"mobile":13266515321,"pwd":"123456","ip":"11.1.1.1"}
#     soap=HandleWebservice(url1,"userRegister")
#     res1=soap.soap_req(data1)
#     print(res1)

    pass

你可能感兴趣的:(Python工具类集合,Python编程基础)