pytest + yaml 框架 -68.新增全域性請求引數配置verify和headers

上海-悠悠發表於2024-04-22

前言

最近有小夥伴提到如何全域性新增請求引數verify=False 和 全域性請求新增頭部引數如:{"x-token": "xxx"}
之前的版本可以用fixture解決,v1.5.8版本可以支援在config中配置

fixture 更新全域性請求

第一種解決方案,透過fixture來更新全域性session會話

import pytest


@pytest.fixture(scope="session", autouse=True)
def auto_add_args(requests_session):
    # 全域性更新verify = False
    requests_session.verify = False
    # 全域性更新頭部引數headers
    requests_session.headers.update({"x-token": "xxxxx"})

config中配置全域性請求引數

config配置中,目前僅支援verify 和 headers 2個請求相關引數的配置

from pytest_yaml_yoyo.db import ConnectMysql


class Config:
    """每個環境都有一樣的公共配置"""
    version = "v1.0"


class TestConfig(Config):
    """測試環境"""
    BASE_URL = 'http://124.70.221.221:8201'
    BLOG_URL = 'https://www.cnblogs.com'
    USERNAME = 'test9'
    PASSWORD = '123456'

    verify = False
    headers = {"xx-token": "xx111"}


class UatConfig(Config):
    """聯調環境"""
    BASE_URL = 'http://124.70.221.221:8201'
    USERNAME = 'test_uat'
    PASSWORD = '123456'


# 環境關係對映,方便切換多環境配置
env = {
    "test": TestConfig,
    "uat": UatConfig
}

yaml用例示例test_a.yml

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

執行用例

pytest test_a.yml

執行日誌

>pytest test_a.yml
================================================== test session starts ==================================================
platform win32 -- Python 3.9.13, pytest-7.4.4, pluggy-1.0.0
rootdir: D:\demo\untitled3.9
configfile: pytest.ini
plugins: allure-pytest-2.13.1, Faker-18.4.0, repeat-0.9.1, rerunfailures-12.0, runtime-yoyo-1.0.1, yaml-yoyo-1.5.8
collected 1 item                                                                                                         

test_a.yml::test_demo
----------------------------------------------------- live log call -----------------------------------------------------
2024-04-22 12:14:17 [INFO]: 執行檔案-> test_a.yml
2024-04-22 12:14:17 [INFO]: base_url-> http://124.70.221.221:8201
2024-04-22 12:14:17 [INFO]: config variables-> {}
2024-04-22 12:14:17 [INFO]: 執行用例-> test_demo
2024-04-22 12:14:17 [INFO]: 用例步驟name: post
2024-04-22 12:14:17 [INFO]: yml raw  -->: {'method': 'POST', 'url': 'http://httpbin.org/post', 'json': {'username': 'test'
, 'password': '123456'}}
2024-04-22 12:14:17 [INFO]: ------  request info   ------
POST http://httpbin.org/post
headers: {
    "User-Agent": "python-requests/2.31.0",
    "Accept-Encoding": "gzip, deflate",
    "Accept": "*/*",
    "Connection": "keep-alive",
    "x-token": "xxxxx"
}
json: {
    "username": "test",
    "password": "123456"
}
2024-04-22 12:14:18 [INFO]: ------  response info   ------
url: http://httpbin.org/post
status_code: 200 OK
headers: {
    "Date": "Mon, 22 Apr 2024 04:14:17 GMT",
    "Content-Type": "application/json",
    "Content-Length": "567",
    "Connection": "keep-alive",
    "Server": "gunicorn/19.9.0",
    "Access-Control-Allow-Origin": "*",
    "Access-Control-Allow-Credentials": "true"
}
cookies: {}
body: {
    "args": {},
    "data": "{\"username\": \"test\", \"password\": \"123456\"}",
    "files": {},
    "form": {},
    "headers": {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate",
        "Content-Length": "42",
        "Content-Type": "application/json",
        "Host": "httpbin.org",
        "User-Agent": "python-requests/2.31.0",
        "X-Amzn-Trace-Id": "Root=1-6625e418-5610a93047c129fe3a7e1d84",
        "X-Token": "xxxxx"
    },
    "json": {
        "password": "123456",
        "username": "test"
    },
    "origin": "183.193.25.182",
    "url": "http://httpbin.org/post"
}

2024-04-22 12:14:18 [INFO]: extract  提取物件-> {'url': 'body.url'}
2024-04-22 12:14:18 [INFO]: extract  提取結果-> {'url': 'http://httpbin.org/post'}
2024-04-22 12:14:18 [INFO]: validate 校驗內容-> [{'eq': ['status_code', 200]}, {'eq': ['headers.Server', 'gunicorn/19.9.0'
]}, {'eq': ['$..username', 'test']}, {'eq': ['body.json.username', 'test']}]
2024-04-22 12:14:18 [INFO]: validate 校驗結果-> eq: [200, 200]
2024-04-22 12:14:18 [INFO]: validate 校驗結果-> eq: [gunicorn/19.9.0, gunicorn/19.9.0]
2024-04-22 12:14:18 [INFO]: validate 校驗結果-> eq: [test, test]
2024-04-22 12:14:18 [INFO]: validate 校驗結果-> eq: [test, test]
PASSED                                                                                           [100%]

=================================================== 1 passed in 1.21s =

相關文章