• 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)
  • 相关阅读:
    身份证、姓名、手机号、地址、邮箱脱敏处理
    使用Document解析xml
    java_获取某年开始和结束时间
    java_获取某月开始和结束时间
    java_获取本周开始和结束时间
    java_获取明天开始和结束时间
    java_获取昨天开始和结束时间
    java_获取今天开始和结束时间
    java_给时间加上几天/几小时/几分钟
    在Ue4里面使用自定义鼠标
  • 原文地址:https://www.cnblogs.com/xueli/p/6145211.html
Copyright © 2020-2023  润新知