Python requests request payload

Метод post() модуля requests в Python

Метод post() используется, когда мы хотим отправить какие-то данные на сервер. Затем данные сохраняются в базе данных.

Что такое HTTP-запрос в Python?

POST отправляет данные на сервер для создания ресурса. Данные, отправленные на сервер с запросом POST, хранятся в теле запроса HTTP.

Ключевые моменты POST-запроса

  1. Запросы POST не имеют ограничений по длине данных. Это может быть все, что вы хотите.
  2. POST-запросы не сохраняются в истории браузера.
  3. Никогда не кэшируются.
  4. Не могут быть добавлены в закладки.

Что такое модуль запросов Python?

Requests — это HTTP-библиотека под лицензией Apache2, написанная на Python, которая помогает сделать HTTP-запросы более простыми и удобными для человека.

Как использовать модуль requests в Python?

Вам необходимо установить модуль запросов в вашей системе, чтобы использовать его в Python. Чтобы установить модуль requests, выполните следующую команду.

Чтобы использовать Pipenv для управления пакетами Python, вы можете запустить следующую команду.

После установки библиотеки запросов вы можете использовать ее в своем приложении. Например, импорт запросов выглядит следующим образом.

Что такое метод requests.post() в Python?

Чтобы создать запрос POST в Python, используйте метод request.post(). Метод запросов post() принимает URL-адреса, данные, json и аргументы в качестве аргументов и отправляет запрос POST на указанный URL-адрес.

Вы можете отправить данные вместе с post-запросом.

Синтаксис

Параметры

Параметр Описание
url обязателен, URL-адрес запроса.
data необязателен. Это может быть словарь, список кортежей, байты или файловый объект для отправки по указанному url.
json необязательно. Это объект JSON для отправки по указанному URL.
files необязательно. Это словарь файлов для отправки по указанному url.
allow_redirects необязательно. Это логическое значение для включения/отключения перенаправления.
Значение по умолчанию True (разрешает перенаправление)
auth необязательно. Это кортеж для включения безопасной аутентификации по протоколу HTTP.
По умолчанию None
cert необязательно. Это строка или кортеж, указывающий файл сертификата или ключ.
По умолчанию None
cookies необязательно. Это словарь файлов cookie для отправки по указанному url-адресу.
По умолчанию None
headers необязательно. Это словарь HTTP-заголовков для отправки по указанному URL.
По умолчанию None
proxies необязательно. Это словарь протокола для URL-адреса прокси-сервера.
По умолчанию None
stream необязательно. Логическое значение показывает, должен ли ответ быть немедленно загружен (False) или передан потоком (True).
Значение по умолчанию False
timeout необязательно. Это кортеж, или число, указывающее, сколько секунд требуется для ожидания, пока клиент установит соединение и отправит ответ. Аргумент по умолчанию равен None, что означает, что запрос будет продолжаться до тех пор, пока соединение не будет закрыто или потеряно.
verify необязательно. Это логическое значение или строковое указание для проверки наличия TLS-сертификата сервера или нет.
Значение по умолчанию True
Читайте также:  Сменить версию питона pycharm

Источник

Самурайские инструменты QA: Python (requests)

Постоянно в слезах и прострации не знающий про автоматизацию QA самурай

Рад приветствовать читателей Хабр. Меня зовут Азамат Акчурин, я QA инженер в Bimeister.
Часто при приемке разного рода фич нам, тестировщикам, не хватает сущностей/данных в тестируемой системе. Тестировать на пустых данных не “comme il faut”, поэтому, чтобы наполнить систему данными, мы можем обратиться к разработчикам, QA automation, добавить данные в БД и т. д. — способов очень много.

И сегодня я расскажу про один из таких способов, который «дешево и сердито» позволит тестировщику самостоятельно, не отвлекая других сотрудников, заполнить систему данными.

Все, что нам нужно

  1. Установить Python.
  2. Установить IDE для Python — лично пользуюсь PyCharm.
  3. Дочитать эту статью, чтобы научиться применять такой способ в решении задач.

N.B.

В данной статье опущу пункты установки Python и IDE — будем считать, что они уже установлены. Перейдем, непосредственно, к практике.

Кейс #1

Представим, что разработали новую таблицу, в которой содержатся объекты со свойством «Строка» — то есть мы можем создать объекты, в которых содержатся любые символы. Нам необходимо проверить фильтрацию объектов, поиск, пагинацию и т. д.

А если таких свойств будет 5/10/15 штук в одном объекте? Какая бы “Самая быстрая рука на Диком Западе” не была у тестировщика, заполнять систему данными он будет неприлично долго.

Пришло время научить машину делать рутинную работу за нас:

  1. Открываем devtoolsnetworks и создаем один объект руками.
  2. Ловим запрос, который ушел при создании объекта, и во вкладке Networks запоминаем следующие параметры:
    — Request Url «https://[что-то типаgoogle.com]/api/BimExemplars».
    — Request Method «post». В этом примере я авторизован под учетной записью в системе, поэтому из Request Headears также фиксирую Bearer Token «Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6….и еще куча символов».
  3. Из вкладки Payload искомого запроса записываем данные для Request Payload.

