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

news2024/11/27 22:41:27

目录:导读

    • 前言
    • 一、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请求头部"""
    # 调用登录方法,获得token
    url = "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/userinfo
    method: GET
  validate:
    - 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 = 10086


class 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 = info

env = 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请求头部"""
    # 调用登录方法,获得token
    url = 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请求头部"""
    # 调用登录方法,获得token
    url = "/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.coloradmin.cn/o/720033.html

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

相关文章

LAMP环境搭建

文章目录 LAMP环境搭建LAMP概述LAMP搭建安装Apache服务器安装mariadb(mysql)安装PHP PHP连接MySQLLAMP搭建论坛 LAMP环境搭建 LAMP概述 LAMP是一个常用的Web应用程序开发和部署平台,它是由以下四个开源软件的首字母组成: Linux(操作系统&a…

【开发问题】sqlserver怎么开启cdc

怎么开启 执行sql1、创建cdc​2.如上执行完毕之后&#xff0c;会在<database_name>数据库下的“系统表”中创建如下六个系统表&#xff1a;3.验证SQLServer库级别CDC是否启用4.启用SQLServer表级别CDC功能&#xff08;针对某一张表&#xff09;5、验证SQLServer表级别是否…

计算机毕业论文内容参考|基于微信小程序和云开发的小区垃圾分类知识手册平台的设计与实现

文章目录 导文摘要前言绪论1课题背景2国内外现状与趋势相关技术与方法介绍系统分析总结与展望1本文总结2后续工作展望导文 计算机毕业论文内容参考|基于微信小程序和云开发的小区垃圾分类知识手册平台的设计与实现 摘要 本文介绍了基于微信小程序和云开发的小区垃圾分类知识手…

智慧餐厅系统(外卖、堂食)

智慧餐厅是基于物联网和云计算技术为餐饮店量身打造的智能管理系统&#xff0c;通过客人自主点餐系统、服务呼叫系统、后厨互动系统、前台收银系统、预定排号系统以及信息管理系统等可显著节约用工数量、降低经营成本、提升管理绩效。 系统功能介绍 客户端 1、自助点餐系统&…

JavaScript(基础语法篇)

目录 初识 JavaScript JavaScript 是什么 发展历史 JavaScript 和 HTML 和 CSS 之间的关系 JavaScript 运行过程 JavaScript 的组成 前置知识 JavaScript 的书写形式 1. 行内式 2. 内嵌式 3. 外部式 注释 输入输出 输入: prompt 输出: alert 选择框&#xff1a…

如何用 TDengine 预测 “未来”

介绍 TDengine™ 是一种开源的云原生时序数据库&#xff08;Time Series Database&#xff0c;TSDB&#xff09;&#xff0c;专为物联网&#xff08;IoT&#xff09;、连接汽车和工业物联网进行了优化。它能够高效地实时摄取、处理和监控一天内由数十亿个传感器和数据收集器产…

美女小姐姐是你得菜吗~PYTHON采集西瓜小姐姐

目录标题 前言第三方模块&#xff1a;环境介绍:基本流程:代码展示尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 第三方模块&#xff1a; requests >>> pip install requests 第三方模块安装: win R 输入cmd 输入安装命令 pip install 模块名 (如果你觉…

Matlab|改进的粒子群算法优化支持向量机(多分类)

作者在前面的文章中介绍了粒子群算法的原理及其2种改进算法&#xff0c;本文将基于这三种优化方法&#xff0c;应用于支持向量机进行分类&#xff0c;并对比改进算法与标准粒子群算法的分类性能&#xff0c;结果显示改进后的方法能够得到更佳的分类效果。&#xff08;在对PSO-S…

小程序实现自定义分享微信好友

首先在全局page.json中添加"shareAppMessage": true {"path": "pages/brandCoupon/brandCoupon","style": {"navigationBarTitleText": "霸王餐","navigationStyle": "custom","enable…

3D建模软件、Creo 3D 、Creo8安装、下载教程

PTC Creo 8.0 是一款三维 CAD 软件&#xff0c;适用于多个行业和应用场景&#xff0c;包括机械设计、工业设计、电子设计等等。以下是 PTC Creo 8.0 的功能介绍和安装条件&#xff1a; 功能介绍&#xff1a; 三维建模&#xff1a;可以使用多种工具进行三维建模&#xff0c;包…

【python】生成时间戳+读取csv最后一列+生成一组随机数

1.按照间隔生成时间戳,并保存为csv文件 ##### 按照间隔生成时间戳,并保存为csv文件 import pandas as pd from datetime import datetime, time, timedelta times [] ts datetime(2023, 6, 17, 9, 10, 0) while ts < datetime(2023, 6, 17, 9, 26, 40):# times.append(t…

Leetcode 75算法题( 上)(使用C++实现)

目录 数组 / 字符串 1768.交替合并字符串 1071、字符串中的最大公因子 1431. 拥有最多糖果的孩子 605. 种花问题 345. 反转字符串中的元音字母 151. 反转字符串中的单词 238. 除自身以外数组的乘积 334. 递增的三元子序列 443. 压缩字符串 双指针 283. 移动零 392. 判断…

【狂神】MySQL - 连表查询 Join On 详解

1. 连表查询详解 市面上有 7 种连表查询, 总共归为三大类 : 左查询 LEFT JOIN -- 以左表为基准右查询 RIGHT JOIN -- 以右表为基准交叉查询 INNER JOIN -- 查询两表都有的数据 操作描述inner join如果表中至少有一个匹配, 就返回行left join会从左表中返回所有的值…

基于django的数据可视化展现

今天给大家简单分享一下一个基于python的django的框架写的一个数据可视化的项目。 主要涉及技术&#xff1a;django基础&#xff0c;python基础&#xff0c;前端&#xff08;html&#xff0c;echars&#xff09;基础。 这个项目自然而然是基于python逻辑语言处理的&#xff0…

好选客干货分享:化纤长丝找外贸客户

化纤长丝概述 化纤长丝是将聚合物材料&#xff08;如&#xff1a;聚酯、聚酰胺、聚酰胺酯等&#xff09;通过化学反应和纺丝工艺转化制成的连续的细长纤维&#xff0c;具有低成本、高强度、高弹性的优点&#xff0c;与天然纤维相比&#xff0c;其抗皱性和耐磨性也更胜一筹&…

隐秘的角落——proxychains代理工具

互联网只因你太美&#xff0c;自千禧年之后影响了数十年&#xff0c;无数的弄潮儿和狂热者为你痴迷&#xff0c;也有不尽的黑子们就安全问题而争议。直到现在&#xff0c;HTTPS、SSH、SOCKS、VPN、IPsec等技术逐渐为大众所接受&#xff0c;无法割舍。而这次&#xff0c;我将介绍…

防止网络断联,双机热备这么部署就对了

你们好&#xff0c;我的网工朋友。 防火墙的基本功能、配置案例、怎么提升网络的可靠性&#xff0c;给你说过不少。 但有小友留言说&#xff0c;双机热备的知识点&#xff0c;好像没有系统讲过&#xff0c;我去翻了翻&#xff0c;还真是。 为了保证网络的不间断传输&#xf…

浅谈有源电力滤波器及配电能效平台在污水处理厂中的应用

【摘要】为减少污水处理设备产生的各次谐波&#xff0c;通过确定主要谐波源&#xff0c;检测和计算谐波分量&#xff0c;采用有源电力滤波器进行谐波治理&#xff0c;大幅降低了电力系统中的三相电流畸变率&#xff0c;提高了电能质量&#xff1b;抑制了谐波分量&#xff0c;减…

顺序表与链表

思维导图&#xff1a; 顺序表与链表都是两种线性表&#xff0c;但是两者之间又有着许多的不同。顺序表是一种连续的空间&#xff0c;实际上就是数组。链表是不连续的空间&#xff0c;链表的空间是一块一块的开辟出来的。 两者的优点与缺点&#xff1a; 顺序表&#xff1a; 优点…

86、基于STM32的电动车 小车蓄电池锂电池充电桩系统设计(程序+原理图+PCB源文件+硬件资料+元器件清单等)

单片机主芯片选择方案 方案一&#xff1a;AT89C51是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元&a…