python+pytest接口自动化:token关联登录这样做,阿里p8都直呼牛逼!!!

在PC端登录公司的后台管理系统或在手机上登录某个APP时,经常会发现登录成功后,返回参数中会包含token,它的值为一段较长的字符串,而后续去请求的请求头中都需要带上这个token作为参数,否则就提示需要先登录。

这其实就是状态或会话保持的第三种方式token

一. 什么是token

token 由服务端产生,是客户端用于请求的身份令牌。第一次登录成功时,服务端会生成一个包含用户信息的加密字符串token,返回给客户端并保存在本地,后续客户端只需要带上token进行请求即可,无需带上用户名密码。

token原理简单概括如下:

  1. 用户首次登录成功后,服务端会生成一个token值,服务端会将它保存保存在数据库中,同时也会将它返回给客户端;

  2. 客户端拿到token值后,保存在本地;

  3. 后续客户端再次发送除登录外的其他请求时,会把保存在本地的token值作为参数一起发送给服务端;

  4. 服务端收到客户端的请求后,会拿发送过来的token值与保存在数据库中的token值进行比较;

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

  6. 如果数据库中没有这个token值或者token值已经生效,则需用户重新登录。

二. token场景处理

公司某管理后台系统,登录后返回token,接着去请求其他接口时请求头中都需要加上这个token,否则提示请先登录。

请求该系统的登录接口如下:

# @author: 给你一页白纸
# 微信公众号:测试上分之路import requests
import jsonheaders = {"Content-Type": "application/json;charset=utf8"}
url = "http://127.0.0.1:5000/login"
_data = {"username": "刘德华","password": "123456"
}
res = requests.post(url=url, headers=headers, json=_data).text
print(res)

结果如下:

{"code": 1000, "msg": "登录成功!", "token": "sh34ljjl08s32730djsh34ljjl08s32730djsh34ljjl08s32730djsh34ljjl08s32730djsh34ljjl08s32730djsh34ljjl08s32730dj"
}

在对扎样的项目做接口自动化测试时,需要先请求登录接口拿到token,再去请求别的接口。每次请求其他接口时先请求一次登录接口,这样做虽然可行,但这样不仅会降低自动化的执行效率,而且每次都请求登录也会对服务器资源造成浪费。

这里介绍如下两种处理思路。

 自动化测试相关教程推荐:

2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂!!_哔哩哔哩_bilibili

2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibili

测试开发相关教程推荐

2023全网最牛,字节测试开发大佬现场教学,从零开始教你成为年薪百万的测试开发工程师_哔哩哔哩_bilibili

postman/jmeter/fiddler测试工具类教程推荐

讲的最详细JMeter接口测试/接口自动化测试项目实战合集教程,学jmeter接口测试一套教程就够了!!_哔哩哔哩_bilibili

2023自学fiddler抓包,请一定要看完【如何1天学会fiddler抓包】的全网最详细视频教程!!_哔哩哔哩_bilibili

2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibili

1. 思路一

在执行用例之前,先请求登录接口,并将返回的token值存储在文件中(如yaml文件),后续请求需要用到token值则从该文件。

python中yaml文件

1,运行接口自动化测试框架,初始化时先请求登录接口,获取token值,并写入指定的yaml文件中。

# @author: 给你一页白纸
# 微信公众号:测试上分之路import requests
import json
import yamldef get_token():'''请求登录接口,获取token:return:'''headers = {"Content-Type": "application/json;charset=utf8"}url = "http://127.0.0.1:5000/login"_data = {"username": "刘德华","password": "123456"}res = requests.post(url=url, headers=headers, json=_data).textres = json.loads(res)token = res["token"]return tokendef write_yaml(token):'''写入yaml文件:return:'''t_data = {"token": token}with open("yaml文件路径", "w", encoding="utf-8") as f:yaml.dump(data=t_data,  stream=f, allow_unicode=True)if __name__ == '__main__':token = get_token() # 获取tokenwrite_yaml(token)   # 将token值写入yaml文件

2,执行测试用例时先读取yaml文件中token值,并将token加入headers中(也有些是将token放在请求参数中,视被测试项目具体情况而定),再发送请求。

# @author: 给你一页白纸
# 微信公众号:测试上分之路import requests
import yaml
import pytest
import jsondef read_yaml():'''读yaml文件:return:'''with open('yaml文件路径', 'r', encoding='utf-8') as f:result = yaml.load(f.read(), Loader=yaml.FullLoader)token = result["token"]return tokendef test_check_user():'''查询个人信息(需要先登录系统):return:'''# 先从yaml文件中读取tokentoken = read_yaml()# 再将token添加到请求头中headers = {"Content-Type": "application/json;charset=utf8","token": token}url = "http://127.0.0.1:5000/users/3"res = requests.get(url=url, headers=headers).text# 返回结果为json格式,转换为字典res = json.loads(res)# 断言code是否为1000assert res["code"] == 1000if __name__ == '__main__':pytest.main()

