Python接口自动化测试之Token详解及应用

embedded/2025/3/19 4:51:43/

以下介绍Token原理及在自动化中的应用。

一、Token基本概念及原理

1.Token作用

为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

2.什么是Token

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

3.Token运行原理

1.当用户首次登录成功之后, 服务器端就会生成一个 token 值,这个值会在服务器保存token值(保存在数据库中),再将这个token值返回给客户端;

2.客户端拿到 token 值之后,进行保存 (保存位置由服务器端设置);

3.以后客户端再次发送网络请求(一般不是登录请求)的时候,就会将这个 token 值附带到参数中发送给服务器;

4.服务器接收到客户端的请求之后,会取出token值与保存在本地(数据库)中的token值进行比较;

5.如果两个 token 值相同, 说明用户登录成功过,当前用户处于登录状态;

6.如果没有这个 token 值, 没有登录成功;

7.如果 token 值不同,说明原来的登录信息已经失效,让用户重新登录;

4.Token认证优点

  • 无状态(也称:服务端可扩展行):Token机制在服务端不需要存储session信息,因为Token 自身包含了所有登录用户的信息,只需要在客户端的cookie或本地介质存储状态信息.
  • 可重用性:在多个平台和域(domains)上运行,重复使用相同的令牌来验证用户,很容易构建与其他应用程序共享权限的应用程序。
  • 安全性:由于我们没有使用 Cookies,我们不必再防御网站的跨站点请求伪造(CSRF)攻击。

5.Token和 Cookie、Session 的选型

对于只需要登录用户并访问存储在站点数据库中的一些信息的中小型网站来说,Session Cookies 通常就能满足。如果有企业级站点,应用程序或附近的站点,并且需要处理大量的请求,尤其是第三方或很多第三方(包括位于不同域的API),则 token显然更适合。

二、Token实战

讲了那么多概念和原理,很多小伙伴可能不知道token长啥样,接下来以接口登录为例。
  

import requests
url = 'http://127.0.0.1:8000/user/login/'
payload = {"username":"vivi","password":"123456"
}
res = requests.post(url,json=payload)
print(res.text)

响应结果如下:
  

{"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InZpdmkiLCJleHAiOjE1ODY4NDg5NzgsImVtYWlsIjoidml2aUBxcS5jb20ifQ.a2ExtNVjGrY8T1gefcJTnk4JUOx9NVtCk6lMK8o47co","user_id": 1,"username": "vivi"
}

响应结果有返回token,但是token要怎么用呢,不急,我们一步步来。假设现在有个项目列表的接口,在不登录的前提下,不能访问。

import requests
url = 'http://127.0.0.1:8000/projects/'
pro_res = requests.get(url)
print(pro_res.json())

响应结果:提供认证信息

{'detail': '身份认证信息未提供。'}

项目列表接口需要携带token,服务器校验成功后,才能成功返回信息

重点来了,如何从登录接口获取token,项目列表接口又如何携带token?

访问登录接口,并获取token。
  

import requests
url = 'http://127.0.0.1:8000/user/login/'
payload = {"username":"vivi","password":"123456"
}
login_res = requests.post(url,json=payload)
# 从响应结果中获取token值
token = login_res.json()["token"]
print("token:", token)

响应结果为:

token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InZpdmkiLCJleHAiOjE1ODY4NTEyMjksImVtYWlsIjoidml2aUBxcS5jb20ifQ.neqVM5MFGuFbKIUOCqW_qXBajhTTQMfmAs2PWTkEMes

那项目列表接口又如何携带token呢,token直接加在请求头,这样就可以了么,当然不是,我们还需要在token前加上前缀,前缀由后端设置,见过最多的前缀是:Bearer,不清楚的参照接口文档。

项目列表携带token访问。
  

import requests
url = 'http://127.0.0.1:8000/projects/'
# 拼接最终的token,注意中间有个空格
token = "Bearer" + " " + token
headers={"authorization": token
}
pro_res = requests.get(url,headers=headers)
print(pro_res.json())

