Python 如何在aws lambda中模拟jwt.decode进行单元测试

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

我已经创建了一个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
    # 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"
  }
}
在my
test\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)

只需确保您将正确的路径发送到修补程序目标。

它正在工作……我不知道我做了什么,它现在不工作了。谢谢