这里仅仅只是举例说明,而在实际的框架中,我们需要把这些诸如yaml文件的读写这样的函数单独封装在某个模块中,供其他模块调用,这样会代码会更加清晰简洁。

2. 思路二

利用pytest中的Fixture函数,作用域设置为session,并返回token值,后续测试方法/函数调用该Fixture函数。

pytest中Fixture的使用请参考我之前的文章pytest(6)-Fixture(固件)。

1,首先,在conftest中定义一个作用域为session的Fixture函数,用于请求登录接口返回token。

# @author: 给你一页白纸
# 微信公众号:测试上分之路import pytest
import requests
import json@pytest.fixture(scope="session")
def get_token_fixture():'''作用域为session的fixture函数,返回token:return:'''headers = {"Content-Type": "application/json;charset=utf8"}url = "http://127.0.0.1:5000/login"_data = {"username": "刘德华","password": "123456"}res = requests.post(url=url, headers=headers, json=_data).textres = json.loads(res)token = res["token"]return token

2,接着,测试用例调用该Fixture。

def test_check_user(get_token_fixture):'''查询个人信息(需要先登录系统):return:'''# 通过Fixture函数g获取et_token_fixture值,即token,再将token添加到请求头中headers = {"Content-Type": "application/json;charset=utf8","token": get_token_fixture}url = "http://127.0.0.1:5000/users/3"res = requests.get(url=url, headers=headers).textres = json.loads(res)print(res)print(headers)assert res["code"] == 1000if __name__ == '__main__':pytest.main()

执行测试用例结果如下:

说明思路二也是可行的,当然这里只执行了一条测试用例,如果执行很多的用例,效果会是怎样还没去验证,大家可以试试看。

三. 总结

  1. 相对于Session/Cookies来说,请求量较大或者涉及第三方接口的系统,使用token更适合。
  2. 有些项目token是放在请求头中发送的,而有一些项目则是放在请求参数里发送的,做接口自动化时要明确是哪种方式。
  3. 接口自动化处理token时这两种思路可任选一种,如果使用pytest框架的话建议尝试思路二。
  4.  总结:

     光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

    如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

    如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

    在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

    我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

    测试开发视频教程、学习笔记领取传送门!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/163185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在Linux系统上检测GPU显存和使用情况?

如何在Linux系统上检测GPU显存和使用情况? 在Linux系统上,你可以使用一些命令行工具来检测GPU显存和使用情况。以下是一些常用的方法: 1. 使用nvidia-smi(仅适用于NVIDIA GPU) 如果你使用的是NVIDIA的显卡&#xff0…

Claude 发布2.1 版本,重大升级更新来看看有什么新功能?

11 月 23 日消息,OpenAI 竞争对手 Anthropic 日前推出了 Claude 2.1 聊天机器人及对应同名 AI 模型Claude 2.1,本文将总结Claude 2.1的主要功能。 增强的处理能力 上下文处理量大幅提升:Claude 2.1 现在能处理高达 200K上下文标记&#xff…

2、单片机及开发板介绍

单片机介绍 单片机,英文Micro Controller Unit,简称:MCU 内部集成:CPU、RAM(随机存储器)、ROM(只读存储器)、定时器、中断系统、通讯接口等 作用:信息采集(传感器)、处理&#xff0…

uniapp 适配部分IPhone手机底部安全距离

部分 IOS 机型,比如 Iphone X 的屏幕底部有一条“小黑线”区域,uniapp 项目中我们可以使用CSS的 env(safe-area-inset-bottom) 语句来自适配 IOS 的底部安全区域高度,这个语句会返回该机型的底部安全区域高度(单位 px)…

ffmpeg播放器实战(播放器流程)

1.流程图 1.main窗口创建程序窗口 程序窗口构造函数执行下面内容 2.开启播放 3.开启解码 4.开启渲染 5.反馈给ui 本文福利, 免费领取C音视频学习资料包学习路线大纲、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg…

Linux C++ 服务器端这条线怎么走?一年半能做出什么?

Linux C 服务器端这条线怎么走?一年半能做出什么? 既然你是在校学生,而且编程语言和数据结构的基础还不错,我认为应该在《操作系统》和《计算机体系结构》这两门课上下功夫,然后才去读编程方面的 APUE、UNP 等书。 最…

【深度学习】如何选择神经网络的超参数

1. 神经网络的超参数分类 神经网路中的超参数主要包括: 1. 学习率 η 2. 正则化参数 λ 3. 神经网络的层数 L 4. 每一个隐层中神经元的个数 j 5. 学习的回合数Epoch 6. 小批量数据 minibatch 的大小 7. 输出神经元的编码方式 8. 代价函数的选择 9. 权重初始化的方法 …

