5

我正在使用 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]inside lambda_handler

4

1 回答 1

4

您已经正确定义了固定装置,但错误地使用了它们。要解决此问题,请将参数添加到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 ...
于 2020-02-01T11:36:31.387 回答