Skip to content

Pytest plugin for local AWS integration tests

License

Notifications You must be signed in to change notification settings

mintel/pytest-localstack

Repository files navigation

pytest-localstack

PyPI Travis-CI Codecov

pytest-localstack is a plugin for pytest to create AWS integration tests via a Localstack Docker container.

Read The Docs

Requires:

  • pytest >= 3.3.0
  • Docker

Tested against Python >= 3.6.

Features

  • Create pytest fixtures that start and stop a Localstack container.
  • Temporarily patch botocore to redirect botocore/boto3 API calls to Localstack container.
  • Plugin system to easily extend supports to other AWS client libraries such as aiobotocore.

Example

import boto3
import pytest_localstack

localstack = pytest_localstack.patch_fixture(
    services=["s3"],  # Limit to the AWS services you need.
    scope='module',  # Use the same Localstack container for all tests in this module.
    autouse=True,  # Automatically use this fixture in tests.
)

def test_s3_bucket_creation():
    s3 = boto3.resource('s3')  # Botocore/boto3 will be patched to use Localstack
    assert len(list(s3.buckets.all())) == 0
    bucket = s3.Bucket('foobar')
    bucket.create()
    assert len(list(s3.buckets.all())) == 1

Services

  • apigateway
  • cloudformation
  • cloudwatch
  • dynamodb
  • dynamodbstreams
  • ec2
  • es
  • firehose
  • iam
  • kinesis
  • lambda
  • logs
  • redshift
  • route53
  • s3
  • secretsmanager
  • ses
  • sns
  • sqs
  • ssm
  • stepfunctions
  • sts

Installation

$ pip install pytest-localstack

TODO

  • More detailed docs.
  • Break Docker container running out of LocalstackSession.
  • Make botocore patching more comprehensible.
  • Add common test resource fixture factories i.e. S3 buckets, SQS queues, SNS topics, etc.
  • Test this works for non-localhost Docker containers.
  • Add other client libraries such as aiobotocore.