超详细,Pytest自动化测试框架 token全局设置-多套环境使用(实战)

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

在做自动化测试时,经常会遇到一个需求,希望在全局用例中,仅登录一次,后续所有的用例自动带上请求头部token 或者cookies。

可以自定义fixture 更新内置的 requests_session, 在请求头部添加token 来实现全局登录。

1、全局 token 实现
在项目下 conftest.py 文件中实现先登录,更新请求头部 token

import pytest
from pytest_yaml_yoyo.http_session import HttpSession
import jsonpath
"""
全局仅登录一次,获取token,
在请求头部添加 Authorization: bearer **token** 认证也有这种格式 Authorization: Token **token**
内置fixture requests_session
"""@pytest.fixture(scope="session", autouse=True)
def login_first(requests_session: HttpSession) -> None:"""全局仅一次登录, 更新session请求头部"""# 调用登录方法,获得tokenurl = "http://127.0.0.1:8200/api/v1/login"body = {"username": "test1","password": "123456"}r = requests_session.post(url, json=body)token = jsonpath.jsonpath(r.json(), '$..token')[0]print(f'账号 test1 登录获取到token: {token}')headers = {"Authorization": f"Token {token}"}requests_session.headers.update(headers)

cases/test_info.yml 中用例内容

test_user_info:name: 用户信息request:url: /api/v1/userinfomethod: GETvalidate:- eq: [$.code, 0]- eq: [$.msg, success!]

用例中只写了相对路径,还需要在pytest.ini 配置 base_url 环境地址

[pytest]log_cli = true
log_cli_level = info
base_url = http://127.0.0.1:8200

执行pytest命令运行用例,会看到请求头部自动带上token了