Добавление объекта вручнуюДобавление объекта вручную. Смотрим Payload

Все исходные данные мы собрали. Теперь перейдем к написанию скрипта:

import requests as r # Для импорта библиотеки requests, с помощью этой библиотеки будем отправлять запросы. import random # Данная библиотека нужна для формирования рандомных значений. url = 'https://[что-то типа google.com]/api/BimExemplars' # В переменную url сохранили значение Request Url (см. п2). bearer = 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJmYmMyMzRhZC01NjQ1LTQ3MTktODFmNC0zZDQyNzliMTMxYWEiLCJpc3. еще много символов' # В переменную bearer сохранили значение Bearer Token (см. п2). for i in range(15): # Создаем цикл, в данном случае код — под этим циклом исполнится 15 раз. Почему 15? Да просто пример из головы. Если нам нужно 100 объектов, просто делаем цикл на 100 повторений. payload = < # В переменную payload сохраняем значение из Requests Payload (см. п3). Но, если оставить в таком виде и запустить код, в системе будет 15 совершенно одинаковых объектов. Давайте подумаем, что можно изменить? "projectId": "76dfd02a-9016-43f3-93f1-7744acd98f54", # ID проекта оставляем неизменным, так как именно в этом проекте мне необходимы созданные объекты. "title": "Test obj", # Поле отвечающее за наименование объекта. Отличное поле для рандомных значений. Заменим значение "Test obj" на f"Test obj ". Что это нам даст? Будет создан Объект "Test obj ". "bimClassId": "94e9f5ff-1afa-47ec-beb0-59109cc3d9dd", # bimClassId и ниже bimPropertyId отвечают за поля свойств у объекта, поэтому оставим их неизменными. "bimExemplarProperties": [ < "bimPropertyId": "8f2a6659-feb4-42d6-899d-8e7ebc99d5e4", "value": "111" # Поле, отвечающее за значения в поле Свойства. Тоже отличное поле для рандомных значений. Идем по протоптанной дорожке и заменяем "123" на f"random.randint(1, 100)". Что здесь происходит? Думаю, уже понятно. >, < "bimPropertyId": "391fb437-8771-4d80-a22e-af86ce0fd6a8", "value": "222" # Аналогично заменим здесь. >, < "bimPropertyId": "65f144fa-56d2-4bf1-88f3-452242f03a68", "value": "333" # Здесь. >, < "bimPropertyId": "0d80ff51-5771-4d4d-9a1b-645faaac8c25", "value": "444" # И здесь. >, < "bimPropertyId": "9d64cfc4-bcfc-44d2-88b0-8f8d511db06c", "value": "555" # И здесь. >] > requests = r.post(url, headers=, json=payload) # Что происходит: r.post(url, headers=, json=payload) — говорим системе сделать Post запрос (см. п2 Requests Method "post"); url — запрос, который добавляет объекты; headers= — хедеры, которые отправляются вместе с запросом, тут как бы говорим системе, что пользователь авторизован; json=payload — здесь передаем тело запроса. print(requests.status_code) # После запуска кода выведет статус код каждого запроса. Сугубо личная вещь, сделано для удобства.

В таком виде мы создадим 15 одинаковых объектов, содержащих одинаковую информацию, соответствующую payload.

Добавим уникальности объектам через random.randint(1, 100)

import requests as r import random url = 'https://[что-то типа google.com]/api/BimExemplars' bearer = 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJmYmMyMzRhZC01NjQ1LTQ3MTktODFmNC0zZDQyNzliMTMxYWEiLCJpc3. еще много символов' for i in range(15): payload = < "projectId": "76dfd02a-9016-43f3-93f1-7744acd98f54", "title": f"Test obj ", # Подставит любое целое число от 1 до 100 "bimClassId": "94e9f5ff-1afa-47ec-beb0-59109cc3d9dd", "bimExemplarProperties": [ < "bimPropertyId": "8f2a6659-feb4-42d6-899d-8e7ebc99d5e4", "value": f"" >, < "bimPropertyId": "391fb437-8771-4d80-a22e-af86ce0fd6a8", "value": f"" >, < "bimPropertyId": "65f144fa-56d2-4bf1-88f3-452242f03a68", "value": f"" >, < "bimPropertyId": "0d80ff51-5771-4d4d-9a1b-645faaac8c25", "value": f"" >, < "bimPropertyId": "9d64cfc4-bcfc-44d2-88b0-8f8d511db06c", "value": f"" > ] > requests = r.post(url, headers=, json=payload) print(requests.status_code)

Теперь запустим код и посмотрим, что произойдет в системе:

