Markers help you group tests by labels. Running tests by marker lets you run only specific groups of tests quickly.
Running tests by marker (-m) in PyTest
Introduction
Syntax
PyTest
pytest -m <marker_name>
Replace <marker_name> with the label you assigned to tests.
You can combine markers with 'and', 'or', 'not' for complex selection.
Examples
PyTest
pytest -m smoke
PyTest
pytest -m "slow or database"PyTest
pytest -m "not slow"Sample Program
This test file has three tests. Two are marked 'smoke' and one is marked 'slow'.
Running pytest -m smoke will run only the two smoke tests.
PyTest
import pytest @pytest.mark.smoke def test_login(): assert True @pytest.mark.slow def test_data_processing(): assert True @pytest.mark.smoke def test_logout(): assert True
Important Notes
Markers must be registered in pytest.ini or you get warnings.
Use quotes around marker expressions with spaces or operators.
Markers help organize tests and speed up running only what you need.
Summary
Markers label tests for easy grouping.
Use pytest -m <marker> to run tests with that label.
You can combine markers with logical operators for flexible test selection.
Practice
1. What does the
-m option do when running pytest?easy
Solution
Step 1: Understand pytest markers
Markers are labels you add to tests to group them logically.Step 2: Use
The-moption-moption runs only tests that have the specified marker label.Final Answer:
Runs only tests with the specified marker -> Option AQuick Check:
pytest -m runs tests by marker = A [OK]
Hint: Remember: -m filters tests by marker name [OK]
Common Mistakes:
- Confusing -m with directory or file options
- Thinking -m runs all tests regardless of marker
- Assuming -m runs tests in parallel
2. Which of the following is the correct syntax to run pytest tests marked as
slow?easy
Solution
Step 1: Recall pytest command options
The correct option to select tests by marker is-m, not--markeror others.Step 2: Match syntax to run tests with marker
The correct command ispytest -m slowto run tests marked asslow.Final Answer:
pytest -m slow -> Option BQuick Check:
Use single dash -m for marker filter = D [OK]
Hint: Use single dash -m, not --marker [OK]
Common Mistakes:
- Using --marker instead of -m
- Adding extra dashes like --m
- Confusing option names
3. Given these tests marked as
fast and db:
@pytest.mark.fast def test_a(): pass @pytest.mark.db def test_b(): pass @pytest.mark.fast def test_c(): passWhat tests run with the command
pytest -m "fast and not db"?medium
Solution
Step 1: Understand the marker expression
The command runs tests marked withfastAND NOT marked withdb.Step 2: Check each test's markers
test_aandtest_chavefastonly;test_bhasdbonly.Final Answer:
test_a and test_c -> Option DQuick Check:
fast and not db = test_a, test_c [OK]
Hint: Use logical operators to combine markers correctly [OK]
Common Mistakes:
- Including tests marked only with db
- Ignoring the 'not' operator
- Assuming all tests run
4. You run
pytest -m slow but no tests run, even though some tests have @pytest.mark.slow. What is the most likely cause?medium
Solution
Step 1: Check marker registration
Pytest requires custom markers to be registered inpytest.inito avoid warnings and ensure correct filtering.Step 2: Understand effect of missing registration
If markers are not registered, pytest may ignore them or not run tests filtered by them.Final Answer:
Markers are not registered in pytest.ini -> Option AQuick Check:
Unregistered markers cause no tests run = C [OK]
Hint: Always register custom markers in pytest.ini [OK]
Common Mistakes:
- Confusing -m and --m options
- Assuming tests are skipped by default
- Not checking test file presence
5. You have tests marked as
api, ui, and db. You want to run tests that are either api or ui, but not db. Which command achieves this?hard
Solution
Step 1: Understand operator precedence
Logical AND has higher precedence than OR, so parentheses are needed to groupapi or uitogether.Step 2: Analyze each option
pytest -m "(api or ui) and not db" correctly groups(api or ui)and excludesdbwithand not db.Final Answer:
pytest -m "(api or ui) and not db" -> Option CQuick Check:
Use parentheses to group OR conditions = A [OK]
Hint: Use parentheses to group markers with OR before AND [OK]
Common Mistakes:
- Ignoring operator precedence without parentheses
- Using AND instead of OR between api and ui
- Including db tests by mistake
Recommended
Ready to prove it?
Pass the test and this pattern moves unknown
10 questions ~5 mineasy hard
