Pytest lambda 处理程序传递事件和上下文

Pytest lambda handler passing event and context

我正在使用 pytest 为我的 lambda 函数编写单元测试。我不知道应该如何将我的事件参数传递给函数调用。我了解到可以使用@pytest.fixture来实现。我对 Python 和 pytest 非常陌生。相信我以错误的方式使用固定装置。请帮帮我!!

下面是我的 lambda 处理程序:

lambda_service.py

def lambda_handler(event, context):   
    logger.info('Event received: ' + json.dumps(event))
    try:
        sort = (event['sort'])
        size = int(event['size'])
        page = int(event['page'])

        list_response = MyService().get_people_list(sort, size, page)
        logger.info(list_response)

    except Exception as e:
        logger.error("Unable to fetch details")
        logger.exception(e)

    return list_response

这是我的测试class-

class TestServiceHandler:
    @pytest.fixture
    def event(self):
        return {
            "sort": "asc",
            "size": 5,
            "page": 0
        }
    @pytest.fixture
    def context(self):
        return None

    def test_lambda_handler(self):
        result = lambda_service.lambda_handler(self.event, self.context)
        assert_valid_schema(result, 'vendor_list.json')

当 运行 这个测试

时,我遇到了以下错误
line 17, in lambda_handler
sort = (event['sort'])\nTypeError: 'method' object is not subscriptable"

虽然我在固定装置中传递事件和上下文,它仍然指的是 lambda_handler 中的 event[sort]

您正确定义了灯具,但使用错误。要修复,请将参数添加到与设备名称完全相同的 test_lambda_handler 方法。当 运行 测试时,pytest 将分析每个参数并插入夹具 return 值(如果它可以找到具有该名称的夹具)。示例:

class TestServiceHandler:
    @pytest.fixture
    def event(self):
        ...
    @pytest.fixture
    def context(self):
        ...

    def test_lambda_handler(self, event, context):
        result = lambda_service.lambda_handler(event, context)
        assert ...