Bird
Raised Fist0
Selenium Pythontesting~8 mins

Markers for categorization in Selenium Python - Framework Patterns

Choose your learning style10 modes available
Framework Mode - Markers for categorization
Folder Structure
selenium-python-project/
├── tests/
│   ├── test_login.py
│   ├── test_checkout.py
│   └── test_search.py
├── pages/
│   ├── login_page.py
│   ├── checkout_page.py
│   └── search_page.py
├── markers/
│   ├── smoke.py
│   ├── regression.py
│   └── slow.py
├── utils/
│   ├── driver_factory.py
│   └── helpers.py
├── config/
│   ├── config.yaml
│   └── credentials.yaml
├── conftest.py
└── pytest.ini
    
Test Framework Layers
  • Test Layer: Contains test scripts using pytest with markers to categorize tests (e.g., @pytest.mark.smoke).
  • Page Object Layer: Classes representing web pages with methods to interact with page elements.
  • Markers Layer: Python files defining custom markers for categorizing tests like smoke, regression, slow.
  • Utilities Layer: Helper functions and driver setup for browser management.
  • Configuration Layer: YAML or other config files for environment settings, credentials, and pytest.ini for marker registration.
Configuration Patterns

Use pytest.ini to register markers so pytest recognizes them and avoids warnings:

[pytest]
markers =
    smoke: quick tests to check basic functionality
    regression: full test suite for release validation
    slow: tests that take longer to run
    

Use config/config.yaml to store environment URLs and browser preferences.

Use conftest.py to define fixtures that read config and initialize WebDriver accordingly.

Test Reporting and CI/CD Integration
  • Use pytest built-in reporting with --junitxml=report.xml for CI tools to parse results.
  • Integrate with CI/CD pipelines (e.g., GitHub Actions, Jenkins) to run tests on push or pull requests.
  • Use markers to select tests in CI jobs, e.g., run only smoke tests on every commit, full regression nightly.
  • Generate HTML reports with plugins like pytest-html for easy visualization.
Best Practices for Markers in Selenium Python Framework
  1. Register all custom markers in pytest.ini to avoid warnings and keep documentation clear.
  2. Use markers to categorize tests by purpose (smoke, regression, slow) to control test execution scope easily.
  3. Keep marker definitions in a dedicated folder for clarity and easy maintenance.
  4. Use markers in combination with pytest command line to run specific groups of tests, improving test speed and feedback.
  5. Document marker usage clearly so all team members understand test categories and when to run them.
Self Check

Where in this folder structure would you add a new marker called api to categorize API tests?

Key Result
Use pytest markers to categorize tests for flexible and efficient test execution in Selenium Python frameworks.

Practice

(1/5)
1. What is the main purpose of using markers in pytest with Selenium tests?
easy
A. To write test cases faster
B. To label and organize tests for selective running
C. To automatically fix test failures
D. To generate test reports

Solution

  1. Step 1: Understand what markers do

    Markers are used to label tests so you can group or select them easily.
  2. Step 2: Identify the main purpose

    This helps run only certain tests or skip some, improving test control.
  3. Final Answer:

    To label and organize tests for selective running -> Option B
  4. Quick Check:

    Markers = Organize tests [OK]
Hint: Markers help pick which tests to run or skip [OK]
Common Mistakes:
  • Thinking markers speed up writing tests
  • Believing markers fix test errors automatically
  • Confusing markers with report generation
2. Which is the correct way to add a marker named smoke to a test function in pytest?
easy
A. @pytest.mark.smoke\ndef test_example(): pass
B. @pytest.mark('smoke')\ndef test_example(): pass
C. @pytest.mark[smoke]\ndef test_example(): pass
D. @pytest.mark->smoke\ndef test_example(): pass

Solution

  1. Step 1: Recall pytest marker syntax

    Markers use dot notation: @pytest.mark.marker_name above the test.
  2. Step 2: Match syntax to options

    Only @pytest.mark.smoke\ndef test_example(): pass uses correct dot notation without extra symbols.
  3. Final Answer:

    @pytest.mark.smoke\ndef test_example(): pass -> Option A
  4. Quick Check:

    Marker syntax = dot notation [OK]
Hint: Use dot notation: @pytest.mark.marker_name [OK]
Common Mistakes:
  • Using parentheses instead of dot notation
  • Using brackets or arrows incorrectly
  • Missing the @ symbol before pytest.mark
3. Given this pytest code snippet, what tests will run if you execute pytest -m smoke?
@pytest.mark.smoke
def test_login(): pass

@pytest.mark.regression
def test_checkout(): pass

def test_search(): pass
medium
A. Only test_login
B. Only test_checkout
C. Both test_login and test_checkout
D. All three tests

Solution

  1. Step 1: Understand pytest -m option

    The -m option runs tests with the given marker only.
  2. Step 2: Identify tests with 'smoke' marker

    Only test_login has @pytest.mark.smoke.
  3. Final Answer:

    Only test_login -> Option A
  4. Quick Check:

    pytest -m smoke runs smoke tests only [OK]
Hint: -m runs tests with matching marker only [OK]
Common Mistakes:
  • Running all tests ignoring markers
  • Confusing marker names
  • Assuming unmarked tests run with any marker
4. You wrote this test with a marker but it does not run when you use pytest -m regression. What is the error?
@pytest.mark.regresion
def test_payment(): pass
medium
A. Test function name is incorrect
B. Missing @ symbol before pytest.mark
C. Marker name is misspelled
D. pytest -m cannot run marked tests

Solution

  1. Step 1: Check marker spelling

    The marker used is 'regresion' but command uses 'regression'.
  2. Step 2: Understand effect of misspelling

    pytest -m regression won't find tests marked 'regresion', so test is skipped.
  3. Final Answer:

    Marker name is misspelled -> Option C
  4. Quick Check:

    Marker spelling must match exactly [OK]
Hint: Check marker spelling matches command exactly [OK]
Common Mistakes:
  • Typos in marker names
  • Forgetting @ before pytest.mark
  • Assuming pytest runs all marked tests without -m
5. You want to run all tests except those marked slow. Which pytest command should you use?
hard
A. pytest -m slow
B. pytest --exclude slow
C. pytest --skip slow
D. pytest -m "not slow"

Solution

  1. Step 1: Understand pytest marker expressions

    To exclude tests with a marker, use -m "not marker_name" syntax.
  2. Step 2: Match command to requirement

    pytest -m "not slow" uses "not slow" to run all tests except those marked slow.
  3. Final Answer:

    pytest -m "not slow" -> Option D
  4. Quick Check:

    Use -m "not marker" to exclude tests [OK]
Hint: Use -m "not marker" to skip marked tests [OK]
Common Mistakes:
  • Using -m marker to run only those tests
  • Using unsupported --skip or --exclude options
  • Not quoting the expression with spaces
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