46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
import os
|
|
|
|
import boto3
|
|
import pytest
|
|
import requests
|
|
|
|
"""
|
|
Make sure env variable AWS_SAM_STACK_NAME exists with the name of the stack we are going to test.
|
|
"""
|
|
|
|
|
|
class TestApiGateway:
|
|
|
|
@pytest.fixture()
|
|
def api_gateway_url(self):
|
|
""" Get the API Gateway URL from Cloudformation Stack outputs """
|
|
stack_name = os.environ.get("AWS_SAM_STACK_NAME")
|
|
|
|
if stack_name is None:
|
|
raise ValueError('Please set the AWS_SAM_STACK_NAME environment variable to the name of your stack')
|
|
|
|
client = boto3.client("cloudformation")
|
|
|
|
try:
|
|
response = client.describe_stacks(StackName=stack_name)
|
|
except Exception as e:
|
|
raise Exception(
|
|
f"Cannot find stack {stack_name} \n" f'Please make sure a stack with the name "{stack_name}" exists'
|
|
) from e
|
|
|
|
stacks = response["Stacks"]
|
|
stack_outputs = stacks[0]["Outputs"]
|
|
api_outputs = [output for output in stack_outputs if output["OutputKey"] == "HelloWorldApi"]
|
|
|
|
if not api_outputs:
|
|
raise KeyError(f"HelloWorldAPI not found in stack {stack_name}")
|
|
|
|
return api_outputs[0]["OutputValue"] # Extract url from stack outputs
|
|
|
|
def test_api_gateway(self, api_gateway_url):
|
|
""" Call the API Gateway endpoint and check the response """
|
|
response = requests.get(api_gateway_url)
|
|
|
|
assert response.status_code == 200
|
|
assert response.json() == {"message": "hello world"}
|