Bird
Raised Fist0
Testing Fundamentalstesting~15 mins

Test automation pyramid in Testing Fundamentals - Build an Automation Script

Choose your learning style10 modes available
Verify login functionality with valid credentials
Preconditions (2)
Step 1: Open the login page URL
Step 2: Enter 'user@example.com' in the email input field
Step 3: Enter 'Password123!' in the password input field
Step 4: Click the login button
Step 5: Wait for the dashboard page to load
✅ Expected Result: User is redirected to the dashboard page with URL 'https://example.com/dashboard' and a welcome message is displayed
Automation Requirements - Selenium WebDriver with Python
Assertions Needed:
Verify current URL is 'https://example.com/dashboard'
Verify welcome message element is visible and contains text 'Welcome'
Best Practices:
Use explicit waits to wait for elements
Use Page Object Model to separate page interactions
Use clear and maintainable locators (id or name preferred)
Avoid hardcoded sleeps
Keep assertions focused and meaningful
Automated Solution
Testing Fundamentals
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class LoginPage:
    def __init__(self, driver):
        self.driver = driver
        self.email_input = (By.ID, 'email')
        self.password_input = (By.ID, 'password')
        self.login_button = (By.ID, 'loginBtn')

    def open(self):
        self.driver.get('https://example.com/login')

    def login(self, email, password):
        WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(self.email_input)).send_keys(email)
        self.driver.find_element(*self.password_input).send_keys(password)
        self.driver.find_element(*self.login_button).click()

class DashboardPage:
    def __init__(self, driver):
        self.driver = driver
        self.welcome_message = (By.ID, 'welcomeMsg')

    def is_loaded(self):
        return WebDriverWait(self.driver, 10).until(EC.url_to_be('https://example.com/dashboard'))

    def welcome_text(self):
        return WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(self.welcome_message)).text


def test_login():
    driver = webdriver.Chrome()
    try:
        login_page = LoginPage(driver)
        dashboard_page = DashboardPage(driver)

        login_page.open()
        login_page.login('user@example.com', 'Password123!')

        assert dashboard_page.is_loaded(), 'Dashboard page did not load as expected'
        welcome = dashboard_page.welcome_text()
        assert 'Welcome' in welcome, f"Expected 'Welcome' in message but got '{welcome}'"

        print('Test passed: Login functionality works as expected.')
    finally:
        driver.quit()

if __name__ == '__main__':
    test_login()

This script uses Selenium WebDriver with Python to automate the login test case.

We define two page classes: LoginPage and DashboardPage to separate page interactions, following the Page Object Model.

The LoginPage class has methods to open the login page and perform login by entering email and password and clicking the login button. We use explicit waits to wait until the email input is visible before typing.

The DashboardPage class checks if the dashboard URL is loaded and retrieves the welcome message text, again using explicit waits.

The test_login function runs the test: it opens the login page, performs login, then asserts the dashboard page loaded and the welcome message contains 'Welcome'.

Finally, the driver quits to close the browser.

This approach avoids hardcoded sleeps, uses maintainable locators by ID, and keeps assertions clear and focused.

Common Mistakes - 3 Pitfalls
Using time.sleep() instead of explicit waits
Using brittle XPath locators that rely on full element paths
Mixing page actions and assertions in the test function without page objects
Bonus Challenge

Now add data-driven testing with 3 different sets of valid credentials to verify login works for multiple users.

Show Hint

Practice

(1/5)
1. What is the main idea behind the test automation pyramid?
easy
A. Write mostly UI tests because they cover all features
B. Write many fast unit tests, fewer integration tests, and few slow UI tests
C. Write only manual tests to save automation effort
D. Write equal numbers of unit, integration, and UI tests

Solution

  1. Step 1: Understand test types and speed

    Unit tests are fast and cheap, integration tests are slower, UI tests are slowest and costly.
  2. Step 2: Apply pyramid principle

    The pyramid suggests many unit tests, fewer integration tests, and few UI tests to catch bugs early and keep tests efficient.
  3. Final Answer:

    Write many fast unit tests, fewer integration tests, and few slow UI tests -> Option B
  4. Quick Check:

    Test automation pyramid = many unit, fewer integration, few UI tests [OK]
