Форум сайта python.su
Всем привет, подскажите, как можно сделать следующее:
1. Отправить метод POST
2. Создать текстовый файл в котором хранить 5 шт place_id полученных из 1 пункта (не писать портянку вызывая 5 раз метод, сделать красиво)
3. Отправить метод Get который будет читать place_id из текстового файла (из него, не их переменной первого запроса) и убедиться что данные place_id существуют
4. Отправить метод DELETE, с помощью которого удалить 2-й и 4-й place_id из текстового файла, полученного в результате выполнения предыдущего задания (удалить значит не стереть, это значит что в файле по прежнему 5 значений, но 2-я и 4-я локация не существуют)
5. Отправить метод Get который будет читать place_id из текстового файла, и сделает отбор на существующие и несуществующие локации
6. Создать новый файл и поместить в него 3 существующих локации (place_id), которые были отобраны в результате метода GET
Вот пытался, пока безрезультатно:
Отредактировано Mishaa.90 (Март 12, 2023 16:59:41)
Офлайн
mport requests class Test_new_location(): """Работа с новой локацией""" def test_create_new_location(self): """Создание новой локации""" base_url = "https://rahulshettyacademy.com" # базовая url key = "?key=qaclick123" # Параметр для всех запросов (из документации) """Создание новой локации""" post_resourse = "/maps/api/place/add/json" # Ресурс метода POST post_url = base_url + post_resourse + key print(post_url) # json_for_create_new_location = { "location": { "lat": -38.383494, "lng": 33.427362 }, "accuracy": 50, "name": "Frontline house", "phone_number": "(+91) 983 893 3937", "address": "29, side layout, cohen 09", "types": [ "shoe park", "shop" ], "website": "http://google.com", "language": "French-IN" } result_post = requests.post(post_url, json = json_for_create_new_location) print("Статус-код : " + str(result_post.status_code)) check_post = result_post.json() place_id = check_post.get("place_id") print("Place_id : " + place_id) for i in range(1, 6): print(result_post.text) place = open('post.txt', 'a') place.write(place_id) place.write(" \n") place.close() """Проверка создания новой локации""" get_resourse = "/maps/api/place/get/json" fw = open('post.txt', 'r') text = fw.read() fw.close() print(text) get_url = base_url + get_resourse + key + "&place_id=" + text print(get_url) result_get = requests.get(get_url) print(result_get.text) print("Статус-код : " + str(result_get.status_code)) assert 200 == result_get.status_code if result_get.status_code == 200: print("Успешно!!! Проверка создания новой локации прошла успешно") else: print("Провал!!! Запрос ошибочный") test = Test_new_location() test.test_create_new_location()
Офлайн
Mishaa.90Метод POST нельзя отправить. Можно что-то отправить методом POST или методом GET, какие-то данные.
Всем привет, подскажите, как можно сделать следующее:
1. Отправить метод POST
Mishaa.90Видимо, методом POST надо переслать серверной части инструкцию, которая заставляет серверную часть создать текстовый файл у себя в хранилище и поместить в этот текстовый файл данные, переданные клиентом в параметрах инструкции.
2. Создать текстовый файл в котором хранить 5 шт place_id полученных из 1 пункта
Отредактировано py.user.next (Март 13, 2023 01:00:18)
Офлайн
py.user.nextда, это и есть задание, я его просто скопировал по пунктам). Вот и я не могу до конца разобраться. Тестируем API, отправляя методы get, post, put, delete. Надо создать новую локацию, путем отправки метода post, и при создании возникает place_id у новой локации, который каждый раз разный. Вот надо 5 раз отправить запрос post? чтобы создать 5 различных place_id (циклом, как я понял), и записать их построчно в текстовый файл. Затем, как создан файл с 5 различными place_id, отправляем метод get к созданным локациям, используя place_id из текстового файла. Затем отправляем метод delete для удаления 2х place id из файла. Как-то так наверно
Офлайн
Mishaa.90Значит, писал его какой-то дурак, как минимум. Но я думаю, что это с английского перевод, сделанный через дебильный переводчик, построенный на какой-нибудь дебильной нейросети очередной.
да, это и есть задание, я его просто скопировал по пунктам)
Mishaa.90Ну, вот код ты выложил, он ничем не лучше, чем это задание.
Вот и я не могу до конца разобраться.
Mishaa.90А ты знаешь, что такое API? API чего ты тестируешь? Ты знаешь, что API он всегда у чего-то, а не просто сам по себе?
Тестируем API
Mishaa.90Ты не можешь отправлять методы. Можно отправлять данные каким-то методом. Методом POST отправить такие-то данные. Или методом PUT отправить такие-то данные.
отправляя методы get, post, put, delete
Mishaa.90POST-запрос можно отправить один раз, в этот POST-запрос можно вставить пять кусков данных.
Вот надо 5 раз отправить запрос post?
Mishaa.90Поэтому я тебе сначала предлагаю разобраться самому, куда ты там влез, в учёбу или в работу, о чём там вообще речь идёт, а потом приходить на форумы и отвлекать людей.
Как-то так наверно
Отредактировано py.user.next (Март 14, 2023 05:37:44)
Офлайн
Что такое API знаю, не надо тут изображать из себя самого умного. Есть чем помочь -подскажи, нет - лучше не пиши
Офлайн
Просто за тебя тут делать это всё, а потом тебе ещё объяснять это всё, потому что ты ноль, какой смысл? Иди и задавай вопросы тому дураку - автору задания. Мы тут при чём?
Офлайн
import asyncio import time import aiohttp import aiofiles base_url = r"https://rahulshettyacademy.com" key = r"?key=qaclick123" post_resourse = "/maps/api/place/add/json" get_resourse = "/maps/api/place/get/json" del_resourse = '/maps/api/place/delete/json' async def get_place_id(session): print('post') json_for_create_new_location = { "location": { "lat": -38.383494, "lng": 33.427362 }, "accuracy": 50, "name": "Frontline house", "phone_number": "(+91) 983 893 3937", "address": "29, side layout, cohen 09", "types": [ "shoe park", "shop" ], "website": "http://google.com", "language": "French-IN" } url = base_url + post_resourse + key async with session.post(url, json=json_for_create_new_location) as response: if response.ok: data = await response.json() if data['status'] == "OK": return data async def validate_place_id(session, place_id): print('get') url = base_url + get_resourse + key + "&place_id=" + place_id async with session.get(url) as response: if response.ok: return place_id async def delete_place_id(session, place_id): print('del') json = {'place_id': place_id} url = base_url + del_resourse + key async with session.delete(url, json=json) as response: if response.ok: data = await response.json() return data async def main(): async with aiohttp.ClientSession() as session: post_tasks = [get_place_id(session) for i in range(5)] async with aiofiles.open('place_id.txt', 'w') as f: for cor in asyncio.as_completed(post_tasks): data = await cor if data: await f.write(f"{data['place_id']}\n") print('write') else: print('error') async with aiofiles.open('place_id.txt', 'r') as f: place_id_lst = [place_id.strip() for place_id in await f.readlines()] get_tasks = [ validate_place_id(session, place_id) for place_id in place_id_lst ] get_result = await asyncio.gather(*get_tasks) print(get_result) if all(get_result): print('location create all') del_result = await asyncio.gather(delete_place_id(session, place_id_lst[1]), delete_place_id(session, place_id_lst[3])) print(del_result) async with aiofiles.open('place_id_2.txt', 'w') as wf: get_tasks = [ validate_place_id(session, place_id) for place_id in place_id_lst ] for cor in asyncio.as_completed(get_tasks): data = await cor if data: await wf.write(f"{data}\n") if __name__ == '__main__': s = time.time() asyncio.run(main()) print(f'time {time.time() - s:.2f} s')
Офлайн