响应结果为:
  

{"count": 2,"results": [{"id": 1,"name": "自动化测试平台项目1","tester": "vivi"},{"id": 2,"name": "自动化测试平台项目2","tester": "coco"}],"total_pages": 1,"current_page_num": 1
}

总结:本文主要介绍token基本概念、运行原理及在自动化中接口如何携带token进行访问。

同时,在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看。

【2025最新版】字节大牛讲的最全最细的自动化测试全套教程!永久白嫖,拿走不谢,全程干货无废话!逼自己15天内学完,从软件测试基础到项目实战一套全通关!


http://www.ppmy.cn/embedded/173767.html

相关文章

uni-app vue2 记住密码功能

1. html代码 <checkbox-group change"checkboxChange"><label><checkbox value"" :checked"ifSavePwd" style"transform: scale(0.6);"/>记住密码</label> </checkbox-group>2. js代码 默认复选款是不…

蓝桥杯Python赛道备赛——Day7:动态规划(基础)

本博客就蓝桥杯中所涉及的动态规划基础问题进行讲解&#xff0c;包括&#xff1a;递推、记忆化搜索、最长公共子序列&#xff08;LCS&#xff09;和最长上升子序列&#xff08;LIS&#xff09;。 每一种动态规划问题都在给出定义的同时&#xff0c;给出了其求解方法的示例代码&…

【从零开始学习计算机科学】设计模式(五)MVC模式、业务代表模式、组合实体模式、数据访问对象模式、前端控制器模式、拦截过滤器模式、服务定位器模式、传输对象模式

【从零开始学习计算机科学】设计模式(五)MVC模式、业务代表模式、组合实体模式、数据访问对象模式、前端控制器模式、拦截过滤器模式、服务定位器模式、传输对象模式 MVC模式主要组件工作原理优点缺点适用场景总结业务代表模式主要特点组成部分工作原理优点缺点适用场景总结组…

嵌入式硬件篇---龙芯GPIO控制

文章目录 前言1. 头文件引入作用 2. 导出GPIO引脚 export_gpio功能示例注意 3. 设置GPIO方向 set_gpio_direction功能示例 4. 设置GPIO值 set_gpio_value功能示例 5. 初始化函数 gpio_init功能 6.龙芯2K1000适配说明6.1 GPIO编号映射6.2 性能优化建议优点错误处理 6.3 权限问题…

大数据技术之Spark优化

第 1 章 Spark 性能调优 问:spark 优化 第一句:我们可以从性能,算子,shuffle 过程以及 jvm 四个方面展开优化。 1 常规性能调优 1.1 常规性能调优一:最优资源配置 Spark 性能调优的第一步,就是为任务分配更多的资源,在一定范围内,增加资源的分配与性能的提升是成正…

蓝桥杯备考:01背包+dfs---》搭配购买

我们可以把搭配的那些云当作一个一个的连通块&#xff0c;然后把这些连通快当成每个物体 比如&#xff0c;本题就是两个连通块 当我们做好连通块儿的时候&#xff0c;我们分析一下01背包 step1 分析状态表示 f[i][j]表示 从1到i个物品选出价格不超过j的最大价值 step2:推导状…

uniapp中使用webview并与原页面通信

uniapp中使用webview并与原页面通信 1.接收数据 主要使用message与onPostMessage接收原页面数据&#xff0c;且两个方法只能在APP中使用&#xff0c;其他平台均不支持。 <web-view style"z-index: 1;" :src"webViewUrlappview" onPostMessage"h…

StarRocks SQL使用与MySql的差异及规范注意事项

StarRocks为OLAP列存数据库&#xff0c;擅长复杂分析查询&#xff0c;需显式定义分区/分桶键&#xff1b;MySQL为OLTP行存数据库&#xff0c;适合事务处理。SQL差异&#xff1a;StarRocks支持批量写入&#xff08;避免单行INSERT&#xff09;、物化视图优化&#xff0c;禁用LIM…