http://www.cnblogs.com/liulinghua90/p/5823021.html
http://blog.51cto.com/zhxsnn/1609820
一、准备环境
webservice接口测试,需要用到suds库,网上百度的各种suds库都没法安装,我这里的Python3.5版本,所以安装不了那些suds库也没有办法在线安装,所以这里就提供一个大家都可用的方法和suds库。
1)下载suds库,地址:http://pypi.python.org/packages/source/s/suds-jurko/suds-jurko-0.4.1.jurko.4.zip#md5=769689edca81c34c0421a4145b08c264,文件名为:suds-jurko-0.4.1.jurko.4.zip
2)解压压缩包,放到Python安装路径下的scripts文件夹下面。
3)然后在cmd命令行中,进入到suds-jurko-0.4.1.jurko.4文件下面,输入命令: python setup.py install
4)安装成功
5)注意:如果在py中写代码 import suds报错,就要把suds-jurko-0.4.1.jurko.4文件夹下面的dist、suds以及suds_jurko.egg-info这三个文件夹,拷贝到Lib 下面的site-packages路径下面,就可以正常访问了。
6)一切准备就绪,可以开始测试啦!
二、使用suds库来测试webservice接口
1)引入suds库,代码如下:
1
|
from
suds.client
import
Client
|
2)创建一个webservice对象,来调用webservice里面的各类接口
1
2
|
user_url
=
"http://120.24.235.105:8080/finance-user_info-war-1.0/ws/financeUserInfoFacade.ws?wsdl"
#这里是你的webservice访问地址
client
=
Client(user_url)
#Client里面直接放访问的URL,可以生成一个webservice对象
|
3)打印出这个wsdl地址里面的所有接口信息:
1
|
print
(client)
#打印所webservice里面的所有接口方法名称,结果如下截图所示:
|
4)利用soapui来看看webservice某个接口的组成和参数,其中一个注册接口,如下所示:
一共有6个参数,如果要在Python里面来传递这种参数,如何组装拼接,接着往下看。
5)如何传递参数值:
1
|
t
=
{
"channel_id"
:
2
,
"ip"
:
"129.45.6.7"
,
"mobile"
:mobile ,
"pwd"
:
"123456"
,
"user_id"
:
"shabicu8"
,
"verify_code"
:”
123456
”}
#用字典的方式传值
|
6)如何在Python中调用注册这个接口服务:
1
2
3
4
|
result
=
client.service.userRegister(t)
#client这个对象 ,调用service这个方法,然后再调用userRegister这个接口函数,函数里面传递刚刚我们准备
#好的得参数字典 t
print
(result)
#打印返回结果
|
7)最后的返回结果打印如下:
其实测试webservice接口有很多种,但是我写出的这个,相对而言会比较的简单好理解。大家也可以参考这篇文章,跟官网的说明文档差不多,但是进行了一些详细的说明:
http://www.chengxuyuans.com/Python/64773.html(推荐)
接口测试第二波,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>
=================================================