Bird
Raised Fist0
Testing Fundamentalstesting~15 mins

Test data management in Testing Fundamentals - Build an Automation Script

Choose your learning style10 modes available
Verify user registration with valid test data
Preconditions (2)
Step 1: Open the user registration page
Step 2: Enter 'testuser1@example.com' in the email field
Step 3: Enter 'TestUser123!' in the password field
Step 4: Enter 'Test User' in the full name field
Step 5: Click the 'Register' button
✅ Expected Result: User is successfully registered and redirected to the welcome page with a confirmation message
Automation Requirements - Selenium with Python
Assertions Needed:
Verify the URL is the welcome page URL after registration
Verify the confirmation message is displayed on the page
Best Practices:
Use explicit waits to wait for elements to be visible or clickable
Use Page Object Model to separate page locators and actions
Use parameterized test data to allow easy changes
Avoid hardcoding test data inside the test script
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
import unittest

class RegistrationPage:
    def __init__(self, driver):
        self.driver = driver
        self.email_input = (By.ID, 'email')
        self.password_input = (By.ID, 'password')
        self.fullname_input = (By.ID, 'fullname')
        self.register_button = (By.ID, 'register-btn')
        self.confirmation_message = (By.ID, 'confirmation-msg')

    def enter_email(self, email):
        WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(self.email_input)).send_keys(email)

    def enter_password(self, password):
        WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(self.password_input)).send_keys(password)

    def enter_fullname(self, fullname):
        WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(self.fullname_input)).send_keys(fullname)

    def click_register(self):
        WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable(self.register_button)).click()

    def get_confirmation_message(self):
        return WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(self.confirmation_message)).text

