Best Python code snippet using localstack_python
test_lambda.py
Source:test_lambda.py
...40TEST_LAMBDA_JAR_URL = ('{url}/cloud/localstack/{name}/{version}/{name}-{version}-tests.jar').format(41 version=LOCALSTACK_MAVEN_VERSION, url=MAVEN_BASE_URL, name='localstack-utils')42TEST_LAMBDA_LIBS = ['localstack', 'localstack_client', 'requests', 'psutil', 'urllib3', 'chardet', 'certifi', 'idna']43class LambdaTestBase(unittest.TestCase):44 def check_lambda_logs(self, func_name, expected_lines=[]):45 logs_client = aws_stack.connect_to_service('logs')46 log_group_name = '/aws/lambda/%s' % func_name47 streams = logs_client.describe_log_streams(logGroupName=log_group_name)['logStreams']48 streams = sorted(streams, key=lambda x: x['creationTime'], reverse=True)49 log_events = logs_client.get_log_events(50 logGroupName=log_group_name, logStreamName=streams[0]['logStreamName'])['events']51 log_messages = [e['message'] for e in log_events]52 for line in expected_lines:53 if '.*' in line:54 found = [re.match(line, m) for m in log_messages]55 if any(found):56 continue57 self.assertIn(line, log_messages)58class TestPythonRuntimes(LambdaTestBase):59 @classmethod60 def setUpClass(cls):61 cls.lambda_client = aws_stack.connect_to_service('lambda')62 cls.s3_client = aws_stack.connect_to_service('s3')63 zip_file = testutil.create_lambda_archive(64 load_file(TEST_LAMBDA_PYTHON),65 get_content=True,66 libs=TEST_LAMBDA_LIBS,67 runtime=LAMBDA_RUNTIME_PYTHON2768 )69 testutil.create_lambda_function(70 func_name=TEST_LAMBDA_NAME_PY,71 zip_file=zip_file,72 runtime=LAMBDA_RUNTIME_PYTHON2773 )74 @classmethod75 def tearDownClass(cls):76 cls.lambda_client.delete_function(FunctionName=TEST_LAMBDA_NAME_PY)77 def test_invocation_type_not_set(self):78 result = self.lambda_client.invoke(79 FunctionName=TEST_LAMBDA_NAME_PY, Payload=b'{}')80 result_data = json.loads(result['Payload'].read())81 self.assertEqual(result['StatusCode'], 200)82 self.assertEqual(result_data['event'], json.loads('{}'))83 def test_invocation_type_request_response(self):84 result = self.lambda_client.invoke(85 FunctionName=TEST_LAMBDA_NAME_PY,86 Payload=b'{}', InvocationType='RequestResponse')87 result_data = result['Payload'].read()88 result_data = json.loads(to_str(result_data))89 self.assertEqual(result['StatusCode'], 200)90 self.assertIsInstance(result_data, dict)91 def test_invocation_type_event(self):92 result = self.lambda_client.invoke(93 FunctionName=TEST_LAMBDA_NAME_PY,94 Payload=b'{}', InvocationType='Event')95 self.assertEqual(result['StatusCode'], 202)96 def test_invocation_type_dry_run(self):97 result = self.lambda_client.invoke(98 FunctionName=TEST_LAMBDA_NAME_PY, Payload=b'{}',99 InvocationType='DryRun')100 self.assertEqual(result['StatusCode'], 204)101 def test_lambda_environment(self):102 zip_file = testutil.create_lambda_archive(103 load_file(TEST_LAMBDA_ENV),104 get_content=True,105 libs=TEST_LAMBDA_LIBS,106 runtime=LAMBDA_RUNTIME_PYTHON27107 )108 testutil.create_lambda_function(109 func_name=TEST_LAMBDA_NAME_ENV,110 zip_file=zip_file,111 runtime=LAMBDA_RUNTIME_PYTHON27,112 envvars={'Hello': 'World'}113 )114 result = self.lambda_client.invoke(115 FunctionName=TEST_LAMBDA_NAME_ENV, Payload=b'{}')116 result_data = result['Payload']117 self.assertEqual(result['StatusCode'], 200)118 self.assertDictEqual(json.load(result_data), {'Hello': 'World'})119 def test_invocation_with_qualifier(self):120 lambda_name = 'test_lambda_%s' % short_uid()121 bucket_name = 'test_bucket_lambda2'122 bucket_key = 'test_lambda.zip'123 # upload zip file to S3124 zip_file = testutil.create_lambda_archive(125 load_file(TEST_LAMBDA_PYTHON),126 get_content=True,127 libs=TEST_LAMBDA_LIBS,128 runtime=LAMBDA_RUNTIME_PYTHON27129 )130 self.s3_client.create_bucket(Bucket=bucket_name)131 self.s3_client.upload_fileobj(132 BytesIO(zip_file), bucket_name, bucket_key)133 # create lambda function134 response = self.lambda_client.create_function(135 FunctionName=lambda_name, Handler='handler.handler',136 Runtime=lambda_api.LAMBDA_RUNTIME_PYTHON27, Role='r1',137 Code={138 'S3Bucket': bucket_name,139 'S3Key': bucket_key140 },141 Publish=True142 )143 self.assertIn('Version', response)144 # invoke lambda function145 data_before = b'{"foo": "bar"}'146 result = self.lambda_client.invoke(147 FunctionName=lambda_name,148 Payload=data_before,149 Qualifier=response['Version']150 )151 data_after = json.loads(result['Payload'].read())152 self.assertEqual(json.loads(to_str(data_before)), data_after['event'])153 context = data_after['context']154 self.assertEqual(response['Version'], context['function_version'])155 self.assertEqual(lambda_name, context['function_name'])156 # assert that logs are present157 expected = ['Lambda log message - print function']158 if use_docker():159 # Note that during regular test execution, nosetests captures the output from160 # the logging module - hence we can only expect this when running in Docker161 expected.append('.*Lambda log message - logging module')162 self.check_lambda_logs(lambda_name, expected_lines=expected)163 def test_upload_lambda_from_s3(self):164 lambda_name = 'test_lambda_%s' % short_uid()165 bucket_name = 'test_bucket_lambda'166 bucket_key = 'test_lambda.zip'167 # upload zip file to S3168 zip_file = testutil.create_lambda_archive(169 load_file(TEST_LAMBDA_PYTHON),170 get_content=True,171 libs=TEST_LAMBDA_LIBS,172 runtime=LAMBDA_RUNTIME_PYTHON27173 )174 self.s3_client.create_bucket(Bucket=bucket_name)175 self.s3_client.upload_fileobj(176 BytesIO(zip_file), bucket_name, bucket_key)177 # create lambda function178 self.lambda_client.create_function(179 FunctionName=lambda_name, Handler='handler.handler',180 Runtime=lambda_api.LAMBDA_RUNTIME_PYTHON27, Role='r1',181 Code={182 'S3Bucket': bucket_name,183 'S3Key': bucket_key184 }185 )186 # invoke lambda function187 data_before = b'{"foo": "bar"}'188 result = self.lambda_client.invoke(189 FunctionName=lambda_name, Payload=data_before)190 data_after = json.loads(result['Payload'].read())191 self.assertEqual(json.loads(to_str(data_before)), data_after['event'])192 context = data_after['context']193 self.assertEqual('$LATEST', context['function_version'])194 self.assertEqual(lambda_name, context['function_name'])195 def test_python_lambda_running_in_docker(self):196 if not use_docker():197 return198 zip_file = testutil.create_lambda_archive(199 load_file(TEST_LAMBDA_PYTHON3),200 get_content=True,201 libs=TEST_LAMBDA_LIBS,202 runtime=LAMBDA_RUNTIME_PYTHON36203 )204 testutil.create_lambda_function(205 func_name=TEST_LAMBDA_NAME_PY3,206 zip_file=zip_file,207 runtime=LAMBDA_RUNTIME_PYTHON36208 )209 result = self.lambda_client.invoke(210 FunctionName=TEST_LAMBDA_NAME_PY3, Payload=b'{}')211 result_data = result['Payload'].read()212 self.assertEqual(result['StatusCode'], 200)213 self.assertEqual(to_str(result_data).strip(), '{}')214class TestNodeJSRuntimes(LambdaTestBase):215 @classmethod216 def setUpClass(cls):217 cls.lambda_client = aws_stack.connect_to_service('lambda')218 def test_nodejs_lambda_running_in_docker(self):219 if not use_docker():220 return221 zip_file = testutil.create_zip_file(222 TEST_LAMBDA_NODEJS, get_content=True)223 testutil.create_lambda_function(224 func_name=TEST_LAMBDA_NAME_JS,225 zip_file=zip_file,226 handler='lambda_integration.handler',227 runtime=LAMBDA_RUNTIME_NODEJS228 )229 result = self.lambda_client.invoke(230 FunctionName=TEST_LAMBDA_NAME_JS, Payload=b'{}')231 result_data = result['Payload'].read()232 self.assertEqual(result['StatusCode'], 200)233 self.assertEqual(to_str(result_data).strip(), '{}')234 # assert that logs are present235 expected = ['.*Node.js Lambda handler executing.']236 self.check_lambda_logs(TEST_LAMBDA_NAME_JS, expected_lines=expected)237class TestCustomRuntimes(LambdaTestBase):238 @classmethod239 def setUpClass(cls):240 cls.lambda_client = aws_stack.connect_to_service('lambda')241 def test_nodejs_lambda_running_in_docker(self):242 if not use_docker():243 return244 zip_file = testutil.create_zip_file(245 TEST_LAMBDA_CUSTOM_RUNTIME, get_content=True)246 testutil.create_lambda_function(247 func_name=TEST_LAMBDA_NAME_CUSTOM_RUNTIME,248 zip_file=zip_file,249 handler='function.handler',250 runtime=LAMBDA_RUNTIME_CUSTOM_RUNTIME251 )252 result = self.lambda_client.invoke(253 FunctionName=TEST_LAMBDA_NAME_CUSTOM_RUNTIME,254 Payload=b'{"text":"Hello"}')255 result_data = result['Payload'].read()256 self.assertEqual(result['StatusCode'], 200)257 self.assertEqual(258 to_str(result_data).strip(),259 """Echoing request: '{"text": "Hello"}'""")260 # assert that logs are present261 expected = ['.*Custom Runtime Lambda handler executing.']262 self.check_lambda_logs(263 TEST_LAMBDA_NAME_CUSTOM_RUNTIME, expected_lines=expected)264class TestDotNetCoreRuntimes(LambdaTestBase):265 @classmethod266 def setUpClass(cls):267 cls.lambda_client = aws_stack.connect_to_service('lambda')268 # lambda .NET Core 2.0 is already a zip269 zip_file = TEST_LAMBDA_DOTNETCORE2270 cls.zip_file_content = None271 with open(zip_file, 'rb') as file_obj:272 cls.zip_file_content = file_obj.read()273 def test_dotnet_lambda_running_in_docker(self):274 if not use_docker():275 return276 testutil.create_lambda_function(277 func_name=TEST_LAMBDA_NAME_DOTNETCORE2,278 zip_file=self.zip_file_content,279 handler='DotNetCore2::DotNetCore2.Lambda.Function::SimpleFunctionHandler',280 runtime=LAMBDA_RUNTIME_DOTNETCORE2281 )282 result = self.lambda_client.invoke(283 FunctionName=TEST_LAMBDA_NAME_DOTNETCORE2, Payload=b'{}')284 result_data = result['Payload'].read()285 self.assertEqual(result['StatusCode'], 200)286 self.assertEqual(to_str(result_data).strip(), '{}')287 # assert that logs are present288 expected = ['Running .NET Core 2.0 Lambda']289 self.check_lambda_logs(TEST_LAMBDA_NAME_DOTNETCORE2, expected_lines=expected)290class TestRubyRuntimes(LambdaTestBase):291 @classmethod292 def setUpClass(cls):293 cls.lambda_client = aws_stack.connect_to_service('lambda')294 def test_ruby_lambda_running_in_docker(self):295 if not use_docker():296 return297 zip_file = testutil.create_zip_file(298 TEST_LAMBDA_RUBY, get_content=True)299 testutil.create_lambda_function(300 func_name=TEST_LAMBDA_NAME_RUBY,301 zip_file=zip_file,302 handler='lambda_integration.handler',303 runtime=LAMBDA_RUNTIME_RUBY25...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!