python在测试中的应用_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下都有哪些方法:from suds.client import 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可以不填,下面就是用来测试的代码了,注释也很详细:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

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')#以追加模式打开写入结果文件

ifres>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')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值