Имитация загрузки файла из Google App Engine в Python - PullRequest
3 голосов
/ 09 августа 2011

У меня есть приложение Google App Engine на Python, которое позволяет пользователям загружать файлы. После отправки файла я получаю файл с помощью

self.request.get('uploaded_file')

Я получаю имя файла, используя

self.request.POST['uploaded_file'].filename 

Я пытаюсь написать для него модульный тест, вручную создав запрос webapp с файлом, установленным так, как я хочу. Однако я не могу понять, как его инициализировать так, чтобы я мог получить загруженный файл и его имя файла.

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 09 августа 2011

Если вы тестируете свой обработчик, вы, вероятно, уже создаете объект запроса 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 голос
/ 09 августа 2011

Протестируйте его, фактически отправив запрос с файлом, прикрепленным к вашему приложению, используя urlopen или аналогичный.

Затем подтвердите ответ и состояние после загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...