• 接口测试中的cookie鉴权和token鉴权


      在讲今天的内容之前,我们应该先了解一些基本的基础知识,要不然,突然讲鉴权,可能有点懵,听不太懂,所以,我会先把基础的东西先梳理一遍

    一、什么是接口测试?
    接口测试:本质是基于某种协议,发送一个请求给服务器,然后服务器返回一个响应数据,然后对响应数据进行分析,判断是否与我们预期的返回一致,从而验证功能是否正确,这就是接口测试

    二、授权和鉴权的区别?
    授权:相当于给一个通行证
    鉴权:鉴定是否有权访问(判断有没有通行证)

    三、cookie与session的区别
    1、cookie是一个小的小文本文件,是由web服务器保存在用户浏览器上的小文本文件,包含用户的相关信息,无论何时用户访问到服务器,都会带上该服务器的cookie信息,一般cookie是有有效期的,cookie只在浏览器上保存一段规定的时间,一旦超过规定的时间,该cookie就会被系统清除

    2、session是将数据存储在服务器中,服务器会为每一个用户创建一条session,用户访问服务器的时候需要拿着session去表明自己的身份,session的实现是基于cookie,session需要借助于cookie来存储sessionIDsession可以自动保存cookie信息

    另外注意:cookie和session都是开发设置的,我们作为测试人员,不要想着去怎么设置,基本与测试人员无关,我们只是测接口

     cookie_session鉴权的接口

    接下来,我们以课堂派的接口为例,为大家讲解如何进行cookie和session方式鉴权的接口,提前准备好一些接口信息,比如:

    # 1.登录接口
    login_url = "https://www.ketangpai.com/UserApi/login"
    请求方法:post
    请求参数类型:表单类型
    请求参数: 有时候我们并没有拿到开发人员给我们的接口文档,那请求参数怎么获取,只能去浏览器上手动抓包,获取这些信息
    email: 邮箱(账号)
    password: 密码
    remember: 0           

    # 2.获取班级列表的接口地址
    course_url = "https://www.ketangpai.com/CourseApi/lists"

     

     直接来上代码

    """
    提前准备的工作:课堂派的接口
    
    # 1.登录接口
    login_url = "https://www.ketangpai.com/UserApi/login"
    请求方法:post
    请求参数类型:表单类型
    请求参数:
        email:  邮箱(账号)
        password: 密码
        remember: 0
    
    # 2.获取班级列表的接口地址
    course_url = "https://www.ketangpai.com/CourseApi/lists"
    
    
    笔记:
    http请求时无状态的:
        可以通过cookie或者token来传递用户登录的状态信息
        session可以自动保存cookie信息
    cookie+session进行鉴权的接口,在python的处理:
    
        requests模块中有一个session类,使用session类的同一个对象发送请求,会自动保存之前请求的cookie信息
    """
    import requests
    
    # 创建一个session对象
    session = requests.Session()
    # -------------------------请求课堂派登录接口-------------------------------------
    # 接口地址
    login_url = "https://www.ketangpai.com/UserApi/login"
    # 请求参数
    params = {
        "email": "1234667890",
        "password": "000000123",
        "remember": 0     
    }
    
    response = session.post(url=login_url, data=params)
    print(response.json())
    
    # -------------------请求课堂派课程列表的接口---------------------------
    course_url = "https://www.ketangpai.com/CourseApi/lists"
    
    response2 = session.get(url=course_url)
    print(response2.json())

     token鉴权的接口

    我们以<前程贷>的项目中的充值功能为例,来讲解如何进行token鉴权,因为是先登录,登录后才能实现充值功能

    token鉴权解决思路:

    1、登录,获取服务器返回的token

    2、提取登录之后返回的token
        1、要么从返回的响应数据中提取
        2、要么从响应头中提取

    3、请求需要鉴权的接口时,加上前面提取得token
        1、要么把token放在请求头中
        2、要么返回请求的参数中

    import requests
    from jsonpath import jsonpath# 登录
    login_url = "http://api.lemonban.com/futureloan/member/login"
    params = {
        "mobile_phone": "15879563287",
        "pwd": "lemonban"
    }
    headers = {
        "X-Lemonban-Media-Type": "lemonban.v2"
    }
    
    # 1、发送请求登录
    response = requests.post(url=login_url, json=params, headers=headers)
    # 获取请求之后返回得数据
    result = response.json()
    
    # 2、提取token
    token = jsonpath(result, "$..token")[0]
    token_data = "Bearer" + " " + token
    
    # 提取用户id
    member_id = jsonpath(result, "$..id")[0]
    # ------------------------------充值--------------------------
    recharge_url = "http://api.lemonban.com/futureloan/member/recharge"
    # 充值的参数
    recharge_params = {
        "member_id": member_id,  # 充值的用户id哪里来?
        "amount": 10000
    }
    # 请求头
    headers2 = {
        "X-Lemonban-Media-Type": "lemonban.v2",
        "Authorization": token_data
    }
    response2 = requests.post(url=recharge_url, json=recharge_params, headers=headers2)
    print("充值的结果:", response2.json())

    我们先对代码中的部分,进行语法介绍,怕有的同学看不太懂

     然后再从大局角度或者宏观角度,再来整体看看代码是如何实现token鉴权的

    所以,以上两种就是requests请求需要鉴权的具体过程

    其实,从以上两个举例中,我们都可以找到一些共同的影子,无论是哪种鉴权方式,都是测某个功能的接口,都需要先过登录这一关,这是门槛,然后再利用登录后的信息的基础上,再去测试具体的某个功能接口,

    第一种:创建seeion对象,登录后,sesson保存cookie信息,然后用seesion请求

    第二种:从登录后返回的数据中获取token,再把token放在该放的位置,然后照常用requests请求

     token过期怎么办?

    拓展一个小内容:如果token过期了,那如何进行处理?在代码中如何进行改进?

    导入时间类,登录前设置开始时间,后边再设置结束时间,通过if判断时间,token有效期是否过期,如果过期,则重新登录,(详情请见红色代码标记之处)

    import requests
    from jsonpath import jsonpath
    import time
    # 登录
    login_url = "http://api.lemonban.com/futureloan/member/login"
    params = {
        "mobile_phone": "15879563287",
        "pwd": "lemonban"
    }
    headers = {
        "X-Lemonban-Media-Type": "lemonban.v2"
    }
    s_time = time.time()
    # 1、发送请求登录
    response = requests.post(url=login_url, json=params, headers=headers)
    # 获取请求之后返回得数据
    result = response.json()
    
    # 2、提取token
    token = jsonpath(result, "$..token")[0]
    token_data = "Bearer" + " " + token
    
    # 提取用户id
    member_id = jsonpath(result, "$..id")[0]
    # ------------------------------充值--------------------------
    recharge_url = "http://api.lemonban.com/futureloan/member/recharge"
    # 充值的参数
    recharge_params = {
        "member_id": member_id,  # 充值的用户id哪里来?
        "amount": 10000
    }
    # 请求头
    headers2 = {
        "X-Lemonban-Media-Type": "lemonban.v2",
        "Authorization": token_data
    }
    e_time = time.time()
    if e_time - s_time > 300:
        pass   # 重新登录提取token

    response2 = requests.post(url=recharge_url, json=recharge_params, headers=headers2) print("充值的结果:", response2.json())

    小编愿同广大网友一起交流,共同进步

  • 相关阅读:
    MySQL 子查询
    MySQL 多表查询 内连接 和 外连接
    MySQL 分页
    MySQL 常用函数 流程控制
    Envoy基于文件系统的EDS动态配置
    Envoy学习笔记
    dapr入门学习
    浅谈cache
    List的初始化方式
    屌丝公司:设置服务器的时区、时间及时间同步
  • 原文地址:https://www.cnblogs.com/xj-excellent/p/13553985.html
Copyright © 2020-2023  润新知