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

问题描述 投票:3回答:1

我正在使用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 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"

尽管我在固定装置中传递事件和上下文,但仍指event[sort]内部的lambda_handler

python pytest fixtures pytest-mock
1个回答
1
投票

您已经正确定义了灯具,但是使用它们是错误的。要解决此问题,请向test_lambda_handler方法中添加名称完全与固定装置相同的参数。运行测试时,pytest将分析每个自变量,并在可以找到具有该名称的夹具的情况下插入夹具的返回值。示例:

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 ...
© www.soinside.com 2019 - 2024. All rights reserved.