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(404) 状态码等于 404
expect(s).to_have_json_matching(json_data, exclude=[]) 断言JSON数据,exclude=[排查的字段列表]
expect(s).to_have_path_value("headers.Host", "httpbin.org") 提取的数据,断言是否等于, 参考:https://jmespath.org
expect(s).to_have_path_contains("headers.Host", "httpbin") 提取的数据,断言是否包含, 参考:https://jmespath.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.5.1.tar.gz (12.4 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.5.1-py3-none-any.whl (13.1 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for pytest_req-0.5.1.tar.gz
Algorithm Hash digest
SHA256 71e26fc004adee31fec5fe7357e2f908ac6c77c943d1f862d37a0919fce5371a
MD5 27b67328810e1a5a7c57701aff2bc54e
BLAKE2b-256 7ac8b678069d6c222a9bec2b14fa217750a84b2120d9b62740fb28835aed65ed

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pytest_req-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 fb72fe4d32e1a45a559aed8108137aa00798a5863ac1a1abd69c4aa10a88817d
MD5 2114e874de2afbc86774a6b191760d13
BLAKE2b-256 5b9fa6faa6f591ec9faa69cfaf3575e464d20799881b0cb2ef41ef8a4ee36a50

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