2023-06-08 11:12:02 [INFO]: 运行用例-> test_user_info
2023-06-08 11:12:02 [INFO]: --------  request info ----------
2023-06-08 11:12:02 [INFO]: yml raw  -->: {'url': '/api/v1/userinfo', 'method': 'GET'}
2023-06-08 11:12:02 [INFO]: method   -->: GET
2023-06-08 11:12:02 [INFO]: url      -->: /api/v1/userinfo
2023-06-08 11:12:02 [INFO]: headers  -->: {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', '
Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Token 8846dbad632813f097c577d0ff6aafc4547090f9'}

这样就可以实现全局仅登录一次,后续用例全部自动带上登录的请求头部’Authorization’: ‘Token …’.

上面这种方式虽然实现了全局token ,但是登录的token地址是写死的,如果有多套环境需要切换,并且不同环境登录的账号不一样,就需要根据环境的切换来自动读取环境配置了。

2、多套环境配置

在项目下 config.py 中配置不同环境

class Config:"""每个环境都有一样的公共配置"""version = "v1.0"appId = 10086class TestConfig(Config):"""测试环境"""BASE_URL = 'http://127.0.0.1:8200'USERNAME = 'test1'PASSWORD = '123456'BLOG_URL = 'https://www.cnblogs.com'class UatConfig(Config):"""联调环境"""BASE_URL = 'http://192.168.1.12:8201'USERNAME = 'test8'PASSWORD = '123456'# 环境关系映射,方便切换多环境配置
env = {"test": TestConfig,"uat": UatConfig
}

还需要在 pytest.ini 配置环境名称,这样 pytest.ini 中的 base_url 就不用配置了,可以全部写到 config.py 中的配置里用大写的 BASE_URL

[pytest]log_cli = true
log_cli_level = infoenv = test

在项目下 conftest.py 文件中实现先登录,修改后如下

import pytest
from pytest_yaml_yoyo.http_session import HttpSession
import jsonpath
"""
全局仅登录一次,获取token,
在请求头部添加 Authorization: bearer **token** 认证也有这种格式 Authorization: Token **token**
内置fixture requests_session
"""@pytest.fixture(scope="session", autouse=True)
def login_first(requests_session: HttpSession, environ) -> None:"""全局仅一次登录, 更新session请求头部"""# 调用登录方法,获得tokenurl = environ.BASE_URL + "/api/v1/login"print(url)body = {"username": environ.USERNAME,"password": environ.PASSWORD}r = requests_session.post(url, json=body)token = jsonpath.jsonpath(r.json(), '$..token')[0]print(f'账号 {environ.USERNAME} 登录获取到token: {token}')headers = {"Authorization": f"Token {token}"}requests_session.headers.update(headers)

切换环境运行有2种方式
方式1:修改pytest.ini 中的 env值

[pytest]env = uat

方式2:通过命令行切换环境

pytest --env=uat

这样就可以根据环境的切换自动获取环境的配置生成对应环境的token了。

还有一种简便方法,只要在环境配置中添加了 BASE_URL 属性,可以用 requests_session.send_request() 请求相对路径

import pytest
from pytest_yaml_yoyo.http_session import HttpSession
import jsonpath
"""
全局仅登录一次,获取token,
在请求头部添加 Authorization: bearer **token** 认证也有这种格式 Authorization: Token **token**
内置fixture requests_session
"""@pytest.fixture(scope="session", autouse=True)
def login_first(requests_session: HttpSession, environ) -> None:"""全局仅一次登录, 更新session请求头部"""# 调用登录方法,获得tokenurl = "/api/v1/login"body = {"username": environ.USERNAME,"password": environ.PASSWORD}r = requests_session.send_request('post', url, json=body)token = jsonpath.jsonpath(r.json(), '$..token')[0]print(f'账号 {environ.USERNAME} 登录获取到token: {token}')headers = {"Authorization": f"Token {token}"}requests_session.headers.update(headers)
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

只有奋斗,才能拥抱辉煌;只有努力,才能追寻梦想;只有坚持,才能战胜困难;只有积极,才能创造奇迹;只有勇敢,才能改变人生。不言放弃,向着成功勇往直前!

只有经历过风雨,才能见彩虹;只有经历过挫折,才能看到成功;只有付出奋斗,才能收获成就。坚持不懈地追逐梦想,终将在人生的舞台上绽放光芒。

只有坚持不懈的奋斗,才能点亮心中的希望之光,驱散迷茫与困惑,最终成就辉煌人生。无论前路多么艰辛,勇往直前,信念与努力将引领你走向成功的彼岸。

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

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

相关文章

MySQL安装部署

目录 1、仓库安装 2、本地安装 3、容器安装 4、源码安装 5、二进制安装 环境:centOS7 1、仓库安装 1、上传安装包 2、解压 mkdir mysql ; tar xf 安装包 -C mysql 3、安装 ls -l mysq1-community* rpm -ivh mysql-community-server-5.7.18-.el7.x86_64.rpm (…

Zookeeper的选举机制

一、概述: Zookeeper的选举机制是它的一项核心功能,用于在分布式系统中选择一个领导者(leader)来处理各种请求和操作。以下是Zookeeper选举机制的一些关键方面: 服务器ID(Server ID)&#xff…

Flutter基础控件

Text:文字 Text("Flutter") Text是最常用也是最基础的,目前学习阶段只用来加载文字数据,更多属性和样式设置请查看源码自己探索。 Button:按钮 ElevatedButton:普通按钮 ElevatedButton(onPressed: () {if (kDebugMode) {print("Elevat…

基于 R 对卫星图像进行无监督 kMeans 分类

一、前言 本文将向您展示如何使用 R 对卫星图像执行非常基本的 kMeans 无监督分类。我们将在 Sentinel-2 图像的一小部分上执行此操作。 Sentinel-2 是由欧洲航天局发射的一颗卫星,其数据可在此处免费访问。 我要使用的图像显示了 Neusiedl 湖的北部(奥地…

matlab用histfit画直方图+拟合曲线

matlab画直方图拟合曲线 成图效果1 数据格式2 绘制步骤3 后话 成图效果 1 数据格式 应该准备一个double的数组,如果是csv或者xlsx直接拖进matlab是table型,这是无法作为绘图参数的 如果是table型,可以使用table2array(data)进行转换 2 绘制…

【MySQL】在Linux下删除和安装MySQL

文章目录 一、前言二、检查、卸载内置环境三、获取mysql官方yum源四、正式安装MySQL服务五、登录MySQL配置my.cnf设置开机启动 一、前言 大家好久不见,今天开始分享关系型数据库Mysql的一些知识。 二、检查、卸载内置环境 2.1 首先使用命令查询当前mysql的运行状…

[Qt 教程之Widgets模块] —— QFontComboBox 字体选择器

Qt系列教程总目录 文章目录 3.2.1 创建 QFontComboBox3.2.2 成员函数1. 书写系统2. 字体过滤器3. 当前字体4. 信号 该控件用于选择字体,在一些软件中经常有类似控件,如下: Microsoft Office: Photoshop: QFontComboB…

聚观早报 | 字节跳动要造机器人;苹果已开发悬空虚拟键盘

今日要闻:字节跳动要造机器人;苹果已开发悬空虚拟键盘;苹果汽车或售价9万美元;全球首例猪心脏移植患者仅存活60天;首款搭载ChatGPT的自行车问世 字节跳动要造机器人 7 月 3 日消息,「机器人」作为未来科技…

【IT服务管理】MITRE :IT服务管理

定义: 信息技术 (IT) 服务管理 (ITSM) 是解决管理、支持和交付 IT 服务的最佳实践的框架、流程和模型的通用保护伞。IT 服务可能包括(由 NIST 为云计算定义):软件即服务 (SaaS)、平台即服务 (PaaS) 和基础设施即服务 (IaaS)。 关键…

单片机-矩阵键盘密码锁

89C52RC芯片 1.矩阵按键输入正确密码&#xff0c;LCD1602右上角显示ok&#xff0c;错误显示Err。 涉及文件&#xff1a; 1.main.c (#include<regx52.h>) 2.lcd1602.c lcd1602.h 3.Delay.c Delay.h 4.MatrixKey.c MetrixKey.h 共7项 代码 main.c #…

【EasyX】使用C/C++实现 流星雨效果(配上详细注释解释)

&#x1f38a;专栏【​​​​​​​EasyX】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【Love Story】 &#x1f970;大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 文章目录 &#x1f354;效果&#x…

Webots介绍

Webots介绍 1 介绍1.1 概述1.2 应用1.3 入门要求1.4 技术支持1.5 仿真步骤世界&#xff08;webots定义&#xff09;控制器超级控制器 1.6 平台能力三维建模能力物理引擎外设支持 2 软件使用启动webots用户界面文件菜单编辑菜单查看菜单模拟菜单构建菜单叠加菜单工具菜单帮助菜单…