加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 测试Flask登录和身份验证?

发布时间:2020-12-16 23:18:28 所属栏目:Python 来源:网络整理
导读:我正在开发一个Flask应用程序,并使用Flask-security进行用户身份验证(其又使用Flask-login在下面). 我有一个需要身份验证的路由,/ user.我正在尝试编写一个单元测试,测试一下,对于经过身份验证的用户,这将返回相应的响应. 在我的单元测试中,我正在创建一个用
我正在开发一个Flask应用程序,并使用Flask-security进行用户身份验证(其又使用Flask-login在下面).

我有一个需要身份验证的路由,/ user.我正在尝试编写一个单元测试,测试一下,对于经过身份验证的用户,这将返回相应的响应.

在我的单元测试中,我正在创建一个用户,并以该用户身份登录:

from unittest import TestCase
from app import app,db
from models import User
from flask_security.utils import login_user

class UserTest(TestCase):
   def setUp(self):
       self.app = app
       self.client = self.app.test_client()
       self._ctx = self.app.test_request_context()
       self._ctx.push()

       db.create_all()

   def tearDown(self):
       if self._ctx is not None:
           self._ctx.pop()

       db.session.remove()
       db.drop_all()

   def test_user_authentication():
       # (the test case is within a test request context)
       user = User(active=True)
       db.session.add(user)
       db.session.commit()
       login_user(user)

       # current_user here is the user
       print(current_user)

       # current_user within this request is an anonymous user
       r = test_client.get('/user')

在测试中,current_user返回正确的用户.但是,请求的视图总是返回一个AnonymousUser作为current_user.

/用户路由定义为:

class CurrentUser(Resource):
    def get(self):
        return current_user  # returns an AnonymousUser

我相当确定我只是不完全了解如何测试Flask请求上下文.我读过这个Flask Request Context documentation一堆,但是我仍然不了解如何处理这个特定的单元测试.

解决方法

问题是test_client.get()调用会导致一个新的请求上下文被推送,所以你在你的测试用例的setUp()方法中推送的内容不是/ user handler看到的.

我认为在文档的Logging In and Out和Test Adding Messages部分显示的方法是测试登录的最佳方法.这个想法是通过应用程序发送登录请求,就像普通客户端一样.这将在测试客户端的用户会话中注意登录的用户.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读