Markers help organize tests by grouping them. They also let you choose which tests to run or skip easily.
Why markers categorize and control tests in PyTest
Introduction
Syntax
PyTest
@pytest.mark.marker_name def test_function(): pass
Markers are added above test functions using @pytest.mark.name.
You can use markers to select or skip tests when running pytest.
Examples
PyTest
@pytest.mark.slow def test_long_process(): assert True
PyTest
@pytest.mark.skip(reason="Not ready") def test_not_ready(): assert False
PyTest
@pytest.mark.database def test_db_access(): assert True
Sample Program
This script has three tests with different markers: 'fast', 'slow', and 'skip'. You can run only the fast tests using pytest -m fast.
PyTest
import pytest @pytest.mark.fast def test_addition(): assert 1 + 1 == 2 @pytest.mark.slow def test_wait(): import time time.sleep(1) assert True @pytest.mark.skip(reason="Skip this test") def test_skip(): assert False # Run only fast tests # Command: pytest -m fast
Important Notes
Use markers to organize tests by type, speed, or requirements.
You can combine markers to run complex selections of tests.
Remember to register custom markers in pytest.ini to avoid warnings.
Summary
Markers group tests to make running specific sets easier.
Markers can skip or select tests based on conditions.
Using markers helps save time and focus testing efforts.
Practice
1. What is the main purpose of using markers in pytest?
easy
Solution
Step 1: Understand what markers do in pytest
Markers are labels you add to tests to group or categorize them.Step 2: Identify the main use of markers
Markers help you run only certain groups of tests, saving time and focusing effort.Final Answer:
To group tests so you can run specific sets easily -> Option DQuick Check:
Markers group tests = B [OK]
Hint: Markers help run selected tests quickly [OK]
Common Mistakes:
- Thinking markers auto-fix tests
- Confusing markers with code generation
- Believing markers change Python version
2. Which of the following is the correct way to mark a test as 'slow' in pytest?
easy
Solution
Step 1: Recall pytest marker syntax
Markers are used with @pytest.mark.<marker_name> before the test function.Step 2: Match the correct syntax
Only '@pytest.mark.slow' is the correct way to mark a test as slow.Final Answer:
@pytest.mark.slow\ndef test_example(): pass -> Option BQuick Check:
Use @pytest.mark.marker_name = D [OK]
Hint: Use @pytest.mark.marker_name to mark tests [OK]
Common Mistakes:
- Omitting 'pytest' before 'mark'
- Using wrong decorator names
- Confusing marker syntax with other decorators
3. Given the code below, what tests will run when executing
pytest -m "slow and not network"?
@pytest.mark.slow def test_a(): pass @pytest.mark.network def test_b(): pass @pytest.mark.slow @pytest.mark.network def test_c(): pass def test_d(): pass
medium
Solution
Step 1: Understand the marker expression
The command runs tests marked 'slow' but NOT marked 'network'.Step 2: Check each test's markers
test_a is 'slow' only (runs), test_b is 'network' only (excluded), test_c is both 'slow' and 'network' (excluded), test_d has no markers (excluded).Final Answer:
Only test_a -> Option CQuick Check:
Run tests with slow and not network = C [OK]
Hint: Use 'and not' to exclude markers in pytest -m [OK]
Common Mistakes:
- Including tests with 'network' marker
- Running unmarked tests by default
- Misunderstanding boolean logic in marker expressions
4. What is wrong with this pytest marker usage?
@pytest.mark.skipif(sys.platform == 'win32')
def test_func():
assert Truemedium
Solution
Step 1: Check the code for required imports
The code uses 'sys.platform' but does not import 'sys'.Step 2: Verify marker syntax
'@pytest.mark.skipif(condition)' is correct syntax, so no error there.Final Answer:
Missing import of sys module -> Option AQuick Check:
Use imports for conditions in markers [OK]
Hint: Always import modules used in marker conditions [OK]
Common Mistakes:
- Forgetting to import modules like sys
- Misnaming skipif marker
- Using skipif without condition parentheses
5. You want to run only tests marked as 'database' but skip those also marked 'slow'. Which pytest command achieves this?
hard
Solution
Step 1: Understand the requirement
Run tests with 'database' marker but exclude those with 'slow'.Step 2: Translate to pytest marker expression
Use 'database and not slow' to select tests marked database but not slow.Final Answer:
pytest -m "database and not slow" -> Option AQuick Check:
Use 'and not' to exclude markers [OK]
Hint: Combine markers with 'and not' to exclude tests [OK]
Common Mistakes:
- Swapping marker names in the expression
- Using 'or' instead of 'and not'
- Misunderstanding marker logic in pytest -m
Recommended
Ready to prove it?
Pass the test and this pattern moves unknown
10 questions ~5 mineasy hard
