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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
71e26fc004adee31fec5fe7357e2f908ac6c77c943d1f862d37a0919fce5371a
|
|
| MD5 |
27b67328810e1a5a7c57701aff2bc54e
|
|
| BLAKE2b-256 |
7ac8b678069d6c222a9bec2b14fa217750a84b2120d9b62740fb28835aed65ed
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb72fe4d32e1a45a559aed8108137aa00798a5863ac1a1abd69c4aa10a88817d
|
|
| MD5 |
2114e874de2afbc86774a6b191760d13
|
|
| BLAKE2b-256 |
5b9fa6faa6f591ec9faa69cfaf3575e464d20799881b0cb2ef41ef8a4ee36a50
|