aws testing moto boto3 robot framework

Testing AWS locally using Moto, Boto3 & Robot Framework

How to Test AWS locally using Moto, Boto3 & Robot Framework explores a practical approach to solving one of the toughest testing constraints in cloud automation: how to simulate AWS services locally without using real AWS infrastructure, container technologies, or compromising Robot Framework-based testing workflows. This guide breaks down the tools, architecture, and implementation strategy used to achieve fully local AWS testing under strict limitations.


The Challenge: Strict AWS Testing Constraints

In this scenario, the testing environment is restricted by three non-negotiable rules:

  • ❌ No real AWS infrastructure usage
  • ❌ No Docker or container-based technologies
  • ❌ Tests must be written using Robot Framework

These constraints immediately eliminate most conventional AWS testing strategies. Tools like LocalStack typically rely on Docker, while standard AWS libraries require real cloud access.


Exploring Existing AWS Testing Options

Before arriving at the final solution, several common tools were evaluated and discarded due to constraint violations.

Concept / ToolPurposeWhy It Fails Here
Robot Framework AWS LibraryAutomates AWS testingRequires real AWS infrastructure
Boto3AWS SDK for PythonValid, but alone not sufficient for mocking
LocalStackAWS service emulationRequires Docker (violates constraint #2)
Moto LibraryAWS service mocking✔ Works locally without Docker

The Winning Solution: Moto + Boto3 + Robot Framework

The only tool that fully satisfies all constraints is Moto.

Why Moto Works

The Moto library is a Python-based framework that mocks AWS services locally without requiring Docker or real AWS credentials.

Combined with:

  • Boto3 for AWS service interaction logic
  • Robot Framework for test automation

This forms a fully self-contained AWS testing stack.


Moto Library: Local AWS Mocking Engine

Moto enables simulation of AWS services such as:

  • S3 buckets
  • Lambda functions
  • IAM roles (simplified)

Key Capabilities

  • Fully local AWS simulation
  • No Docker required
  • No cloud dependency
  • Easy integration with Python and Boto3

Installation

Moto is installed via pip and can be configured to mock all or selected services:

pip install moto

Example services commonly mocked:

  • S3
  • Lambda

Custom Python Mock AWS Library (Core Design)

A custom abstraction layer is built on top of Moto + Boto3 to simplify test usage.

Core Responsibilities

The library handles:

  • Starting and stopping mock AWS environments
  • Creating and listing S3 buckets
  • Uploading and listing S3 objects
  • Deploying and invoking Lambda functions
  • Simulating IAM role assignment

This abstraction ensures Robot Framework tests remain clean and business-focused.


Lambda Function Logic (Tested Behavior)

A simple Lambda function is introduced to demonstrate realistic AWS behavior.

Function Purpose

It compares two files stored in S3.

Logic

  • Reads both files
  • Computes hash values
  • Compares hashes

Return Value

  • "equal" → if file contents match
  • "not equal" → if differences exist

This simulates a real-world validation use case in serverless systems.


Robot Framework Testing Workflow

Robot Framework orchestrates the entire test flow using the custom library.


🪣 S3 Bucket Test Workflow

Steps

  1. Import custom mock AWS library
  2. Start Moto mock environment
  3. Create an S3 bucket
  4. List buckets
  5. Validate bucket existence
  6. Stop mock environment

Outcome

  • Confirms S3 bucket creation works fully in local environment
  • No AWS or Docker required

⚡ Lambda Function Test Workflow

Steps

  1. Start mock AWS environment
  2. Create S3 bucket
  3. Upload two identical files
  4. Assign mock IAM role
  5. Deploy Lambda function
  6. Invoke Lambda with test payload
  7. Validate response = "equal"
  8. Stop mock environment

Validation

  • File hashes are computed correctly
  • Lambda logic executes successfully
  • Output confirms equality

Key Observations from Execution Logs

During test runs, logs typically show:

  • Bucket creation confirmation
  • File upload confirmation
  • File hash values
  • Lambda invocation details
  • Final comparison result

This provides strong traceability for debugging and validation.


Summary & Key Takeaways

This approach successfully solves a highly constrained testing problem:

Challenge

  • No AWS cloud usage
  • No Docker or containers
  • Must use Robot Framework

Solution

  • Use Moto for local AWS mocking
  • Use Boto3 for AWS interaction logic
  • Build a custom Python abstraction layer
  • Execute everything through Robot Framework

Final Outcome

  • Fully local AWS testing environment
  • No external dependencies
  • Supports S3 and Lambda workflows
  • Reusable and CI-friendly

Final Insight

This methodology demonstrates that realistic AWS testing is still achievable under extreme constraints by combining lightweight mocking (Moto), SDK abstraction (Boto3), and structured test automation (Robot Framework). It provides a scalable pattern for isolated development environments and CI pipelines where infrastructure access is restricted.

Related Resources

AWS Testing Page

Find the Project Code in GitHub

AWS Testing with LocalStack + Testcontainers


Discover more from Rotebit

Subscribe to get the latest posts sent to your email.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply