首页 > 其他分享 >pytest + yaml 框架 - 3.全局仅登录一次,在用例中自动在请求头部添加Authentication token认证

pytest + yaml 框架 - 3.全局仅登录一次,在用例中自动在请求头部添加Authentication token认证

时间:2022-11-25 11:12:12浏览次数:41  
标签:登录 yaml fixture 用例 token session requests

前言

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

环境准备

Python 3.8版本
Pytest 7.2.0 最新版

pip 安装插件

pip install pytest-yaml-yoyo

需使用v1.0.2 版本

登录fixture 功能

我在pytest + yaml 框架框架中封装了一个内置fixture叫requests_session, 它的作用范围是scope="session",也就是全部session用例会话中仅实例化一次。
现在我只需在conftest 中写一个登录的fixture功能,获取token后添加到requests_session头部

import pytest
import uuid
"""
全局仅登录一次,获取token,
在请求头部添加Authentication Bearer 认证
内置fixture requests_session
"""


def login():
    """登录方法"""
    # 调用登录方法,返回token
    return str(uuid.uuid4())  # noqa


@pytest.fixture(scope="session", autouse=True)
def login_first(requests_session):
    """全局仅一次登录, 更新session请求头部"""
    # 调用登录方法,获得token
    token = login()
    headers = {
        "Authentication": f"Bearer {token}"
    }
    requests_session.headers.update(headers)

上面代码中,我用login() 函数实现登录功能,这里返回一个随机值,主要是为了验证我只调用了一次登录方法
接着我写2个yaml文件(注意,yaml文件中也不需要重复去添加请求头部了
test_get_demo.yml

config:
  name: get

teststeps:
-
  name: get
  request:
    method: GET
    url: http://httpbin.org/get
  validate:
    - eq: [status_code, 200]

test_post_demo.yml

config:
  name: post示例
  variables:
    username: test
    password: "123456"

teststeps:
-
  name: post
  request:
    method: POST
    url: http://httpbin.org/post
    json:
      username: ${username}
      password: ${password}
  validate:
    - eq: [status_code, 200]
    - eq: [headers.Server, gunicorn/19.9.0]
    - eq: [$..username, test]
    - eq: [body.json.username, test]

运行用例

在命令行中输入pytest运行
抓包看发过去的请求

于是可以看到,在2个用例中都自动带上了请求头部参数。
(登录cookies的使用原理也是一样的,登录后cookies一般会自动保持)

其它需求

那有些接口不需要登录怎么办呢?比如登录和注册的接口,是不需要带上登录token的,那不能一刀切。
我除了默认用到一个requests_session 全局的内置fixture,还预留了2个

  • requests_module: 每个yaml文件中用一次
  • requests_function: 每个用例中用一次

在yaml文件中切换到指定fixture功能,requests_modulerequests_function 后续会实现,先实现大需求,解决大部分人遇到的痛点问题!

标签:登录,yaml,fixture,用例,token,session,requests
From: https://www.cnblogs.com/yoyoketang/p/16924506.html

相关文章

  • Kubernetes(K8S) yaml 介绍
    使用空格做为缩进缩进的空格数目不重要,只要相同层级的元素左侧对齐即可低版本缩进时不允许使用Tab键,只允许使用空格使用#标识注释,从这个字符一直到行尾,都会被解......
  • asp.net core api 基于token的JWT bearer 的鉴权验证实现探索
    .net的各种框架啥的都不是很熟悉,当时只是想怎么实现快速校验授权确保api是通过验证之后才能打开。我说的快速就是不需要写重复的样板代码,通过总体控制,最后发现,似乎也只能通......
  • Spring Boot+Spring Security+JWT 刷新Token之实现 RESTful Api 认证(二)
    作者:迷彩SpringBoot+SpringSecurity+JWT实现RESTfulApi认证(二)摘要上一篇​​javascript:void(0)​​我们已经实现了基本的登录和token认证接口,但是这里有个问题,对于......
  • JWT(JSON Web Token)介绍与实践
    作者:迷彩JWT(JSONWebToken)介绍与实践JWT介绍Jsonwebtoken(JWT),根据官网的定义,是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC7519).该toke......
  • paddlenlp的tokenizer中的__call__()函数
    目录函数原型函数含义函数原型def__call__(self,text:Union[str,List[str],List[List[str]]],text_pair:Optional[Union[str,......
  • 用例技术(四)——用例编写工作过程和大型团队中用例收集的建议
     一.实际编写用例,每个开发组都应该形成并制定一套工作习惯,一种好的方式是由开发组和个人分工合作,因为组比个人有两个优点,一是便于集中讨论,二是便于对于问题达成共......
  • Pig4Cloud之检验token
    前端校验请求/src/page/index/index.vuerefreshToken(){this.refreshTime=setInterval(()=>{checkToken(this.refreshLock,this.$store)},......
  • 用例技术(二)——几种用例模板(格式)
    1.完整正式用例格式<名字:应该是一个动词短语来表示目标>使用的环境:<目标较长的描述,如果需要,还包括触发条件>范围:<设计范围,设计时将系统作为黑盒考虑>层次:<概要,用户目......
  • 用例技术(1)-一些基础概念
    词汇缩写SuD——SystemunderDisscussion:被讨论系统用例历史20世纪60年代:IvarJacobson在爱立信工作提出了用例的概念。20世纪80年代:引入到面向对象编程领域。1994年......
  • Pig4Cloud之登陆验证(二)发放token
    上一篇介绍了客户端认证处理,那是令牌颁发的前提。这篇开始,我们就来研究下令牌颁发。令牌颁发授权服务器提供令牌颁发接口(/oauth2/token),由客户端发起请求,授权服务器生成访......