【AWS】Cloud9上でITテスト

1. 使用するサービス

(AWS)

  • Cloud9

2. 使用する言語

3.概要

まず、ここで言う結合テストの目的としては、Cloud9上の関数をAWSのサービス、Lambdaとしてデプロイした後の疎通確認として位置付けます。テストの内容も単体テストと同じです。違いとしては仮想的なLambdaか実際にデプロイしたLambdaに対してテストをするかになります。
実装面に関しては違いのある箇所のみ記載します。
後は前回参照です。
buffalokusojima.hatenablog.com


4. 実装

import unittest
import json
import csv
import logging
import os

import boto3
lambda_client = boto3.client('lambda')

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def readTestData(csvFile):
    
    test_list = []

    with open(csvFile, encoding="UTF-8") as f:
        for line in csv.DictReader(f):
            del line["備考"]
            test_list.append(line)

    return test_line

class TestHandlerClass(unittest.TestCase):

    def test_response(self):
        logger.info("Hello Lambda Test")
        test_file_path = "../Data/hello.csv"
        test_file_path = os.path.join(os.path.dirname(__file__), test_file_path)
        test_list = readTestData(test_file_path)
        logger.info(test_list)
        for test in test_list:
            result = lambda_client.invoke(FunctionName=Project+"-"+Stage+"-HelloWorldFunction")
            self.assertEqual(result['statusCode'], 200)
            result = result['Payload'].read()
            result = json.loads(result)
            self.assertEqual(result['statusCode'], 200)
            self.assertEqual(json.loads(result['body']), test)
            self.assertEqual(result['headers'], {"Content-type": "application/json"})

if __name__ == '__mian__':
    unittest.main()

5. おわりに

これでデプロイ後のLambdaに対してテストが自動で行えます。
主に、単体テストでロジックの確認で、結合テストではRoleやタイムアウト時間などの確認になります。