Мои файлы cookie не передаются при использовании webtest.TestApp

Я не понимаю, как передавать файлы cookie в запросе с помощью веб-теста Python.

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

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. Похоже, что файлы 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!

person Stephen Cagle    schedule 24.03.2014    source источник


Ответы (1)


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

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

self.testapp.post_json('/comment', 
                       {'value': ""}, 
                       extra_environ={'wsgi.url_scheme': 'https'})
person Stephen Cagle    schedule 24.03.2014
comment
Вы можете передать extra_environ в testapp при его создании, поэтому вам не нужно делать это при каждом запросе. - person Greg; 25.03.2014
comment
Спасибо, что добавили свой собственный ответ, Стивен - у меня была точно такая же проблема и точно такое же решение. Мне потребовалось бы много времени, чтобы понять это. - person Jonas; 31.03.2015