问题:
所以我的问题是我有一个 Flask 微服务想要对其实施单元测试,所以当我开始编写我的测试用例时,我发现我需要对单元测试客户端进行身份验证,因为某些端点需要授权,而整个身份验证的问题就出现了系统在另一个服务中该服务可以做的关于身份验证的所有工作是验证 JWT 令牌并从中获取用户 ID,所以这里是其中之一 views.py
from flask_restful import Resource
from common.decorators import authorize
class PointsView(Resource):
decorators = [authorize]
def get(self, user):
result = {"points": user.active_points}
return result
并授权装饰者来自 decorators.py
import flask
import jwt
from jwt.exceptions import DecodeError, InvalidSignatureError
from functools import wraps
from flask import request
from flask import current_app as app
from app import db
from common.models import User
from common.utils import generate_error_response
def authorize(f):
"""This decorator for validate the logged in user """
@wraps(f)
def decorated_function(*args, **kwargs):
if 'Authorization' not in request.headers:
return "Unable to log in with provided credentials.", 403
raw_token = request.headers.get('Authorization')
if raw_token[0:3] != 'JWT':
return generate_error_response("Unable to log in with provided credentials.", 403)
token = str.replace(str(raw_token), 'JWT ', '')
try:
data = jwt_decode_handler(token)
except (DecodeError, InvalidSignatureError):
return generate_error_response("Unable to log in with provided credentials.", 403)
user = User.query.filter_by(id=int(data['user_id'])).first()
return f(user, *args, **kwargs)
return decorated_function
和测试用例来自 tests.py
import unittest
from app import create_app, db
from common.models import User
class TestMixin(object):
"""
Methods to help all or most Test Cases
"""
def __init__(self):
self.user = None
我的身份验证系统的工作方式如下:
任何服务(包括这个)请求用户服务来获取用户 JWT 令牌
任何服务都将 JWT 令牌解码并从中获取用户 ID
通过他的ID从数据库中获取用户对象
所以我不知道如何在测试用例中进行身份验证。
茅侃侃
侃侃尔雅
相关分类