webservice接口测试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": "27", 
    "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)
原文地址:https://www.cnblogs.com/xueli/p/6145211.html