When to automate vs manual test in Testing Fundamentals - Automation Approaches Compared
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 import unittest class LoginTest(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.get('https://example.com/login') self.wait = WebDriverWait(self.driver, 10) def test_valid_login(self): driver = self.driver wait = self.wait driver.find_element(By.ID, 'username').send_keys('user@example.com') driver.find_element(By.ID, 'password').send_keys('Password123') driver.find_element(By.ID, 'login-button').click() wait.until(EC.url_contains('/dashboard')) self.assertIn('/dashboard', driver.current_url) def test_invalid_login(self): driver = self.driver wait = self.wait driver.get('https://example.com/login') driver.find_element(By.ID, 'username').send_keys('wronguser@example.com') driver.find_element(By.ID, 'password').send_keys('WrongPass') driver.find_element(By.ID, 'login-button').click() error = wait.until(EC.visibility_of_element_located((By.ID, 'error-message'))) self.assertTrue(error.is_displayed()) self.assertEqual(error.text, 'Invalid username or password.') def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main()
This script uses Selenium with Python's unittest framework to automate login tests.
In setUp, the browser opens the login page and sets an explicit wait.
The test_valid_login method enters valid credentials, clicks login, waits for the dashboard URL, and asserts the URL changed.
The test_invalid_login method enters wrong credentials, clicks login, waits for an error message, and asserts it is visible and correct.
Explicit waits ensure the test waits for page changes or elements before asserting.
Using IDs for locators keeps selectors simple and reliable.
The tearDown method closes the browser after each test.
This structure follows best practices for maintainability and clear assertions.
Now add data-driven testing with 3 different sets of login credentials (valid, invalid username, invalid password).
Practice
Solution
Step 1: Understand the nature of repetitive tasks
Repetitive tasks are those that happen often and have stable expected results.Step 2: Match testing type to task nature
Automated testing is ideal for repetitive and stable tasks because it saves time and reduces human error.Final Answer:
Automated testing -> Option BQuick Check:
Repetitive tasks = Automated testing [OK]
- Choosing manual testing for repetitive tasks wastes time
- Confusing exploratory testing with repetitive testing
- Thinking ad-hoc testing fits repetitive tasks
Solution
Step 1: Identify when human insight is needed
Manual testing is best when tests require human judgment, such as usability or visual checks.Step 2: Compare options to manual testing needs
When tests require human judgment and intuition matches the need for human intuition, unlike options A, B, and C which favor automation.Final Answer:
When tests require human judgment and intuition -> Option AQuick Check:
Human insight = Manual testing [OK]
- Choosing manual for repetitive stable tests
- Confusing automation needs with manual testing
- Ignoring the role of human intuition
Solution
Step 1: Analyze test types and their nature
80 tests are stable and repetitive, suitable for automation; 20 are new and exploratory, better for manual testing.Step 2: Match testing approach to test types
Automate stable tests to save time; manually test new features for human insight.Final Answer:
Automate the 80 stable tests and manually test the 20 new features -> Option CQuick Check:
Stable = automate, new = manual [OK]
- Automating new exploratory tests that change often
- Manually testing all tests wastes time
- Ignoring test stability when choosing method
Solution
Step 1: Understand impact of frequent changes on automation
When features change often, automated scripts break and need frequent fixes.Step 2: Identify the problem caused by frequent script updates
Constant updates waste time and reduce automation benefits.Final Answer:
Scripts will require constant updates, wasting effort -> Option AQuick Check:
Frequent changes = costly automation maintenance [OK]
- Thinking automation tools can't test new features
- Confusing speed with suitability
- Ignoring maintenance cost of automation
Solution
Step 1: Analyze UI and backend characteristics
UI changes frequently, making automation brittle; backend logic is stable and critical, suitable for automation.Step 2: Choose testing method per component
Manual testing fits UI due to frequent changes and human insight; automate backend logic for reliability and speed.Final Answer:
Manually test UI and automate backend logic tests -> Option DQuick Check:
UI frequent changes = manual, backend stable = automate [OK]
- Automating frequently changing UI causing flaky tests
- Manually testing stable backend wasting time
- Ignoring test stability and criticality
Ready to prove it?
Pass the test and this pattern moves unknown
