接口自动化 - 接口鉴权处理常用方法

文章目录

  • [1. 接口鉴权通用解决方案](#1. 接口鉴权通用解决方案)
  • [2. 后端接口鉴权常用方法](#2. 后端接口鉴权常用方法)
    • cookie
    • token
    • [auth - 了解](#auth - 了解)
    • [oauth2 - 微信小程序鉴权](#oauth2 - 微信小程序鉴权)
  • [3. 各种鉴权方式介绍](#3. 各种鉴权方式介绍)
    • cookie鉴权
    • [token 鉴权](#token 鉴权)
    • [auth - 了解](#auth - 了解)
  • 总结

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。



本文开始

1. 接口鉴权通用解决方案

  1. 接口认证信息获取
  2. 发现接口请求进行认证信息的携带

2. 后端接口鉴权常用方法

  • 1.携带身份信息请求认证
  • 2.之后的每次请求都携带cookie信息,cookie记录在请求头中

token

  • 1.携带身份信息请求认证
  • 2.之后的每次请求都携带token认证信息
  • 3.可能记录在请求头,可能记录在url参数中

auth - 了解

  • 每次请求携带用户的username和password,并对其信息加密

oauth2 - 微信小程序鉴权

  • 1.携带身份信息请求认证
  • 2.服务端向指定回调地址回传code
  • 3.通过code获取token
  • 4.之后的请求信息都携带token。
    典型产品 :微信自动化测试

3. 各种鉴权方式介绍

cookie鉴权

  1. cookie 的获取(根据接口文档获取)
  2. 发送携带 cookie 的请求
    2.1直接通过调用 cookie 方法
    2.2通过在 filter 中添加 cookieFilter 对象

使用cookieFilter方法:

1.创建CookieFilter对象

2.在获取cookie或添加cookie的地方使用

也就是在请求头中使用filter()方法,传递参数是-cookieFilter对象

如:given().filter(CookieFilter对象)

方式一:直接通过.cookie()方法获取

前提:已有对应cookie鉴权信息,请求头中指定cookie需要存放的信息即可

java 复制代码
@Test
void addCookie() {
   given()
       //可以使用字符串 或 键值对(第一个key, 第二个是value)
       .cookie("user", "ad")
   .when()
  	   .get("https://httpbin.org/cookies")
   .then()
       .log().all();
}

方式二:使用CookieFilter对象,given()中的filter()方法-REST-assure自带方法

【注】

一般是不知道cookie需要存放的鉴权信息是什么

需要模拟正常set-cookie过程,获取cookie需要存放的信息

禁止重定向方法: .redirects().follow(false) -默认follow()方法中为true,代表允许重定向;

java 复制代码
@Test
void addCookieByFile() {
    //1.创建CookieFilter对象
    CookieFilter cookieFilter = new CookieFilter();
    //第一次请求获取cookie, 不进行重定向
    given()
        //禁止重定向,默认为true
        .redirects().follow(false)
       //使用filter()方法,获取set-cookie信息
        .filter(cookieFilter)
    .when()
    	//请求带有set-cookie返回的接口
        .get(setUrl)
    .then()
        .log().all();
    //第二次请求,携带cookie,会通过cookieFilter 自动添加相应cookie
    given()
        //使用filter()方法,添加cookie信息
        .filter(cookieFilter)
    .when()
        .get(url)
    .then()
        .log().all();
    //第3次请求,携带cookie,使用cookieFilter自动添加,还可以手动cookie()方法继续添加
    given()
        //使用filter()方法,添加cookie信息
        .filter(cookieFilter).cookie("test", "2")
    .when()
        .get(url)
    .then()
        .log().all();
}

token 鉴权

操作步骤:

1.token获取-根据接口文档获取

如:登录接口,请求后会响应会返回token信息

2.发送携带token的请求-根据接口文档获取

【注】发送带token的请求,需要注意token处理逻辑,也就是token放在那,请求头还是url中,工作中问后端或前端进一步了解。(或者看接口文档中是否有说明)

java 复制代码
@Test
void tokenTest() {
    //1.获取token ->请求有token的接口
    String bodyData = "{\"username\":\"zs\",\"password\":\"123\",\"code\":\"\"}";
    String token = given()
        .contentType("application/json;charset=UTF-8")
        .body(bodyData)
    .when()
        .post("https://litemall.com/admin/auth/login")
    .then()
        .log().all().extract().path("data.token");

    //2.再次请求其他接口,携带token
    //因为其他接口需要在登录后,才能访问,需要token
    given()
        .headers("x-litemall-admin-token", token)
    .when()
        .get("https://litemall.com/admin/goods/list")
    .then()
        .log().all()
        .statusCode(200);
}

auth - 了解

目前公司使用的不多

  1. 在基本 HTTP 身份验证中,请求包含格式为 的标头字段Authorization: Basic
  2. 其中credentials是 ID 和密码的Base64编码,由单个冒号连接:。

一般请求头中显示:

authorization: Basic credentials

java 复制代码
@Test
void addAuth() {
    RestAssured.proxy = host("localhost").withPort(8889);
    RestAssured.useRelaxedHTTPSValidation();
    String authUrl = "需要被测的接口地址";
    given()
         //在given()通过.auth().basic("用户名","密码")
        .auth().basic("user", "ad")
    .when()
        .get(authUrl)
    .then()
    .log().all();
}

总结

✨✨✨各位读友,本篇分享到内容是否更好的帮助你理解,如果对你有帮助给个👍赞鼓励一下吧!!
🎉🎉🎉世上没有绝望的处境,只有对处境绝望的人。
🎉🎉🎉一遇挫折就灰心丧气的人,永远是个失败者。而一向努力奋斗,坚韧不拔的人会走向成功。
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

相关推荐
历程里程碑5 小时前
Linux 库
java·linux·运维·服务器·数据结构·c++·算法
Pluchon5 小时前
硅基计划4.0 简单模拟实现AVL树&红黑树
java·数据结构·算法
2501_916008895 小时前
深入解析iOS机审4.3原理与混淆实战方法
android·java·开发语言·ios·小程序·uni-app·iphone
wxin_VXbishe5 小时前
C#(asp.net)学员竞赛信息管理系统-计算机毕业设计源码28790
java·vue.js·spring boot·spring·django·c#·php
一个网络学徒5 小时前
python5
java·服务器·前端
workflower5 小时前
业务需求-假设场景
java·数据库·测试用例·集成测试·需求分析·模块测试·软件需求
0思必得06 小时前
[Web自动化] Selenium获取元素的子元素
前端·爬虫·selenium·自动化·web自动化
70asunflower6 小时前
用Docker创建不同的容器类型
运维·docker·容器
2501_933670796 小时前
中专学财务,2026年就业方向全解析:从出纳到财务BP的进阶路
运维·服务器