Hint: Remember: fast tests at bottom, slow tests at top [OK]
Common Mistakes:
  • Thinking UI tests should be the majority
  • Believing manual tests replace automation
  • Assuming all test types should be equal
2. Which of the following correctly orders test types from fastest to slowest in the test automation pyramid?
easy
A. UI tests, integration tests, unit tests
B. Integration tests, unit tests, UI tests
C. Integration tests, UI tests, unit tests
D. Unit tests, integration tests, UI tests

Solution

  1. Step 1: Recall test speed hierarchy

    Unit tests run fastest because they test small code parts, integration tests are slower, UI tests are slowest due to full system interaction.
  2. Step 2: Match order from fastest to slowest

    The correct order is unit tests first, then integration tests, then UI tests last.
  3. Final Answer:

    Unit tests, integration tests, UI tests -> Option D
  4. Quick Check:

    Speed order = unit < integration < UI [OK]
Hint: Fastest tests are smallest scope: unit first [OK]
Common Mistakes:
  • Confusing UI tests as fastest
  • Mixing integration and unit test order
  • Ignoring test execution speed differences
3. Consider this test suite distribution: 100 unit tests, 30 integration tests, and 5 UI tests. Which statement best describes this setup according to the test automation pyramid?
medium
A. It has too few integration tests compared to UI tests
B. It has too many UI tests compared to unit tests
C. It follows the pyramid by having many unit tests and few UI tests
D. It violates the pyramid by having equal test counts

Solution

  1. Step 1: Analyze test counts

    There are many unit tests (100), fewer integration tests (30), and very few UI tests (5).
  2. Step 2: Compare with pyramid principle

    The pyramid recommends many unit tests, fewer integration tests, and few UI tests, matching this distribution.
  3. Final Answer:

    It follows the pyramid by having many unit tests and few UI tests -> Option C
  4. Quick Check:

    Test counts match pyramid shape [OK]
Hint: More unit tests, less UI tests = pyramid shape [OK]
Common Mistakes:
  • Thinking 5 UI tests is too many
  • Confusing integration test count importance
  • Assuming equal test numbers are correct
4. A team wrote mostly UI tests and very few unit tests. What is the main problem with this approach according to the test automation pyramid?
medium
A. UI tests are slow and costly, causing slow feedback and maintenance issues
B. Unit tests are unnecessary if UI tests exist
C. Integration tests will automatically cover all bugs
D. Manual testing is better than UI tests

Solution

  1. Step 1: Understand test cost and speed

    UI tests are slow to run and expensive to maintain compared to unit tests.
  2. Step 2: Identify pyramid violation

    Having mostly UI tests means slow feedback and higher maintenance, which the pyramid warns against.
  3. Final Answer:

    UI tests are slow and costly, causing slow feedback and maintenance issues -> Option A
  4. Quick Check:

    Too many UI tests = slow, costly [OK]
Hint: Too many UI tests slow feedback [OK]
Common Mistakes:
  • Ignoring unit test importance
  • Assuming integration tests cover all bugs
  • Confusing manual and automated UI tests
5. You want to improve your test suite following the test automation pyramid. Currently, you have 20 UI tests, 50 integration tests, and 10 unit tests. What is the best action to align with the pyramid?
hard
A. Increase unit tests significantly, reduce UI tests, and keep integration tests moderate
B. Increase UI tests to cover more features, keep others same
C. Remove unit tests and focus on integration and UI tests
D. Keep all test counts the same but run UI tests more often

Solution

  1. Step 1: Analyze current test distribution

    There are few unit tests (10), many integration tests (50), and many UI tests (20), which is opposite of pyramid advice.
  2. Step 2: Apply pyramid principle for improvement

    The pyramid suggests many unit tests, fewer integration tests, and few UI tests to catch bugs early and keep tests efficient.
  3. Final Answer:

    Increase unit tests significantly, reduce UI tests, and keep integration tests moderate -> Option A
  4. Quick Check:

    More unit, fewer UI tests = pyramid aligned [OK]
Hint: Boost unit tests, cut UI tests for pyramid fit [OK]
Common Mistakes:
  • Adding more UI tests instead of unit tests
  • Removing unit tests thinking they are less useful
  • Ignoring test speed and cost differences
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard