我正在撰写观点,不太热衷于立即编写模板。
但我需要通过提交帖子请求来测试我的程序。
如何在django视图中模拟HTTP Post
我知道python的urllib2和httplib模块允许很多选项,但我正在寻找优雅地集成到django视图中的东西。
你会创建一个执行post的方法,你会从哪里调用它?
更新:一些答案通过向我的应用程序发送POST来处理测试。如果我想POST到外部服务并处理POST响应,该怎么办?如何在不编写模板的情况下完成。
答案 0 :(得分:11)
Django有一个内置的mock Client utility,它可以模仿请求,就好像它们来自浏览器一样。如果您不需要完全模仿浏览器并且只想直接从测试中调用视图,请考虑使用RequestFactory。
答案 1 :(得分:3)
对于这种情况,我认为RequestFactory非常适合。
它就像django的测试客户端一样,不同之处在于它让你创建一个可以在任何地方使用的请求对象。因此,您可以创建自己的请求对象,并将其传递给您的视图或表单进行测试。
我更喜欢这种测试方法,然后使用测试客户端,因为它接近pure
单元测试。也就是说,测试一段代码。如果您正在使用测试客户端,则在您测试的实际代码到达之前会添加更多层。
答案 2 :(得分:2)
为避免自己创建请求对象的痛苦,您可以在Django snippets
上使用此提示答案 3 :(得分:1)
听起来您正在寻找单元测试或验收测试。看看作为标准库的一部分的unittest。
为了在开发网络应用程序时进行快速临时测试,我喜欢使用curl。它是一个简单的命令行工具,可以轻松生成各种HTTP请求。您可以使用以下命令进行POST:
curl -i -d field=value http://localhost:8080/sample/something
Curl可以在很多平台上使用。请查看http://curl.haxx.se/
答案 4 :(得分:1)
如果从编写单元测试的上下文中看到这一点,可以考虑自己创建Request对象并直接调用view函数。你甚至可以模拟它,以及视图可能采取的任何其他参数。