Python AWS Lambda 단위 테스트

단위 테스트 컴퓨팅 AWS Lambda



이벤트에서 두 값을 검색하고 합계를 반환하는 람다 처리기를 고려하십시오. (다른 AWS 서비스와 상호 작용하지 않음).

index.py




def lambda_handler(event, context):
    result = int(event['first_number']) + int(event['second_number'])  
    return { 
        'sum' : result
    }


다음은 Python "unittest"를 사용한 단위 테스트 옵션 중 하나입니다.

test_index.py




import unittest
import index
class TestSumOfTwoNumbers(unittest.TestCase):
    def test_sum(self):
        input = {
            "first_number": "1",
            "second_number": "2"
        }
        output = index.lambda_handler(input,{})
        self.assertEqual(3, output['sum'])


다른 AWS 서비스/API와 상호 작용하는 단위 테스트 AWS Lambda



람다 함수 메타데이터를 가져오는 AWS 서비스 API(boto3 람다 클라이언트의 get_function())를 호출하는 핸들러 코드는 아래에 나와 있습니다.

index.py




import boto3

def lambda_handler(event, context):
    lambda_client = boto3.client('lambda')
    response = lambda_client.get_function(
        FunctionName='for-blog'
    )
    return response


test_index.py



아래 코드는 Stubber를 사용하여 단위 테스트 boto3 호출을 수행한 방법을 보여줍니다. (간단한 설명은 인라인 주석을 통해 이동)

import boto3
from botocore.stub import Stubber
import index # source file
import unittest
from unittest.mock import patch

class TestLambdaMetadata(unittest.TestCase):
    def tests_Metadata_for_lambda_function(self):
        client = boto3.client('lambda')
        stubber = Stubber(client) # stubbed lambda client

        # expected response from boto3 lambda client's get_function call 
        expected_response = {u"Configuration": {"FunctionName": "for-blog", "Runtime": "python3.8"}}

        # stubbed lambda client (with specific parameter) call to get_function results in expected_response. 
        stubber.add_response('get_function', expected_response, {'FunctionName': 'for-blog'})

        # patching boto3 attribute of index.py with stubber
        with patch('index.boto3') as mock_boto3:
            with stubber:
                mock_boto3.client.return_value = client

                # call to lambda_handler in index.py 
                lambda_response = index.lambda_handler({}, 'context')
                self.assertEqual(lambda_response, expected_response)


Gerd Altmann에서 Pixabay의 이미지

좋은 웹페이지 즐겨찾기