Я создал несколько методов, чтобы сделать запрос к Swagger's Pet Shot API просто так:
api.py
def request(method, url, json=None, **kwargs):
with requests.sessions.Session() as session:
return session.request(method=method, url=url, json=json, **kwargs)
def post(url, data=None, **kwargs):
response = requests.post(url, data)
print(response.status_code)
return request('post', url, data=data, **kwargs)
def put(url, data=None, **kwargs):
response = requests.post(url, data)
print(response.status_code)
kwargs.setdefault('allow_redirects', True)
return request('put', url, data=data, **kwargs)
И затем я вызываю эти методы в другом классе, например:
data.py
# Post
payload = {"name": "MahDawg", "photoUrls": ["VeryPretty.jpeg"]}
print(payload)
PostData = api.post(url=variables.base_url + variables.pet_url, data=payload, headers=variables.headers)
# Put
payload = {"id": "9216678377732892246", "name": "MahDawg", "photoUrls": ["VeryPretty.jpeg"]}
json_data = json.dumps(payload)
print(payload)
PutData = api.put(url=variables.base_url + variables.pet_url, headers=variables.headers, data=payload)
Использование их в файле переменной, чтобы не использовать жесткий код информация
base_url = "https://petstore.swagger.io/v2"
pet_url = "/pet/"
headers = {"Content-type": "application/json", "Accept": "application/json"}
И я постоянно получаю эту ошибку
{'name': 'MahDawg', 'photoUrls': ['VeryPretty.jpeg']}
https://petstore.swagger.io/v2/pet/
Traceback (most recent call last):
File "data.py", line 12, in <module>
PostData = api.post(url=variables.base_url + variables.pet_url, data=payload, headers=variables.headers)
File "C:\Users\fjgomescaramelo\PycharmProjects\apitestautomationsample\api.py", line 21, in post
print(response.json())
File "C:\Python27\lib\site-packages\requests\models.py", line 889, in json
self.content.decode(encoding), **kwargs
File "C:\Python27\lib\json\__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "C:\Python27\lib\json\decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Python27\lib\json\decoder.py", line 382, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
C:\Users\fjgomescaramelo\PycharmProjects\apitestautomationsample>python data.py
{'name': 'MahDawg', 'photoUrls': ['VeryPretty.jpeg']}
https://petstore.swagger.io/v2/pet/
Traceback (most recent call last):
File "data.py", line 12, in <module>
PostData = api.post(url=variables.base_url + variables.pet_url, data=payload, headers=variables.headers)
File "C:\Users\fjgomescaramelo\PycharmProjects\apitestautomationsample\api.py", line 21, in post
print(response.json())
File "C:\Python27\lib\site-packages\requests\models.py", line 889, in json
self.content.decode(encoding), **kwargs
File "C:\Python27\lib\json\__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "C:\Python27\lib\json\decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Python27\lib\json\decoder.py", line 382, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
Первая строка в журнале - это просто подтверждение того, что полезная нагрузка json правильная, я также проверил ее и это работает в запросе Почтальона, но не в python. Я всегда возвращаюсь, что объект не может быть декодирован.
Я пробовал обходные пути безрезультатно. Методы получения и удаления работают без проблем.
Заранее спасибо.
РЕДАКТИРОВАТЬ: Для ручной проверки запросов я использую Почтальон, и я экспериментировал с тем же POST запрос без заголовка Content-type, и он возвращает мне код 415 и с заголовком он успешно выполняет POST. Я пытаюсь включить все заголовки, которые использует Postman, и все еще получаю ту же ошибку