在Python中模拟Google App Engine文件上传

时间:2011-08-09 03:08:55

标签: python unit-testing google-app-engine file-upload

我在Python中有一个Google App Engine应用程序,可让用户上传文件。提交文件后,我使用

获取文件
self.request.get('uploaded_file')

我使用

获取文件名
self.request.POST['uploaded_file'].filename 

我正在尝试通过手动创建一个webapp请求来编写单元测试,文件设置我想要它。但是,我无法弄清楚如何初始化它,以便我可以获取上传的文件及其文件名。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

如果你正在测试你的处理程序,你可能已经创建了一个Webob请求对象并将其传递给你的处理程序,如下所示:

request = webapp.Request({
    "wsgi.input": StringIO.StringIO(),
    "METHOD": "POST",
})
response = webapp.Response()
handler = MyHandler()
handler.initialize(request, response)
handler.post()

上传的文件是cgi.FieldStorage个对象,但FieldStorage并不是特别容易测试。相反,最简单的方法是使用模拟框架(如mox)来创建模拟,或者只创建一个简单的假冒:

class FakeFieldStorage(object):
  def __init__(self, filename, value):
    self.filename = filename
    self.value = value

然后创建一个并将其添加到请求对象,然后再将其传递给处理程序:

uploaded_file = FakeFieldStorage("test.txt", "foo")
request.POST['file'] = uploaded_file

答案 1 :(得分:1)

使用urlopen或类似内容,让测试实际发送带有附加到您应用的文件的请求来测试它。

然后验证上传后的响应和状态。