C语言--给定一个数组,把第一项的值减去第二项的值,第二项的值减去第三项的值,第三项的值减去第四项的值,依次类推。放到一个新的数组中,并打印新的数组

一.题目描述: 给定一个数组,把第一项的值减去第二项的值,第二项的值减去第三项的值,第三项的值减去第四项的值,依次类推。放到一个新的数组中,并打印新的数组。 比如:输入一个数组是5&#xff…

SA实战 ·《SpringCloud Alibaba实战》第14章-服务网关加餐:SpringCloud Gateway核心技术

大家好,我是冰河~~ 一不小心《SpringCloud Alibaba实战》专栏都更新到第14章了,再不上车就跟不上了,小伙伴们快跟上啊! 在《SpringCloud Alibaba实战》专栏前面的文章中,我们实现了用户微服务、商品微服务和订单微服务之间的远程调用,并且实现了服务调用的负载均衡。也基…

Nginx结合cpolar实现内网穿透多个Windows Web站点端口

文章目录 1. 下载windows版Nginx2. 配置Nginx3. 测试局域网访问4. cpolar内网穿透5. 测试公网访问6. 配置固定二级子域名7. 测试访问公网固定二级子域名 1. 下载windows版Nginx 进入官方网站(http://nginx.org/en/download.html)下载windows版的nginx 下载好后解压进入nginx目…

[autojs]利用console实现悬浮窗日志输出

"ui"; ui.layout(<vertical><button id"autoFloatWindow" text"开启悬浮窗" textSize"15sp" /><button id"autoService" text"开启无障碍服务" textSize"15sp" /><button id"…

vue中怎么根据选择的名称 生成印章图片

项目中需要根据选择的印章名称&#xff0c;动态生成印章 &#xff0c;印章下方显示当前的日期 代码如下 <template><div><label for"name">选择名称&#xff1a;</label><select id"name" v-model"selectedName">…

技术面时,一定要掌握这3个关键点

前言 现在有这么多优秀的测试工程师&#xff0c;大家都知道技术面试是不可避免的一个环节&#xff0c;一般技术面试官都会通过自己的方式去考察你的技术功底与基础理论知识。 如果你参加过一些大厂面试&#xff0c;肯定会遇到一些这样的问题&#xff1a; 1、看你项目都用到了…

机器学习/sklearn 笔记:K-means,kmeans++,MiniBatchKMeans

1 K-means介绍 1.0 方法介绍 KMeans算法通过尝试将样本分成n个方差相等的组来聚类&#xff0c;该算法要求指定群集的数量。它适用于大量样本&#xff0c;并已在许多不同领域的广泛应用领域中使用。KMeans算法将一组样本分成不相交的簇&#xff0c;每个簇由簇中样本的平均值描…

为什么要写测试用例,测试用例写给谁看?

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

mysql查询统计最近12个月的数据

项目场景&#xff1a; mysql查询统计最近12个月的数据&#xff0c;按每个月纵向展示&#xff0c;效果图 sql语句 注意&#xff1a;count( v.uuid ) 这里的是被统计那张表的id SELECT m.month,count( v.uuid ) AS total FROM (SELECT DATE_FORMAT(( CURDATE()), %Y-%m ) AS mon…

Leetcode—6.N字形变换【中等】

2023每日刷题&#xff08;三十七&#xff09; Leetcode—6.N字形变换 算法思想 参考k神的题解 实现代码 class Solution { public:string convert(string s, int numRows) {if(numRows < 2) {return s;}vector<string> rows(numRows);int flag -1;int i 0;for(…

JMeter集结点的使用场景以及如何使用?

JMeter是一个开源的负载测试工具&#xff0c;它被广泛用于测试应用程序、Web服务和网络协议等的性能。在JMeter中&#xff0c;集结点&#xff08;JMeter Cluster&#xff09;是一种分布式测试环境&#xff0c;它允许多个JMeter实例同时工作来模拟高并发负载。 使用集结点的场景…

聚水潭连接API,集成无代码开发,优化电商平台运营

聚水潭连接API&#xff0c;实现电商平台的高效运营 聚水潭作为一款SaaS ERP解决方案&#xff0c;通过其出色的产品和服务&#xff0c;迅速在市场上占据了一席之地。而其无代码开发的特点&#xff0c;为电商系统和客服系统的连接与集成提供了便利。聚水潭开放平台的优势在于&am…

2024年荆州中级工程师职称申报时间是什么时候?

甘建二十年耕耘职称。 2024年荆州中级工程师职称开始准备了&#xff0c;关于荆门中级职称具体申报时间&#xff0c;甘建二告诉你。 ​2024年荆州中级工程师职称申报时间&#xff1a; 1.水平能力测试报名3月份 2.水平能力测试考试4月份3.职称申报9月份&#xff0c;采取的是网上申…