Запуск кода

  1. Запускаем код.
  2. Смотрим, что все запросы вернулись с кодом 201.
  3. Смотрим, что в системе создалось 15 объектов, и все они имеют рандомные наименования.

Кейс #2

Чтобы закрепить материал, рассмотрим другой пример. Если открыть любой из созданных объектов и изменить какие-либо значения свойств, то можно сохранить новую версию объекта:

Изменение версии объекта

Затем, после сохранения «как новой версии» пользователю доступен список всех версий

Отображение версий

В практике столкнулся с тем, что необходимо было проверить открытие (до 1 сек.) и отображение дропдауна с 1000 версий. И тут снова пригодился Python. Повторим, знакомые нам, шаги:

Фиксируем параметры для составления скрипта

  1. Открываем devtoolsnetworks.
  2. Создаем новую версию объектами руками.
  3. Ловим запрос, который сохраняет версию и фиксируем параметры:
    Request Url «https://[что-то типаgoogle.com]/api/BimExemplarVersions»,
    Request Method «Post». Из Request Headears запоминаем Bearer Token «Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp. и еще много символов».
  1. Из вкладки Payload скопируем значение Request Payload:
< "bimExemplarId": "92ea9b30-a097-4a7e-a472-48d020eecc13", "title": "Test obj 893", "bimExemplarProperties": [ < "bimPropertyId": "57c5ae3d-3aa2-40c4-a77b-bc90b3cf84f7", "value": "73" >, < "bimPropertyId": "4a23533f-1757-4a0c-931b-57e28a45c1bd", "value": "162 значение изменено для сохранения новой версии" >, < "bimPropertyId": "588b3da1-73bc-4ea6-95d2-035f6082216d", "value": "987 значение изменено для сохранения новой версии" >, < "bimPropertyId": "8740ae93-2a9e-4a17-8e56-5bede7405554", "value": "51" >, < "bimPropertyId": "521ca3e8-64ef-4d3a-af2d-d8facdaf37df", "value": "608" >, < "bimPropertyId": "fc4a6ce2-eb55-4543-9913-fc4238ce739e", "value": "593" >, < "bimPropertyId": "d18c9d75-2298-45d7-9542-1644b900ed45", "value": "535" >], "bimExemplarVersionId": "f813654e-43b9-437b-930a-4882f1d71d73" >

Нужные данные для скрипта мы записали. Перейдем к финальному скрипту. Рандомные значение проставили только для полей Объекта, так как, меняя только поля объекта, можно сохранить новую версию:

import requests as r import random url = 'https://[что-то типа google.com]/api/BimExemplarVersions' bearer = 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiNmZjYThmYi1iYjgwLTQzZGItYmY4NC02MDk3NzM5ZGEzZ. и еще много символов' for i in range(1000): payload = < "bimExemplarId": "92ea9b30-a097-4a7e-a472-48d020eecc13", "title": "Test obj 893", "bimExemplarProperties": [ < "bimPropertyId": "57c5ae3d-3aa2-40c4-a77b-bc90b3cf84f7", "value": f"" # Меняем значение свойства. >, < "bimPropertyId": "4a23533f-1757-4a0c-931b-57e28a45c1bd", "value": f"" # Меняем значение свойства. >, < "bimPropertyId": "588b3da1-73bc-4ea6-95d2-035f6082216d", "value": f"" # Меняем значение свойства. >, < "bimPropertyId": "8740ae93-2a9e-4a17-8e56-5bede7405554", "value": f"" # Меняем значение свойства. >, < "bimPropertyId": "521ca3e8-64ef-4d3a-af2d-d8facdaf37df", "value": f"" # Меняем значение свойства. >, < "bimPropertyId": "fc4a6ce2-eb55-4543-9913-fc4238ce739e", "value": f"" # Меняем значение свойства. >, < "bimPropertyId": "d18c9d75-2298-45d7-9542-1644b900ed45", "value": f"" # Меняем значение свойства. > ], "bimExemplarVersionId": "f813654e-43b9-437b-930a-4882f1d71d73" > requests = r.post(url, headers=, json=payload) print(requests.status_code)

В этом примере хватило 5 минут, чтобы создать 1000 версий для дальнейших тестов:

Проверка исполнения кода

В заключение

Мы разобрали два простых кейса из опыта, в которых буквально за 5-10 минут сгенерировали данные для тестирования. Этот способ, на мой взгляд, поможет тестировщику без каких-либо фундаментальных знаний программирования решать рутинные задач подобного рода. Если данная тема будет актуальна для читателей, то в следующей статье разберу более сложные примеры, в которых используются несколько запросов и параметры из одного запроса прокидываются в другой запрос.

Прошу подсказать читателей, интересна ли тема и каким инструментом пользуйтесь при решении таких задач?

P.S.

Данная инструкция не является призывом к действию, эталоном и панацеей. Это всего лишь один из способов для решения вопросов «одному.здесь.сейчас», который возможно принесет пользу и вам.

Источник

Оцените статью