40 practice questions for Amazon QA Engineer interviews
Amazon QA engineer interviews test automation frameworks, test strategy, CI integration, performance testing, and debugging complex multi-service systems.
1. [OA] Flaky Test Detector — Create a system to identify and manage flaky tests in Amazon’s CI pipeline
Flaky tests can severely affect Amazon's release process. A mechanism to detect and provide insights into flaky tests will be essential for maintaining code quality. Design a class FlakyTestDetector with the following methods: - addTestExecution(testName: str, result: bool): None - Adds a result of a test execution to the detector. - getFlakyTests(): List[str] - Returns a list of tests identified as flaky based on historical results.Example 1: Input: addTestExecution('LoginTest', true) followed by addTestExecution('LoginTest', false) Output: ['LoginTest'] Explanation: The test failed inconsistently, marking it as flaky.Constraints: - Each test name is unique and of length 1 to 100. - Results can only be true or false.
system designSeniordistributed systems#2
2. [OA] Load Test Orchestrator — Build a system for orchestrating load tests at Amazon scale
As Amazon expands its cloud services, verifying performance under high load is critical. An orchestrator must manage multiple load test scenarios efficiently. Create a class LoadTestOrchestrator with the following methods: - scheduleLoadTest(testName: str, duration: int): None - Schedule a load test with a specified duration. - executeTests(): List[Result] - Execute all scheduled load tests and return their results.Example 1: Input: scheduleLoadTest('API_Load_Test', 300) followed by executeTests() Output: [Result] Explanation: All scheduled tests are executed, returning results in a list.Constraints: - Duration is a positive integer less than or equal to 3600 seconds.
system designMediumapi design#3
3. [OA] Test Result Aggregator — Build a system that compiles test results from multiple sources
As Amazon continues to expand its automated testing capabilities, it becomes critical to consolidate results from varied testing environments. This requires a robust class design. Design a class TestResultAggregator with the following methods: - addResult(testName: str, result: bool): None - Adds a test result for the specified test. - getSummary(): Dict[str, int] - Returns a summary of passed and failed tests.Example 1: Input: addResult('LoginTest', true) followed by addResult('SignupTest', false) Output: {'passed': 1, 'failed': 1} Explanation: 1 test passed, and 1 test failed.Constraints: - Test names are unique strings of length 1 to 100.