Recap Series
- Session 02: AWS Compliance with Terraform
- Session 03: Beginner to Builder: An Awesome Cloud Journey
- Session 04: Team-First Serverless Engineering with Laravel and Bref
- Session 05: Event Opening: AWS Community Day Hong Kong 2025
- Session 06: Agent-to-Agent: Building Interoperable AI on AWS
- Session 07: Utilize Another Telemetry Data for Faster Improvement with AI Agent
- Session 08: Graduating from Vibe Coding: Spec-Driven Development with Kiro
- Session 09: Automated Testing using MCP and AI Agents
- Session 10: Modernizing Telecom Security: ML Powered Approach
- Session 11: Rethinking GenAI Agent: RAG and MCP
- Session 12: Disaster and Emergency Response with TAK and AWS
- Session 13: Rethinking Serverless Application Workflows from a Testing Perspective
- Session 14: Practical AWS FinOps for Cloud Success
Phase 1: Requirements
Architecture Overview
- Batch processing workflow using AWS Lambda and Step Functions.
- Three states in a straight line.
- Unit tests for each Lambda function, but manual testing for Step Functions workflow.
Testing Goals
- Automate Step Functions workflow testing.
- Ensure input and output values match expected values.
- Integrate tests into CI/CD pipeline using GitHub Actions.
- Avoid deploying to a real AWS environment for testing.
Phase 2: Plan
Tools and Technologies
- Step Functions Local: For running and testing Step Functions locally.
- GitHub Actions: For CI/CD workflow automation.
- Localstack or similar: To simulate AWS Lambda locally.
GitHub Actions Workflow
- Set up workflow to run tests on push or pull requests.
- Use Step Functions Local Docker image for local testing environment.
- Use Localstack for Lambda simulation.
- https://www.localstack.cloud/
- Import Step Functions definition and run workflow locally.
- Verify input and output values of each state.
Steps in the Workflow
- [ 1 ] Start Containers:
- Pull and start Step Functions Local Docker image.
- Set up Localstack for Lambda simulation.
- [ 2 ] Import Step Functions Definition:
- Import state machine definition into local environment.
- [ 3 ] Run Workflow:
- Trigger Step Functions workflow using local endpoint.
- [ 4 ] Validate Results:
- Check input and output values against expected values.
- [ 5 ] Report Results:
- Generate a report or status indicating test success or failure.
How to Test Serverless Architecture?
Introduction
- Serverless architecture offers significant benefits, enabling quick delivery of value to customers.
- The focus here is on testing from a testing perspective, rather than system performance or cost.
Why Do We Need Testing?
- Testing helps us understand, predict, and control system behavior.
- It allows us to identify and quantify system risks.
- Writing tests helps us better understand requirements.
- Testing ensures reproducibility and explainability of results.
- The primary goal of testing is to reduce unknown risks.
Types of Tests
- Unit Tests: Test individual components or functions in isolation.
- Integration Tests: Test the interaction between combined components.
- Logic Tests: Verify the correctness of business logic.
- Workflow Tests: Test the end-to-end flow of a process or workflow.
- API Tests: Test the functionality and reliability of APIs.
Recommendation
- It is important to be aware of different test types and their purposes and goals.
- Understanding these test types will help in designing effective testing strategies for serverless architectures.
Separate Processing for Easier Testing
Key Points
- Easy-to-Test Units: Units that are easy to test are also easy to understand.
- System Clarity: When a system is designed with separate, testable units, it naturally shows what it does, when it does it, and why it does it.
- Avoiding Complexity: If something is hard to test, it likely means there is too much responsibility and logic concentrated in one place.
Example Comparison
- Less Architecture: A single Lambda function handles both getting data from other servers and processing/storing it in DynamoDB.
- Right Architecture: Separate Lambda functions for each operation (getting data and processing/storing data).
Benefits of Separation
- Easier to test each part individually.
- When an error occurs, it is easier to pinpoint the exact location of the problem.
- Reduces the time from error occurrence to error identification and fix.
General Principle
- Dividing Methods: The same principle of dividing methods applies across different programming languages (e.g., Python, Ruby, Go).
- Small Units: Identify what you consider to be small, testable units and apply this division principle accordingly.
Testing Perspective in System Design
- Identifying Weak Points: From a testing perspective, it is easy to identify weak points, such as too much responsibility in one place.
- Reducing Error Detection Time: High testability helps reduce the time from error occurrence to error detection and fix, similar to reducing the development cycle.
- Quick Delivery: High testability contributes to quicker system delivery.
Key Points to Consider When Building Serverless Architecture from a Testing Perspective
- Separate Processing: Easier to test units are easier to understand. Separating processes helps identify weak points and reduces error detection time.
- Avoiding Complexity: Concentrated responsibility and logic in one place make testing difficult. Separate processes to simplify testing and troubleshooting.
- High Testability: Contributes to quicker system delivery and reduced development cycles.
Final Goal
- The ultimate goal for engineers is to deliver value to users.
- Always keep user value in mind to ensure successful outcomes.
- Encouraged discussion and collaboration to share insights and improve testing practices.
