python接口测试wsdl
http和webservice接口测试有什么区别?
webservice的基础组成是http+xml
三要素:soap传输协议,uddi,wsdl(webservice描述语言xml格式)
优点:跨平台,跨程序
缺点:xml格式,传输和解析耗费资源大
一。wsdl接口怎样使用python测试
官网文档地址:https://fedorahosted.org/suds/wiki/Documentation
1.什么是wsdl接口,本质是xml,框架很多比如cxf
2.python怎样调用wsdl接口,suds模块
入门例子,了解下wsdl和suds的样子
查询ip归属地
>>> import suds
>>> url="http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx?wsdl"
>>> client=suds.client.Client(url)
>>> print client
打印结果:描述的很清楚,包括seivice,port 和method,直接调用你需要的
Suds ( https://fedorahosted.org/suds/ ) version: 0.4 GA build: R699-20100913 Service ( IpAddressSearchWebService ) tns="http://WebXml.com.cn/"
Prefixes (1)
ns0 = "http://WebXml.com.cn/"
Ports (2):
(IpAddressSearchWebServiceSoap)
Methods (3):
getCountryCityByIp(xs:string theIpAddress, )
getGeoIPContext()
getVersionTime()
Types (1):
ArrayOfString
(IpAddressSearchWebServiceSoap12)
Methods (3):
getCountryCityByIp(xs:string theIpAddress, )
getGeoIPContext()
getVersionTime()
Types (1):
ArrayOfString
调用方法:
res=client.service['IpAddressSearchWebServiceSoap12'].getCountryCityByIp('8.8.8.8')
print res
返回结果:
(ArrayOfString){
string[] =
"8.8.8.8",
"美国 加利福尼亚州山景市谷歌公司DNS服务器",
}
2.如果wsdl比较复杂,比如有多个service和port,使用client.service[service][port].getBank(),
如果不指定,默认是第一service的第一个port的第一个method
下面的就可以写成这样
client.service['OtherBLZService']['soap'].getBank()
client.service[1][0].getBank()
Suds - version: 0.3.7 build: (beta) R550-20090820 Service (BLZService) tns="http://thomas-bayer.com/blz/"
Prefixes (1)
ns0 = "http://thomas-bayer.com/blz/"
Ports (2):
(soap)
Methods (1):
getBank(xs:string blz, )
(soap12)
Methods (1):
getBank(xs:string blz, )
Types (5):
getBankType
getBankResponseType
getBankType
getBankResponseType
detailsType Service (OtherBLZService) tns="http://thomas-bayer.com/blz/"
Prefixes (1)
ns0 = "http://thomas-bayer.com/blz/"
Ports (2):
(soap)
Methods (1):
getBank(xs:string blz, )
(soap12)
Methods (1):
getBank(xs:string blz, )
Types (5):
getBankType
getBankResponseType
getBankType
getBankResponseType
detailsType
复杂参数:
Suds - version: 0.3.3 build: (beta) R397-20081121 Service (WebServiceTestBeanService) tns="http://test.server.enterprise.rhq.org/"
Prefixes (1):
ns0 = "http://test.server.enterprise.rhq.org/"
Ports (1):
(Soap)
Methods:
addPerson(Person person, )
echo(xs:string arg0, )
getList(xs:string str, xs:int length, )
getPercentBodyFat(xs:string name, xs:int height, xs:int weight)
getPersonByName(Name name, )
hello()
testExceptions()
testListArg(xs:string[] list, )
testVoid()
updatePerson(AnotherPerson person, name name, )
Types (23):
Person
Name
Phone
AnotherPerson
首先看下type里参数是什么样子的
c=suds.client.Client(url)
person=c.factory.create('Person')
print person
(Person)=
{
phone = []
age = NONE
name(Name) =
{
last = NONE
first = NONE
}
}
赋值有2中方法
1.基本:
phone = client.factory.create('Phone')
phone.npa = 202
phone.nxx = 555
phone.number = 1212
name = client.factory.create('Name')
name.first = 'Elmer'
name.last = 'Fudd'
person.name = name
person.age = 35
person.phone = [phone] json person{}
phone={'npa':202,'nxx':222,'number':'2222',}
name={'first':'li','last':'mi'} person['name']=name
person['age']=22
person['phone']=[phone,]
使用jmeter测试webservice接口,可查看我后来写的
https://www.cnblogs.com/xueli/p/9681526.html
二。http接口
使用requests
1.无参数get
r = requests.get('http://httpbin.org/get')
print r.text {
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, compress",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.2.1 CPython/2.7.5 Windows/7"
},
"origin": "223.202.116.5",
"url": "http://httpbin.org/get"
}
有参数get
r = requests.get('http://www.so.com/s',params = {'q':'wwwww'})
print r.text
2.post,参数是字典
payload = {'name':'mmmmmmiiiiii','con':'hello'}
r = requests.post("http://httpbin.org/post", data=payload)
print r.text {
"args": {},
"data": "",
"files": {},
"form": {
"con": "hello",
"name": "mmmmmmiiiiii"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, compress",
"Content-Length": "",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.2.1 CPython/2.7.5 Windows/7"
},
"json": null,
"origin": "223.202.116.5",
"url": "http://httpbin.org/post"
}
post,参数是json
>>> payload = {'name':'tttttlililililili','con':'hello'}
>>> import json
>>> r = requests.post('http://httpbin.org/post', data=json.dumps(payload))
定制headers,使用headers参数来传递
headers = {'content-type': 'application/json'}
r = requests.post(url, data=json.dumps(payload), headers=headers)
python接口测试wsdl的更多相关文章
- Python接口测试实战5(下) - RESTful、Web Service及Mock Server
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- Python接口测试实战1(上)- 接口测试理论
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- Python接口测试实战4(下) - 框架完善:用例基类,用例标签,重新运行上次失败用例
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- Python接口测试实战5(上) - Git及Jenkins持续集成
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- Python接口测试实战4(上) - 接口测试框架实战
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- Python接口测试实战3(下)- unittest测试框架
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- Python接口测试实战3(上)- Python操作数据库
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- Python接口测试实战2 - 使用Python发送请求
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- Python接口测试实战1(下)- 接口测试工具的使用
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
随机推荐
- 以软件周期C开发周期说明不同测试的使用情况
我们所使用的测试方法有以下几种 功能测试 单元测试(使用场景:在编码阶段,每完成一段相对完整的代码块时,单元测试几乎贯穿整个编码过程) 黑盒测试(使用场景:在编码阶段,没完成一各相对独立的模块时,例如 ...
- Decorate Pattern 装饰者模式
装饰模式的定义: 动态地将责任附加到对象向,若要扩展功能,装饰模式提供了比继承更有弹性的替代方案. 遵循的设计原则是开闭原则,也是对扩展开放,对修改关闭. 下面是类图 示例代码 /** *定义被装饰者 ...
- bzoj 4066: 简单题
#include<cstdio> #include<iostream> #include<cstdlib> #include<algorithm> #d ...
- 前端工程师IE6兼容性问题随笔(未完待续)
1 height.在IE6下元素高度小于19px的时候,会被当做19px来处理.解决办法:用overflow:hidden;来处理.box{height:2px;background:red;over ...
- 在PHP中如何实现在做了么个操作后返回到指定页面
我们经常会碰到类似用户在没有登录的情况下进行提问.评论,需要用户登录后返回刚才浏览的网页,这种功能用cookie保存当前url地址来实现.我用的是jquery,读者需要懂点jquery中的ajax请求 ...
- Java基础之类的初始化顺序
对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序依次是 (静态变量.静态初始化块)>(变量.初始化块)>构造器 对于继承的情况: 1. 父类--静态变量 2. 父 ...
- Andriod Studio adb.exe,start-server' failed -- run manually if necessary 解决
首先查看了我的任务管理器,共有三个adb的程序在运行: 错误提示的是 Andriod Studio 中的adb.exe启动失败,于是,去关掉另外两个adb.exe,两分钟左右后,又出现了三个adb. ...
- Python笔记-built-in函数,文件操作,lambda函数
Built-In: i = abs(123) print(i) j = abs(-123) print(j)#123#123 #all,需要传一个可迭代的东西,里面所有的值是真,返回真 r1 = al ...
- Leetcode_实现zigzag的转换_20161228
#include<iostream> //#include<valarray> #include<vector> #include<string> us ...
- CDS
very nice artical talk about mergechangelog and cleardataset Delta and Data http://www.cnblogs.com/y ...