2014-03-24 2 views
1

Я смущен относительно того, как передавать куки-файлы в запросе с помощью веб-сайта python.Мои файлы cookie не передаются при использовании webtest.TestApp

У меня есть следующий тест:

def test_commenting_and_voting(self): 
    https = {'wsgi.url_scheme': 'https'} 
    users = [] 
    for user in USERS: 
     resp_post = self.testapp.post_json('/user', user) 
     users.append(resp_post.json.get('id')) 

    self.testapp.post_json('/login/%s' % users[0], 
          {'password' : USERS[0]['password']}, 
          extra_environ=https) 
    print "testapp's view of the cookiejar" 
    print self.testapp.cookies 
    print "END" 
    resp_post = self.testapp.post_json('/comment', {'value': ""}) 

и следующий обработчик:

class CommentHandler(webapp2.RequestHandler): 

    def get(self, id=None): 
     get_from_urlsafe(self, id) 

    @ndb.transactional 
    def post(self, id=None): 
     assert False, self.request.cookies 

Я поднимаю ошибку из функции обработчика, чтобы увидеть печенье. Похоже, что файлы cookie, хотя и в cookiejar в пределах webtest.TestApp сторон, не передаются при выполнении запроса wsgi. Итак, как мне получить файлы cookie для передачи?

Using scent: 
test_commenting_and_voting (test_models.test_Models) ... 
testapp's view of the cookiejar 
{'secret': '58bd5cfd36e6f805de645e00f8bea9d70ae5398ff0606b7fde829e6732394bb7', 'session': 'agx0ZXN0YmVkLXRlc3RyIgsSD1VzZXJFbnRpdHlHcm91cBgBDAsSB1Nlc3Npb24YCww'} 
END 
WARNING:root:suspended generator transaction(context.py:941) raised AssertionError(<RequestCookies (dict-like) with values {}>) 
ERROR:root:<RequestCookies (dict-like) with values {}> 
Traceback (most recent call last): 
    File "/home/stephen/bin/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1535, in __call__ 
    rv = self.handle_exception(request, response, e) 
    ... I removed some of the stacktrace here .... 
    File "/home/stephen/work/seocomments/src/python/main.py", line 127, in post 
    assert False, self.request.cookies 
AssertionError: <RequestCookies (dict-like) with values {}> 
---------------------------------------------------------------------- 
Ran 6 tests in 0.371s 

FAILED (errors=1) 
Failed - Back to work! 

ответ

3

Nevermind. Причина, по которой я не видел файлы cookie, заключалась в том, что файлы cookie устанавливались в качестве защищенных куки-файлов, что означает, что они существуют только при использовании безопасного соединения. В моем тесте использовалось небезопасное соединение.

Чтобы сделать эту работу, изменить запрос на следующее:

self.testapp.post_json('/comment', 
         {'value': ""}, 
         extra_environ={'wsgi.url_scheme': 'https'}) 
+2

Вы можете передать extra_environ в TestApp при ее создании, так что вам не придется делать это при каждом запросе. – Greg

+0

Спасибо, что добавили свой собственный ответ, Стивен. У меня была такая же проблема и точное решение. Мне понадобилось бы много времени, чтобы понять это. – Jonas

 Смежные вопросы

  • Нет связанных вопросов^_^