class TestUserRegistration(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get('https://example.com/register')
        self.page = RegistrationPage(self.driver)

    def test_register_with_valid_data(self):
        test_data = {
            'email': 'testuser1@example.com',
            'password': 'TestUser123!',
            'fullname': 'Test User'
        }
        self.page.enter_email(test_data['email'])
        self.page.enter_password(test_data['password'])
        self.page.enter_fullname(test_data['fullname'])
        self.page.click_register()

        WebDriverWait(self.driver, 10).until(EC.url_contains('/welcome'))
        current_url = self.driver.current_url
        self.assertIn('/welcome', current_url, 'URL after registration should contain /welcome')

        confirmation_text = self.page.get_confirmation_message()
        self.assertEqual(confirmation_text, 'Registration successful!', 'Confirmation message should be displayed')

    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

This script uses Selenium with Python to automate the user registration test case.

The RegistrationPage class follows the Page Object Model pattern. It stores locators and methods to interact with the registration page elements. This keeps the test code clean and easy to maintain.

The TestUserRegistration class contains the test method test_register_with_valid_data. It uses explicit waits to ensure elements are ready before interacting. The test inputs the prepared test data, clicks register, then verifies the URL and confirmation message.

Explicit waits avoid timing issues. Assertions check that the registration succeeded by URL and message. The test data is stored in a dictionary to avoid hardcoding inside the methods.

Finally, tearDown closes the browser after the test.

Common Mistakes - 3 Pitfalls
Hardcoding test data directly inside the test steps
Using time.sleep() instead of explicit waits
Locating elements inside test methods repeatedly
Bonus Challenge

Now add data-driven testing with 3 different sets of user registration data

Show Hint

Practice

(1/5)
1. What is the main purpose of test data management in software testing?
easy
A. To design the user interface of the application
B. To write the test cases for the software
C. To organize and maintain data needed for testing
D. To fix bugs found during testing

Solution

  1. Step 1: Understand the role of test data management

    Test data management is about handling the data used during testing to ensure tests run smoothly and reliably.
  2. Step 2: Differentiate from other testing activities

    Writing test cases, fixing bugs, and designing UI are separate tasks from managing test data.
  3. Final Answer:

    To organize and maintain data needed for testing -> Option C
  4. Quick Check:

    Test data management = Organize test data [OK]
Hint: Test data management means organizing test data [OK]
Common Mistakes:
  • Confusing test data management with writing test cases
  • Thinking it involves fixing bugs
  • Mixing it up with UI design
2. Which of the following is a correct way to represent test data in a CSV file?
easy
A. "username","password","email"\nuser1,pass123,user1@example.com
B. username;password;email user1;pass123;user1@example.com
C. username password email user1 pass123 user1@example.com
D. username|password|email user1|pass123|user1@example.com

Solution

  1. Step 1: Identify the CSV format rules

    CSV files use commas to separate values, and text fields are often enclosed in quotes.
  2. Step 2: Check each option for correct CSV syntax

    "username","password","email"\nuser1,pass123,user1@example.com uses commas and quotes correctly. Options A, B, and D use spaces, semicolons, or pipes, which are not standard CSV separators.
  3. Final Answer:

    "username","password","email"\nuser1,pass123,user1@example.com -> Option A
  4. Quick Check:

    CSV uses commas and quotes [OK]
Hint: CSV uses commas, not semicolons or pipes [OK]
Common Mistakes:
  • Using semicolons or pipes instead of commas
  • Not enclosing text fields in quotes when needed
  • Using spaces as separators
3. Given the following Python code snippet for test data setup, what will be the output?
test_data = [
    {'id': 1, 'name': 'Alice'},
    {'id': 2, 'name': 'Bob'},
    {'id': 3, 'name': 'Charlie'}
]

names = [user['name'] for user in test_data if user['id'] > 1]
print(names)
medium
A. ['Alice', 'Bob', 'Charlie']
B. ['Bob', 'Charlie']
C. ['Alice']
D. []

Solution

  1. Step 1: Understand the list comprehension condition

    The code selects names where 'id' is greater than 1, so it excludes the entry with id 1 (Alice).
  2. Step 2: Identify which names meet the condition

    Users with id 2 and 3 are Bob and Charlie, so the list will be ['Bob', 'Charlie'].
  3. Final Answer:

    ['Bob', 'Charlie'] -> Option B
  4. Quick Check:

    Filter id > 1 gives Bob and Charlie [OK]
Hint: Filter list by condition to find matching names [OK]
Common Mistakes:
  • Including all names without filtering
  • Confusing id comparison operators
  • Misreading list comprehension syntax
4. A tester wrote this SQL query to insert test data but it fails:
INSERT INTO users (id, username, email)
VALUES (1, 'testuser', testuser@example.com);
What is the error and how to fix it?
medium
A. The email value is missing quotes; fix by adding quotes around 'testuser@example.com'
B. The table name 'users' is incorrect; fix by renaming it to 'user_data'
C. The id value should be a string; fix by adding quotes around 1
D. The VALUES keyword is misspelled; fix by changing it to VALUE

Solution

  1. Step 1: Identify syntax error in SQL query

    The email value is a string and must be enclosed in single quotes in SQL.
  2. Step 2: Correct the email value by adding quotes

    Change testuser@example.com to 'testuser@example.com' to fix the syntax error.
  3. Final Answer:

    The email value is missing quotes; fix by adding quotes around 'testuser@example.com' -> Option A
  4. Quick Check:

    String values need quotes in SQL [OK]
Hint: String values in SQL must be quoted [OK]
Common Mistakes:
  • Forgetting quotes around string values
  • Changing table names unnecessarily
  • Misusing SQL keywords
5. You need to create test data for a user registration form that requires unique emails. Which approach best manages this test data to avoid conflicts during repeated test runs?
hard
A. Store emails in a plain text file without any uniqueness checks
B. Manually create a fixed list of emails and reuse them in every test run
C. Use the same email for all tests and reset the database after each run
D. Use a script that generates a new unique email each time by appending a timestamp

Solution

  1. Step 1: Understand the need for unique test data

    Unique emails prevent conflicts and errors when tests run multiple times.
  2. Step 2: Evaluate approaches for uniqueness

    Generating emails with timestamps ensures uniqueness automatically, avoiding manual errors or conflicts.
  3. Final Answer:

    Use a script that generates a new unique email each time by appending a timestamp -> Option D
  4. Quick Check:

    Automate unique data generation to avoid conflicts [OK]
Hint: Generate unique data automatically with timestamps [OK]
Common Mistakes:
  • Reusing fixed emails causing test failures
  • Resetting database is slow and error-prone
  • Ignoring uniqueness leads to conflicts
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