前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pytest + yaml 框架 - 3.全局仅登录一次,添加Authentication token认证

pytest + yaml 框架 - 3.全局仅登录一次,添加Authentication token认证

作者头像
上海-悠悠
发布2023-01-03 13:48:27
1K1
发布2023-01-03 13:48:27
举报
文章被收录于专栏:从零开始学自动化测试

前言

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

环境准备

Python 3.8版本 Pytest 7.2.0 最新版

pip 安装插件

代码语言:javascript
复制
pip install pytest-yaml-yoyo

需使用v1.0.2 版本

登录fixture 功能

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

代码语言:javascript
复制
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

代码语言:javascript
复制
config:
  name: get

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

test_post_demo.yml

代码语言:javascript
复制
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 后续会实现,先实现大需求,解决大部分人遇到的痛点问题!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 环境准备
  • 登录fixture 功能
  • 运行用例
  • 其它需求
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档