Notion logo

Notion QA Engineer Interview Questions

28 practice questions for Notion QA Engineer interviews

Notion QA engineer interviews test automation frameworks, test strategy, CI integration, performance testing, and debugging complex multi-service systems.

All Roles Software Engineer Backend Engineer Frontend Engineer Full Stack Engineer Mobile Engineer Data Engineer Data Scientist ML Engineer DevOps Engineer DevOps Engineer Product Manager SRE Security Engineer Engineering Manager Data Analyst UX/UI Designer QA Engineer

No verified questions yet for Notion.

coding Hard test automation #1

1. [OA] Selenium Automation — Implement a test suite for Notion's collaboration features

In the rapidly evolving landscape of productivity tools, Notion requires robust test automation to ensure the reliability of its collaboration features. A well-constructed automated test suite can help maintain high user satisfaction and product integrity.
Develop a CollaborationTestSuite class that includes the following methods:
- def run_tests(self) -> None: Initiates all tests in the suite.
- def test_shared_pages(self) -> bool: Validates that shared pages maintain correct permissions for all users.
- def test_comments_feature(self) -> bool: Ensures the comments feature allows users to add, edit, and delete comments.
- def test_real_time_updates(self) -> bool: Confirms that changes made by one user are reflected in real-time for co-editors.
Example 1:
Input: run_tests()
Output: All tests passed
Explanation: The suite executes all tests and returns a summary of the outcomes.
Constraints:
- The tests should handle at least 5 concurrent users.
- Each test must execute within a time limit of 10 seconds.
system design Senior api design #2

2. [OA] API Rate Limiter — Design a system to manage API rate limiting for Notion's services

As the number of users and API calls to Notion scales, it becomes crucial to implement a rate limiting mechanism to protect services from being overwhelmed. This design must account for varying user needs and ensure fair distribution of resources.
Create an APIRateLimiter class with the following methods:
- def limit_request(self, user_id: str): Handles incoming requests for users, returning a success or wait time.
- def reset_limit(self, user_id: str): Resets the rate limit for a specific user.
- def get_user_requests(self, user_id: str) -> int: Returns the number of API calls made by a specific user in the current time window.
Example 1:
Input: limit_request('user_123')
Output: {'status': 'success', 'wait_time': 0}
Explanation: The user may proceed with their API call without waiting.
Constraints:
- Each user can make 100 requests per hour.
system design Senior api design #3

3. [OA] Load Test Orchestrator — Design a system to run load tests on Notion's API services

With the increasing number of users on Notion, a robust load testing framework is critical in ensuring that API services can handle high traffic without failures. The goals are to simulate various loads and report metrics effectively.
Implement a LoadTestOrchestrator class with the following methods:
- def run_load_test(self, service_name: str, user_count: int) -> Dict[str, Any]: Initiates a load test on a specific service and returns the outcome.
- def report_results(self, results: Dict[str, Any]) -> None: Sends the load test results to a reporting system.
- def reset_test_data(self) -> None: Clears previous test results and resets the orchestrator.
Example 1:
Input: run_load_test('api/v1/pages', 1000)
Output: {'success': True, 'response_time': 300}
Explanation: The method returns the success status and average response time based on the load test.
Constraints:
- The system should support up to 5000 concurrent users and track at least 100 metrics per test run.
system design Senior test automation #4

4. [OA] Flaky Test Detector — Design a system to identify and report flaky tests in Notion's CI pipeline

In the context of Notion’s continuous integration pipeline, flakiness can significantly impede development velocity and degrade team trust in test results. A reliable detection mechanism is essential.
Define a FlakyTestDetector class with the following methods:
- def record_test_result(self, test_id: str, success: bool) -> None: Records the result of a test execution.
- def detect_flaky_tests(self) -> List[str]: Returns a list of test IDs that are identified as flaky.
- def reset_flaky_tests(self) -> None: Resets the status of flaky tests, allowing for new evaluations.
Example 1:
Input: record_test_result('test_123', True)
Output: None
Explanation: This method adds the result into the tracking system.
Constraints:
- The system should handle up to 1000 tests and keep historical results for at least 50 test runs.

Related Notion QA Engineer interview prep

Start practicing Notion questions

Sign up for free to access walkthroughs, AI-generated questions, and more.

Get Started Free