-
Notifications
You must be signed in to change notification settings - Fork 421
Open
Labels
aiohttpissues related to aiohttp libraryissues related to aiohttp librarybughelp required replicatingThis issue would appreciate having a toy repo that potential contributors could clone to replicateThis issue would appreciate having a toy repo that potential contributors could clone to replicate
Milestone
Description
When using aiohttp json parameter for put or post methods, the resulting cassette does not record the body. Instead the body is seen as null. Aiohttp using the data parameter appears to work fine and requests library works as expected.
Below is a script with tests for aiohttp using methods put and post with body passed in using data and json as well as similar tests for requests. Only two tests, test_aiohttp_json_post_body and test_aiohttp_json_put_body, fail.
Versions:
Python 3.6.9
vcrpy 4.0.2
aiohttp 3.6.2
requests 2.22.0
pytest 5.3.2
pytest-asyncio 0.10.0
import vcr
import aiohttp
import pytest
import requests
@pytest.mark.asyncio
async def test_aiohttp_json_post_body():
with vcr.use_cassette(f"test_aiohttp_json_post_body.yml") as cass:
async with aiohttp.ClientSession() as session:
async with session.post(
"https://postman-echo.com/post", json={"example": "json"},
) as response:
## verify postman-echo received request body
assert response.status == 200
data = await response.json()
assert data["json"] == {"example": "json"}
cass.rewind()
assert len(cass) == 1
assert cass.requests[0].body == b'{"example": "json"}'
@pytest.mark.asyncio
async def test_aiohttp_json_put_body():
with vcr.use_cassette("test_aiohttp_json_put_body.yml") as cass:
async with aiohttp.ClientSession() as session:
async with session.put(
"https://postman-echo.com/put", json={"example": "json"},
) as response:
## verify postman received request body
assert response.status == 200
data = await response.json()
assert data["json"] == {"example": "json"}
cass.rewind()
assert len(cass) == 1
assert cass.requests[0].body == b'{"example": "json"}'
@pytest.mark.asyncio
async def test_aiohttp_data_post_body():
with vcr.use_cassette(f"test_aiohttp_data_post_body.yml") as cass:
async with aiohttp.ClientSession() as session:
async with session.post(
"https://postman-echo.com/post",
data=b'{"example": "json"}',
headers={"Content-Type": "application/json"},
) as response:
## verify postman received request body
assert response.status == 200
data = await response.json()
assert data["data"] == {"example": "json"}
cass.rewind()
assert len(cass) == 1
assert cass.requests[0].body == b'{"example": "json"}'
@pytest.mark.asyncio
async def test_aiohttp_data_put_body():
with vcr.use_cassette("test_aiohttp_data_put_body.yml") as cass:
async with aiohttp.ClientSession() as session:
async with session.put(
"https://postman-echo.com/put",
data=b'{"example": "json"}',
headers={"Content-Type": "application/json"},
) as response:
## verify postman received request body
assert response.status == 200
data = await response.json()
assert data["data"] == {"example": "json"}
cass.rewind()
assert len(cass) == 1
assert cass.requests[0].body == b'{"example": "json"}'
def test_requests_json_post_body():
with vcr.use_cassette(f"test_requests_json_post_body.yml") as cass:
response = requests.post("https://postman-echo.com/post", json={"example": "json"},)
## verify postman received_code request body
assert response.status_code == 200
data = response.json()
assert data["json"] == {"example": "json"}
cass.rewind()
assert len(cass) == 1
assert cass.requests[0].body == b'{"example": "json"}'
def test_requests_json_put_body():
with vcr.use_cassette("test_requests_json_put_body.yml") as cass:
response = requests.put("https://postman-echo.com/put", json={"example": "json"},)
## verify postman received_code request body
assert response.status_code == 200
data = response.json()
assert data["json"] == {"example": "json"}
cass.rewind()
assert len(cass) == 1
assert cass.requests[0].body == b'{"example": "json"}'
def test_requests_data_post_body():
with vcr.use_cassette(f"test_requests_data_post_body.yml") as cass:
response = requests.post(
"https://postman-echo.com/post",
data=b'{"example": "json"}',
headers={"Content-Type": "application/json"},
)
## verify postman received request body
assert response.status_code == 200
data = response.json()
assert data["data"] == {"example": "json"}
cass.rewind()
assert len(cass) == 1
assert cass.requests[0].body == b'{"example": "json"}'
def test_requests_data_put_body():
with vcr.use_cassette("test_requests_data_put_body.yml") as cass:
response = requests.put(
"https://postman-echo.com/put",
data=b'{"example": "json"}',
headers={"Content-Type": "application/json"},
)
## verify postman received request body
assert response.status_code == 200
data = response.json()
assert data["data"] == {"example": "json"}
cass.rewind()
assert len(cass) == 1
assert cass.requests[0].body == b'{"example": "json"}'btmills
Metadata
Metadata
Assignees
Labels
aiohttpissues related to aiohttp libraryissues related to aiohttp librarybughelp required replicatingThis issue would appreciate having a toy repo that potential contributors could clone to replicateThis issue would appreciate having a toy repo that potential contributors could clone to replicate