Skip to main content

pytest requests plugin

Project description

pytest-req

                 __            __                             
    ____  __  __/ /____  _____/ /_            ________  ____ _
   / __ \/ / / / __/ _ \/ ___/ __/  ______   / ___/ _ \/ __ `/
  / /_/ / /_/ / /_/  __(__  ) /_   /_____/  / /  /  __/ /_/ / 
 / .___/\__, /\__/\___/____/\__/           /_/   \___/\__, /  
/_/    /____/                                           /_/   

pytest requests plugin

pytest 使用 Requests 库的插件。完全兼容 Requests 库的使用。轻量级,非侵入。

特点

  • 支持详细的请求/响应日志,并支持可配置。
  • 支持断言response 断言。

安装

pip install pytest-req

使用

pytest-req 完全兼容 Requests API 如下:

pytest-req(fixture) requests
req() requests.request()
get() requests.get()
post() requests.post()
put() requests.put()
delete() requests.delete()
patch() requests.patch()
options() requests.options()
head() requests.head()
session() ⚠ requests.session()

session IDE无法自动补全。可以正常使用session下面的get()/post()/put()...

pytest-req 提供 expect 针对接口返回数据进行断言。

pytest-req(assert) 说明
expect(s).to_be_ok() 状态码 200
expect(s).to_have_status_code() 状态码等于指定值
expect(s).to_have_json_matching() 断言JSON数据,支持exclude参数排查指定字段
expect(s).to_have_path_value() 提取JMESPath路径的数据,断言是否等于指定值
expect(s).to_have_path_contains() 提取JMESPath路径的数据,断言是否包含指定值
expect(s).to_have_path_all_equal() 提取JMESPath路径的数据,断言所有元素是否等于指定值
expect(s).to_match_schema() 检查数据字段类型:https://json-schema.org/

👉︎ 查看测试

⭐ 支持简单的请求

# test_assert.py
from pytest_req.assertions import expect


def test_post_method(post):
    """
    test post request
    """
    s = post('https://httpbin.org/post', data={'key': 'value'})
    expect(s).to_be_ok()


def test_get_method(get):
    """
    test get request
    """
    payload = {'key1': 'value1', 'key2': 'value2'}
    s = get("https://httpbin.org/get", params=payload)
    expect(s).to_be_ok()

⭐ 支持Session

# test_session.py

def test_session(session):
    """
    test session, keep requests cookie
    """
    s = session
    s.get('https://httpbin.org/cookies/set/sessioncookie/123456789')
    s.get('https://httpbin.org/cookies')

⭐ 支持base-url

# test_base_url.py

def test_req_base_url(get):
    """
    test base url
    pytest --base-url=https://httpbin.org
    """
    payload = {'key1': 'value1', 'key2': 'value2'}
    s = get("/get", params=payload)
    assert s.status_code == 200

更多的使用方式参考 requests 文档。

✅ 运行测试

> pytest -s  # 运行当前所有用例
> pytest -s test_req.py # 运行指定文件
> pytest -s --base-url=https://httpbin.org  # 指定base-url
  • -s 查看详细日志。
  • --base-url 设置接口基础URL,用例当中进需要配置路径。

更多的运行方式请参考 pytest 文档。

🗒 运行日志

> pytest -qs --base-url=https://httpbin.org test_base_url.py

2024-07-24 12:18:39 | INFO     | plugin.py | -------------- Request -----------------[🚀]
2024-07-24 12:18:39 | INFO     | plugin.py | [method]: GET      [url]: /get 
2024-07-24 12:18:39 | DEBUG    | plugin.py | [params]:
{
  "key1": "value1",
  "key2": "value2"
}
2024-07-24 12:18:40 | INFO     | plugin.py | -------------- Response ----------------[🛬️]
2024-07-24 12:18:40 | INFO     | plugin.py | successful with status 200
2024-07-24 12:18:40 | DEBUG    | plugin.py | [type]: json      [time]: 1.655213
2024-07-24 12:18:40 | DEBUG    | plugin.py | [response]:
 {
  "args": {
    "key1": "value1",
    "key2": "value2"
  },
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.32.3",
    "X-Amzn-Trace-Id": "Root=1-66a080a0-2cb150485a260ae75b34b32f"
  },
  "origin": "171.10.176.209",
  "url": "https://httpbin.org/get?key1=value1&key2=value2"
}
.2024-07-24 12:18:40 | INFO     | plugin.py | -------------- Request -----------------[🚀]
2024-07-24 12:18:40 | INFO     | plugin.py | [method]: GET      [url]: /cookies/set/sessioncookie/123456789 
2024-07-24 12:18:43 | INFO     | plugin.py | -------------- Response ----------------[🛬️]
2024-07-24 12:18:43 | INFO     | plugin.py | successful with status 200
2024-07-24 12:18:43 | DEBUG    | plugin.py | [type]: json      [time]: 0.807398
2024-07-24 12:18:43 | DEBUG    | plugin.py | [response]:
 {
  "cookies": {
    "sessioncookie": "123456789"
  }
}
2024-07-24 12:18:43 | INFO     | plugin.py | -------------- Request -----------------[🚀]
2024-07-24 12:18:43 | INFO     | plugin.py | [method]: GET      [url]: /cookies 
2024-07-24 12:18:44 | INFO     | plugin.py | -------------- Response ----------------[🛬️]
2024-07-24 12:18:44 | INFO     | plugin.py | successful with status 200
2024-07-24 12:18:44 | DEBUG    | plugin.py | [type]: json      [time]: 1.226137
2024-07-24 12:18:44 | DEBUG    | plugin.py | [response]:
 {
  "cookies": {
    "sessioncookie": "123456789"
  }
}
.
2 passed in 5.36s

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytest_req-0.7.0.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pytest_req-0.7.0-py3-none-any.whl (13.7 kB view details)

Uploaded Python 3

File details

Details for the file pytest_req-0.7.0.tar.gz.

File metadata

  • Download URL: pytest_req-0.7.0.tar.gz
  • Upload date:
  • Size: 11.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for pytest_req-0.7.0.tar.gz
Algorithm Hash digest
SHA256 dfb82d5bf0fa35ca5707d3986290b3f9eaf7ccd68a41d11b328cc8580c96435b
MD5 e08452b673b74e8f9d7a6febb5d08022
BLAKE2b-256 66d24a98dc3dc667ac91c2b10a9e22e39ca563e5e6e20c33c3c04da704cd8b4f

See more details on using hashes here.

File details

Details for the file pytest_req-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: pytest_req-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 13.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for pytest_req-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5b23cb9604d8d64f0228637c495f89e5e1201e78284e711522abbd06da5fb3cc
MD5 ba1a9cea504f1c7e2d8770bc508dfb47
BLAKE2b-256 c5ee5f83d543d0ba1f807050bde7ff806faa29c1890d4edd888bd468a7799857

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page