专栏首页python3python在webservice接口测

python在webservice接口测

    接口测试第二波,webservice接口来咯,欢迎各位小伙伴吐槽~

    本次拿免费的互联网国内手机号码归属地查询WEB服务webservice接口做例子,当然有很多免费webservice接口可以供大家使用,百度一下就有N多,手机号码归属地查询wsdl地址如下:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl

打开后可以看到有一个getMobileCodeInfo方法,入参是一个电话号码,当然也可以通过python调用来看到,接下来会介绍。使用python的suds模块,这是一个第三方模块,需要安装,如果安装了setuptools或pip,可以直接用easy_install 或pip命令安装,easy_install suds或pip install suds即可,如果没有安装,可以去官网上下载,http://pypi.python.org/pypi/suds,下载后进入suds目录python setup.py install 即可。

    由于每个接口方法都是不一样的,入参也不一样,所以没有办法像http rest接口一样写成一个通用类,只能在测试的时候修改接口的方法名和入参了。

    首先我们来看一下这个wsdl下都有哪些方法:

suds.client Client#导入suds.client 模块下的Client类
client = Client()#创建一个wsdl对象
print client#打印这个对象的详细信息

打印出来的结果如下:

Suds ( https://fedorahosted.org/suds/ )  version: 0.4 GA  build: R699-20100913

Service ( MobileCodeWS ) tns="http://WebXml.com.cn/"

   Prefixes (1)

      ns0 = "http://WebXml.com.cn/"

   Ports (2):

      (MobileCodeWSSoap)

         Methods (2):

            getDatabaseInfo()

            getMobileCodeInfo(xs:string mobileCode, xs:string userID, )

         Types (1):

            ArrayOfString

      (MobileCodeWSSoap12)

         Methods (2):

            getDatabaseInfo()

            getMobileCodeInfo(xs:string mobileCode, xs:string userID, )

         Types (1):

            ArrayOfString

=================================================

从上面的结果可以看到有两个方法一个是getDatabaseInfo()没有入参,一个是getMobileCodeInfo(),入参是一个字符串,手机号和用户id,免费用户的用户id可以不填,下面就是用来测试的代码了,注释也很详细:

from suds.client import Client #导入suds.client 模块下的Client类
Mobile_url="http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl"#手机号码归属地
QQ_url="http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"#qq在线状态
Random_url='http://webservice.webxml.com.cn/WebServices/RandomFontsWebService.asmx?wsdl'#生成随机字符串
def WsTest(url,Wsname,data):
    '''
    :param url: wsdl地址
    :param Wsname: 方法名,做保存结果的文件名
    :param data: 方法的传入参数
    :return:
    '''
    client = Client(url)#创建一个webservice接口对象
    client.service.getMobileCodeInfo(data)#调用这个接口下的getMobileCodeInfo方法,并传入参数
    req = str(client.last_sent())#保存请求报文,因为返回的是一个实例,所以要转换成str
    response = str(client.last_received())#保存返回报文,返回的也是一个实例
    print response#打印返回报文
    WriteRes(Wsname,req,response,data)#调用写入结果函数,把方法名、请求报文、返回报文、和入参传进去
def WriteRes(WsName,req,response,data):
    '''
    :param WsName: 接口的方法名
    :param req: 请求报文
    :param response: 返回报文
    :param data: 传入的数据
    '''
    res = response.find(data)#从返回结果里面找data,如果找到的话返回data的下标,也就是索引,找不到的话返回-1
    fw_flag = open('/tmp/WsTestRes/WsTestRes.txt','a')#以追加模式打开写入结果文件
    if res>0:
        fw_flag.write('%s  pass'%WsName)#如果在返回报文中找到data的话,就写pass,否则就写fail
    else:
        fw_flag.write('%s  fail'%WsName)
    fw_flag.close()#关闭结果文件
    fw_result = open('/tmp/WsTestRes/%s_result.txt'%WsName,'w')#打开以接口方法命名的文件
    fw_result.write(req+'\n'*3+response)#保存请求报文和返回报文,\n*3的意思是换行三次
    fw_result.close()#关闭结果文件
if __name__ =='__main__':
    WsTest(Mobile_url,'getMobileCodeInfo','110')

如果传入的是一个合法的手机号,执行后会看到类似下面的返回结果,所有判断成功或者失败就可以用手机号来判断,所以上面写的如果在返回报文中找到手机号的话,就说明调用成功了,可以把该方法pass。

<?xml version="1.0" encoding="UTF-8"?>

<soap:Envelope>

   <soap:Body>

      <getMobileCodeInfoResponse xmlns="http://WebXml.com.cn/">

         <getMobileCodeInfoResult>18612538722:北京 北京 北京联通GSM卡</getMobileCodeInfoResult>

      </getMobileCodeInfoResponse>

   </soap:Body>

</soap:Envelope>

=================================================

下面是输入非法的手机号返回的结果,说明根据返回报文中有没有手机号来判断是否通过是靠谱的。

<?xml version="1.0" encoding="UTF-8"?>

<soap:Envelope>

   <soap:Body>

      <getMobileCodeInfoResponse xmlns="http://WebXml.com.cn/">

         <getMobileCodeInfoResult>手机号码错误 http://www.webxml.com.cn</getMobileCodeInfoResult>

      </getMobileCodeInfoResponse>

   </soap:Body>

</soap:Envelope>

=================================================

over,当然如果导入threading(多线程)模块就能做一个简单的压力测试了,下次会更新哦

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • InfoPath Inside View

    Microsoft Office InfoPath有很多无奈的缺陷。比如无法搜索一个指定的data field,无法查看一个data field 绑定的Cont...

    py3study
  • python爬取有道词典

    打开Google浏览器,找的有道词典的翻译网页(http://fanyi.youdao.com/)

    py3study
  • 我所使用的Python扩展程序 for

    ActivePython-3.1.3.5-win32-x86.msi bzr-2.3.1.win32-py2.6.exe CherryPy-3.2.0-py...

    py3study
  • R中t()转置后为什么会变成字符型数据

    数值型数据全部变成了字符型,怎么回事?其实是因为cluster那一列数据并不是数值型,而是字符型。因为这一列代表某一群细胞,如cluster0.所以才会出现这个...

    生信编程日常
  • R语言与机器学习(分类算法)决策树算法

    决策树定义 首先,我们来谈谈什么是决策树。我们还是以鸢尾花为例子来说明这个问题。 ? 观察上图,我们判决鸢尾花的思考过程可以这么...

    机器学习AI算法工程
  • 在Windows下安装MinGW并使用make命令

    官网下载软件:https://osdn.net/projects/mingw/releases/

    xing.org1^
  • 深入理解几种单例模式的实现方式

    饿汉式的单例实现方式就是说在类加载的时候就已经创建并初始化好了,所以实例的创建过程是线程安全的

    测试轩
  • CNN 究竟“看”到了什么?曲线检测器是否为可解释性带来了出路?

    随着深度学习研究步入深水区,人们逐渐从简单地应用 CNN 转向对其内在视觉机理与可解释性的探究。本文是一篇来自 OpenAI 研究团队的实验性论文,从数据、可视...

    AI科技评论
  • 总是做一些切图静态页面,写一点js特效,感觉工作内容很肤浅,要不要换工作?

    首先说结论,我的意见是“不要换”。 在前端开发来讲,肤浅的内容也可以写的很深刻。别的不说,就拿上周先行者计划的那个mask遮罩组件来讲,它多简单,多肤浅啊,就是...

    web前端教室
  • Android语音声波控件 Android条形波控件

    代码不多 , 没什么技术含量 , 权当给您省时间了 , 直接复制粘贴就能用 , 直接上代码:

    砸漏

扫码关注云+社区

领取腾讯云代金券