zoukankan      html  css  js  c++  java
  • request请求

    (1)安装命令:pip install requests

    (2)请求

    • params: 字典或bytes

    • **kwargs : headers,cookies,files,auth,timeout,allow_redirects,proxies(代理),verify(认证)

    • 伪装请求头:headers = {'User-Agent': 'Mozilla/5.0'}

    • verify(认证) : SSL证书报错不可见 -- urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) ; 不验证 --- verify = False

    • get发送请求: get(url,params=None,**kwargs)

    import requests
    res = requests.get(url = url_value, params = data) # 方法1
    res1 = requests(get,url,params) # 方法2
    • post发送请求: post(url,data,json=None,**kwargs)

      import requests
      res = requests.post(url = url_value,json = json_data) # 传入json格式参数,一般返回json,list
      res = requests.post(url = url_value,data = data) # 传入表单类型的参数(Content-Type:application/x-www-form-urlencoded;charset = UTF-8):传入字典需转为from_encoded【json.loads(),json.dumps()】
    • put发送请求:put(url,data=None,**kwargs)

    • patch发送请求: patch(url,data=None,**kwargs)

    • delete发送请求: delete(url, **kwargs)

    (3)获取响应数据

    • res.text:自动识别文本中的编码格式进行解码,有时候不准确,出现乱码( html,xml,json均可 ),获取的是字符串类型

    • res.content.decode("utf8"):需要指定解码方式,获取的是字符串类型

    • res.json():获取返回内容中的json数据(只能在返回数据是json的情况下使用),可以将json字符串转成对应的python类型的数据

    • res.headers : 响应头

    • res.status_code : 响应码

    (4)获取cookies: 类字典形式

    • 例如: <Cookies JSESSIONID = 22222222222222> 取JSESSIONID :res.cookies['JSESSIONID']

    (5)获取请求头: res.request.headers

    (6)请求需要登录才能访问的接口

    • http请求时无状态的,不会记录上次的请求数据

    • 使用requests发送请求,不会记录上次请求的cookie信息,需要使用session对象来发送请求

    (7)session对象发送请求

    • session对象可以自动传递cookie信息(下一次请求会自动携带上次请求的cookie)

    (8)请求数据提取:jsonpath,数据格式转换json

    • json类型数据

      • json对象:{ key:value }

      • json数组:[ 1,2,3,4 ]

    • json模块
      data = {"name":"musen","id":18,"msg":None}
      json_data = '{"name":"musen","id":18,"msg":null}'
      
      # 正确操作
      import json
      # 将json字符串转为python类型,会自动将null转为None
      res = json.loads(json_data) # {"name":"musen","id":18,"msg":None}-->json
      # 将python类型转为json字符串,
      res = json.dumps(json) # {"name":"musen","id":18,"msg":null} -->str
      
      #错误操作1. 不能使用dict将json字符串转成字典
      # res = dict(json_data)
      
      #错误操作2. 不能使用过eval将json字符串转为字典,json中的null在python中无法识别,会当成变量
      # res = eval(json_data)
      • json.loads:把json格式字符串解码转换成Python对象  [用例里有null时要使用json.loads,null在Python中认为是变量,所以需要转为Python对象(None)]

      • json.dumps:实现Python类型转化为json字符串,返回一个str对象,把一个Python对象编码转换成json字符串

      • 注意:json.dumps()序列化时默认使用的ASCII编码

    • jsonpath:用于是提取json数据中的指定数据(pip install jsonpath)
    $根节点
    .或者[] 取子节点
    .. 子孙节点
    * 匹配所有元素节点
    [] 数组下标,根据内容选值
      • 使用方法:jsonpath.jsonpath(数据对象,jsonpath表达式),没找到会返回False
    import jsonpath
        
        # 获取member_id
        member_id = jsonpath.jsonpath(Auth_json,"$..id")[0]
       
        # jsonpath 获取
        token = jsonpath.jsonpath(Auth_json,"$..token")[0]
        token_type = jsonpath.jsonpath(Auth_json,"$..token_type")[0]
    
        Authorization_value = token_type + ' ' + token
      • 例如:获取第三个结果的name
    import jsonpath
    
    name = jsonpath.jsonpath(result,"$.id[3].name")

    (9)接口授权访问

    • cookie+session

      import requests
      class HandleSessionRequest:
          """
          使用session鉴权
          """
          def __init__(self):
              #  通过session(),发送请求后,会自动将sessionID传递session中,保存上一次请求的cookie
              self.se = requests.session()
      
          def send(self, url, method, data=None, params=None, json=None, headers=None):
      
              if method.lower() == 'get':
                  return self.se.get(url= url, params=params)
              elif method.lower() == 'post':
                  return self.se.post(url= url, data=data, json=json, headers=headers)
              elif method.lower() == 'patch':
                  return self.se.patch(url=url, data=data, json=json, headers=headers)
              elif method.lower() == 'patch':
                  return self.se.put(url=url, data=data, json=json, headers=headers)
    • token
      • token授权类封装
    import requests
    class HandleRequest:
    
    
        def send(self, url, method,data=None,params=None,json=None, headers = None):
            '''url:请求地址 http://xxxx:port
               param:传递的参数 非必填参数 字典的格式传递参数
               method:请求方式  支持get,post,put...
               cookie:请求的时候传递的cookie值
               files : None 上传文件
               
               # 表单类型:application/x-www-form-urlencoded;charset = UTF-8-->data传参
               # json:Content-Type = application/json; charset=UTF-8-->json传参
            '''
           
            if method.lower() == 'get':
                return requests.get( url=url, params=params)
            elif method.lower() == 'post':
                return requests.post(url=url, data = data,json=json,headers=headers)
            elif method.lower() == 'patch':
                return requests.patch(url=url, data = data,json=json,headers=headers)
            elif method.lower() == 'patch':
                return requests.put(url=url, data = data,json=json,headers=headers)
      • setupclass中提取的用户ID和token,如何在用例方法中使用 

        • 方法1:设置全局变量

        • 方法2:保存为类属性

        • 方法3:写入配置文件

        • 方法4:保存在临时变量的类中

          # 临时变量存放文件
          
          class TestData:
              """专门用来保存一些替换的数据"""
               token = None
          
          
          # 登录模块
          
          # 提取并存放token
                      token_type = jsonpath.jsonpath(result, '$..token_type')[0]
                      token_value = jsonpath.jsonpath(result, '$..token')[0]
                      token_data = token_type + ' ' + token_value
                      # 将属性值token_data 存储在TestData类中token 
                      setattr(TestData, 'token', token_data)
          
          # 获取token
           # 将token加到请求头中
                  headers['Authorization'] = getattr(TestData, 'token')
      • 在Excel用例中加一条登录 ---》在用例代码中判断是否有登录的用例,如果有就提取数据,保存数据---》(设为全局变量---》保存为类属性---》写入配置文件---》保存在临时变量的类中)

        result = self.http.send(url=url, method=method, json=data, headers=headers).json()
                         # -----如果是登录结果,从响应结果中提取用户id和token(不放在setupclass中)-----
                if result["msg"] == 'OK' and case["module"] == 'login':
                    #  提取token
                    token_type = jsonpath.jsonpath(result, '$..token_type')[0]
                    token_value = jsonpath.jsonpath(result, '$..token')[0]
                    token_data = token_type + ' ' + token_value
                    setattr(TestData, 'token_data', token_data)  # 将TestData类中属性token_data存在临时变量中
  • 相关阅读:
    如何在js中使用递归
    基于angular写的一个todolist
    使用github参与开源项目
    用sass写栅格系统
    Activity返回按钮
    Listview优化MovieListAdapter的使用
    [强悍]listview下拉刷新,上拉加载更多组件版
    Google自己的下拉刷新组件SwipeRefreshLayout
    当ListView有Header时,onItemClick里的position不正确
    tabhost练习,剥离自“去哪儿”
  • 原文地址:https://www.cnblogs.com/kite123/p/13785954.html
Copyright © 2011-2022 走看看