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
Metadata
Release files for pytest-req 0.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pytest_req-0.7.0.tar.gz | 11.9 kB | Without provenance | Details for pytest_req-0.7.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pytest_req-0.7.0-py3-none-any.whl | Python 3 | none | any | Details for pytest_req-0.7.0-py3-none-any.whl |
Total release size: 25.6 kB
Release files / pytest_req-0.7.0.tar.gz
| Download URL | pytest_req-0.7.0.tar.gz |
|---|---|
| Size | 11.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
dfb82d5bf0fa35ca5707d3986290b3f9eaf7ccd68a41d11b328cc8580c96435b
|
|
BLAKE2b-256 checksum How to use checksums |
66d24a98dc3dc667ac91c2b10a9e22e39ca563e5e6e20c33c3c04da704cd8b4f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.4
|
Release files / pytest_req-0.7.0-py3-none-any.whl
| Download URL | pytest_req-0.7.0-py3-none-any.whl |
|---|---|
| Size | 13.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5b23cb9604d8d64f0228637c495f89e5e1201e78284e711522abbd06da5fb3cc
|
|
BLAKE2b-256 checksum How to use checksums |
c5ee5f83d543d0ba1f807050bde7ff806faa29c1890d4edd888bd468a7799857
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.4
|
Security for pytest-req 0.7.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.