Как имитировать запрос HTTP-сообщения из представления django без шаблона
Я пишу виды, не так сильно стремящиеся сразу писать шаблоны.
Но мне нужно проверить свою программу, отправив почтовые запросы.
Как смоделировать HTTP-сообщение из представления django
Я знаю, что модули urllib2 и httplib python позволяют множество опций, но я ищу что-то, что элегантно интегрируется в представления django.
Будет ли U создавать метод, который выполняет post, откуда вы его вызываете?
Обновление. Некоторые ответы касаются тестирования, отправив POST в мое приложение. Что делать, если я хочу использовать POST для внешней службы и работать с ответом POST. Как я могу это сделать без написания шаблонов.
Ответы
Ответ 1
Django имеет встроенную mock Client utility, которая может имитировать запросы, как если бы они поступали из браузера. Если вам не нужно полностью имитировать браузер и просто хотите вызывать ваши взгляды непосредственно из ваших тестов, подумайте об использовании RequestFactory,
Ответ 2
В таких случаях я думаю, RequestFactory идеально подходит.
Он работает точно так же, как клиент-тест django с той разницей, что он позволяет создавать объект запроса, который вы можете использовать в любом месте. Таким образом, вы можете просто создать свой собственный объект запроса и передать его вашему представлению или форме для тестирования.
Мне нравится этот метод тестирования больше, чем при использовании тестового клиента, поскольку он приближается к модульному тестированию pure
. То есть, тестирование одного фрагмента кода. Если вы используете тестовый клиент, добавляется больше уровней до того, как будет достигнут фактический код, который вы тестируете.
Ответ 3
Чтобы избежать боли при создании объекта запроса, вы можете использовать этот совет на фрагменты Django
Ответ 4
Похоже, вы ищете либо unit test, либо приемочный тест. Взгляните на unittest, который является частью стандартной библиотеки.
Для быстрых специальных тестов при разработке веб-приложений мне нравится использовать завиток. Это простой инструмент командной строки, который легко генерирует всевозможные HTTP-запросы. Вы можете использовать POST с помощью команды, например:
curl -i -d field=value http://localhost:8080/sample/something
Curl доступен на многих платформах. Проверьте это на http://curl.haxx.se/
Ответ 5
Если вы смотрите на это из контекста написания unittests, вы можете подумать о создании объекта Request самостоятельно и просто вызвать функцию view напрямую. Вы могли бы даже издеваться над ним и любыми другими параметрами, которые может иметь вид.