Python 如何在aws lambda中模拟jwt.decode进行单元测试
我已经创建了一个lambda,它将在lambda的事件头中接收JWT,然后解码JWT负载,并给出主题。 lambda代码段如下所示:Python 如何在aws lambda中模拟jwt.decode进行单元测试,python,jwt,Python,Jwt,我已经创建了一个lambda,它将在lambda的事件头中接收JWT,然后解码JWT负载,并给出主题。 lambda代码段如下所示: def handler(event, context): print("hello world!") # print(event) message = dict() jwt_token = event['headers']['x-jwt-token'] # more info on PyJWT
def handler(event, context):
print("hello world!")
# print(event)
message = dict()
jwt_token = event['headers']['x-jwt-token']
# more info on PyJWT
# https://pyjwt.readthedocs.io/en/latest/index.html
try:
decoded_jwt = jwt.decode(jwt_token,
options={"verify_signature": False})
except jwt.ExpiredSignatureError:
print("Signature expired. Get new one!!!")
message['Body'] = {
'Status': 'Lambda failure',
'Reason': 'JWT Signature expired. Get new one!!!'
}
except jwt.InvalidTokenError:
print("Invalid Token")
message['Body'] = {
'Status': 'Lambda failure',
'Reason': 'JWT Invalid Token'
}
else:
# all are good to go
if event['httpMethod'] == 'GET':
resource_owner_name = "".join(decoded_jwt["subject"])
现在,我已经为我的单元测试创建了以下装置:
sample_events.json
{
"resource": "/path",
"path": "/path'",
"httpMethod": "GET",
"headers": {
"x-jwt-token": "welcome.here.1234"
}
}
在mytest\u main.py中
def load_json_from_file(json_path):
with open(json_path) as f:
return json.load(f)
@pytest.fixture
def events():
return load_json_from_file('unit_tests/fixtures/sample_events.json')
def test_main(events, context):
# jwt = Mock()
# jwt.decode.return_value =
response = handler(events, context)
现在我想知道如何绑定jwt并在我的python处理程序中模拟它?解决方案是什么?我还有其他方法可以遵循吗
我还尝试修补Jwt.decode仍然不走运…任何人都可以了解修补Jwt解码的方法,这可能会有所帮助?您可以使用它修补给定的目标:
def test_main(events, context):
with patch("handler.jwt.decode") as decode_mock:
decode_mock.return_value =
response = handler(events, context)
只需确保您将正确的路径发送到修补程序目标。它正在工作……我不知道我做了什么,它现在不工作了。谢谢