playwright
Это также можно сделать Тестирование интерфейсаиз,Но я лично так не думаюrequests
Сильная библиотека,Но иselenium
В сравнении,Немного лучше,Ведь поддерживается вход через API,Другими словами, операции интерфейса можно вызывать напрямую, без взаимодействия.
Поскольку это тест API, то определенно не стоит заниматься автоматизацией пользовательского интерфейса или взаимодействием с браузером. Это называется тестированием API. Это чистая ерунда.
Это не похоже на некоторых блоггеров, которые ленивы и напрямую публикуют официальные примеры. Должен ли я использовать вас, чтобы скопировать их снова для меня?
Далее объясните, как использовать драматург для тестирования API?
Пример кода выглядит следующим образом:
playwright.request.new_context()
Правильно, после создания экземпляра остается лишь настроить API. Посмотрите, на самом деле это не так уж и сложно, верно?
Здесь я использую часть интерфейса системы управления студентами, которую я написал, чтобы продемонстрировать и объяснить некоторые часто используемые API. Все примеры кода написаны синхронно.
Примеры следующие:
def testQueryStudent(playwright: Playwright):
"""
Опрос студентов
"""
url = 'http://localhost:8090/studentFindById'
param = {
'id': 105
}
request_context = playwright.request.new_context()
response = request_context.get(url=url, params=param)
assert response.ok
assert response.json()
print('\n', response.json())
Эффект:
Пример кода:
def testAddStudent(playwright: Playwright):
"""
Добавить нового студента
:return:
"""
url = 'http://localhost:8090/studentAdd'
request_body = {
"className": "banji",
"courseName": "wuli",
"email": "ales@qq.com",
"name": "ales",
"score": 70,
"sex": "boy",
"studentId": "92908290"
}
header = {"Content-Type": "application/json"}
request_context = playwright.request.new_context()
response = request_context.post(url=url, headers=header, data=request_body)
assert response.ok
assert response.json()
print('\n', response.json())
Эффект:
Пример кода:
def testUpdateStudents(playwright: Playwright):
"""
Изменить студентов
"""
url = 'http://localhost:8090/studentUpdate/100'
param = {
'studentId': "id" + str(100),
'name': "name" + str(100),
'score': 100,
"sex": "girl",
"className": "class" + str(100),
"courseName": "course" + str(100),
"email": str(100) + "email@qq.com"
}
request_context = playwright.request.new_context()
response = request_context.put(url=url, form=param)
assert response.ok
assert response.json()
print('\n', response.json())
Эффект:
Пример кода:
def testDeleteStudents(playwright: Playwright):
"""
Удалить студентов
"""
url = 'http://localhost:8090/studentDelete/' + str(105)
request_context = playwright.request.new_context()
response = request_context.delete(url=url)
assert response.ok
assert response.json()
print('\n', response.json())
Эффект:
Это частный случай. Согласно официальному методу, у меня действительно не получилось бы, даже если бы я жил или умер. Мне постоянно выдавались подсказки, что загруженный файл не может быть пустым, и я не знал, почему. использовал альтернативу, которая заключалась в имитации захвата пакетов. Только после задействования структуры можно добиться успеха, но это также и неудача.
Пример кода:
def test_upload_file(playwright: Playwright):
'''
Загрузить файлы
:param playwright:
:return:
'''
# Создать контекст запроса
request_context = playwright.request.new_context()
# определение Загрузить файлыизURL
upload_url = "http://localhost:8090/fileUpload"
# путь к файлу
file_path = "d:/demo.txt"
# Получить имя файла и тип MIME
filename = file_path.split('/')[-1]
mime_type, _ = mimetypes.guess_type(file_path)
if not mime_type:
mime_type = 'application/octet-stream'
# Чтение содержимого файла
with open(file_path, 'rb') as file:
file_content = file.read()
# Создайте граничную строку multipart/form-data
boundary = '---------------------' + str(random.randint(1e28, 1e29 - 1))
# Создать тело запроса
body = (
f'--{boundary}\r\n'
f'Content-Disposition: form-data; name="file"; filename="{filename}"\r\n'
f'Content-Type: {mime_type}\r\n\r\n'
f'{file_content.decode("utf-8") if mime_type.startswith("text/") else file_content.hex()}'
f'\r\n--{boundary}--\r\n'
).encode('utf-8')
# Установить заголовок запроса
headers = {
'Content-Type': f'multipart/form-data; boundary={boundary}',
}
# Инициировать POST-запрос
response = request_context.post(upload_url, data=body, headers=headers)
# Проверить ответ
assert response.status == 200, f"Upload failed with status: {response.status}"
assert response.ok
assert response.json()
print('\n', response.json())
Эффект:
Официальное письмо:
# Чтение содержимого файла
with open(file_path, 'rb') as file:
file_content = file.read()
response = request_context.post(upload_url, multipart={
"fileField": {
"name": "demo.txt",
"mimeType": "text/plain",
"buffer": file_content,
}
})
print('\n', response.json())
Эффект:
Официальный метод написания, не знаю, почему он не удался.