如何解决如何在Django测试中的响应对象中检查session.modifed = True?
[django 1.4,python 2.7]
我们有一个自定义会话引擎,用于将会话存储到redis(与db session引擎几乎相同,只是存储在redis中)。
有些公共端点会在每次调用会话中间件时将会话存储到redis会话(session.modified设置为True),这不是我们的意图。
我正在尝试编写单元测试以检查哪些端点确实生成了会话。
# This endpoint would always save session to redis
def test_endpoint(request,**kwargs):
request.session['asdfsaf'] = 1
# Or,request.session.modified = True (Both fine)
return httplib.OK,"good"
尝试1:
response = self.client.post(reverse('test_endpoint',kwargs=self.kwargs),data={...})
print(response.status_code,response.content) # Ok
print('am i modified?',self.client.session.modified) # False
for i in range(10):
redis = get_redis_instance(db=i)
print("redis key",i,redis.keys()) # All return empty redis
此单元测试无法检测到通过django会话中间件保存的会话。 可能是由于每次访问此属性都会创建 新的SessionStore (https://docs.djangoproject.com/en/2.2/topics/testing/tools/#persistent-state)
尝试2:
从SessionMiddlewareTests中汲取灵感:
request = RequestFactory().post(reverse('test_endpoint',data={...})
response = HttpResponse('Session test')
middleware = SessionMiddleware()
middleware.process_request(request)
# Handle the response through the middleware
response = middleware.process_response(request,response)
print('am i modified',request.session.modified) # False
for i in range(10):
redis = get_redis_instance(db=i)
print("redis key",redis.keys()) # All return empty redis
同样,我无法检测到该端点实际上是在存储要重新分发的会话。
如何以编程方式检查API是否创建了会话? (以某种方式通过设置session.modified标志True来创建它)?
我要做的最后一件事是手动测试并亲自检查redis db。 (超过200个公共端点,并且无法防止将来发生类似问题。)
非常感谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。