How to use the command pytest (with examples)
Pytest is a powerful Python testing tool that allows you to write simple and scalable tests. It provides a wide range of features for testing, including support for running tests from specific files, matching tests based on keywords, and more.
Use case 1: Run tests from specific files
Code:
pytest path/to/test_file1.py path/to/test_file2.py ...
Motivation: Running tests from specific files can be useful when you want to focus on a specific set of tests or when you want to run tests that are located in different directories.
Explanation: The pytest
command is followed by the paths to the test files that you want to run. Each path should be separated by a space.
Example output:
============================= test session starts ==============================
...
collected 2 items
path/to/test_file1.py . [ 50%]
path/to/test_file2.py . [100%]
============================== 2 passed in 0.01s ===============================
Use case 2: Run tests with names matching a specific keyword expression
Code:
pytest -k expression
Motivation: Running tests based on specific keywords can help you to easily filter and execute tests that are relevant to a specific feature or functionality.
Explanation: The -k
flag is used to specify a keyword expression that pytest will use to select and run matching tests.
Example output:
============================= test session starts ==============================
...
collected 4 items / 3 deselected
test_file1.py . [100%]
============================== 1 passed in 0.01s ===============================
Use case 3: Exit as soon as a test fails or encounters an error
Code:
pytest --exitfirst
Motivation: Exiting as soon as a test fails or encounters an error can be helpful when you want to quickly identify and debug issues in your tests without running the entire test suite.
Explanation: The --exitfirst
option tells pytest to stop running tests as soon as a failure or an error occurs.
Example output:
============================= test session starts ==============================
...
collected 2 items
path/to/test_file1.py F [ 50%]
path/to/test_file2.py . [100%]
=================================== FAILURES ===================================
_____________________________ test_example _________________________________
def test_example():
> assert 1 == 2
E assert 1 == 2
path/to/test_file1.py:5: AssertionError
Use case 4: Run tests matching or excluding markers
Code:
pytest -m marker_name1 and not marker_name2
Motivation: Markers in pytest allow you to selectively run or skip tests based on certain criteria. Running tests matching or excluding specific markers can be useful when you want to focus on specific types of tests.
Explanation: The -m
flag is used to identify and select tests with specific markers. You can also use the not
keyword to exclude tests with specific markers.
Example output:
============================= test session starts ==============================
...
collected 4 items / 2 deselected
test_file1.py .. [100%]
============================== 2 passed in 0.01s ===============================
Use case 5: Run until a test failure, continuing from the last failing test
Code:
pytest --stepwise
Motivation: Running tests step-by-step can be helpful for debugging purposes, as it allows you to pause and inspect the state of the test execution at each step.
Explanation: The --stepwise
option enables step-by-step execution of tests. It stops at the first failing test and allows you to continue from the last failing test by pressing Enter
.
Example output:
============================= test session starts ==============================
...
collected 2 items
path/to/test_file1.py . [ 50%]
path/to/test_file2.py . [100%]
============================== 2 passed in 0.01s ===============================
Use case 6: Run tests without capturing output
Code:
pytest --capture=no
Motivation: By default, pytest captures the output of tests and displays it only in case of failures or errors. Running tests without capturing output can be useful when you want to see the output of all tests, even if they pass.
Explanation: The --capture=no
option tells pytest not to capture the output of tests, resulting in the output being displayed immediately during test execution.
Example output:
============================= test session starts ==============================
...
collected 2 items
path/to/test_file1.py PASSED [ 50%]
path/to/test_file2.py PASSED [100%]
============================== 2 passed in 0.01s ===============================
Conclusion:
Pytest is a versatile testing tool that offers numerous capabilities for running Python tests efficiently. By using the various options and flags provided by pytest, you can customize your test runs based on your specific requirements and preferences. Whether you want to run tests from specific files, filter tests based on keywords, or control the output capturing behavior, pytest has you covered.