What if you could run every test in your project without remembering a single test name?
Why Test discovery rules in PyTest? - Purpose & Use Cases
Imagine you have a big project with hundreds of test files and functions. You try to run tests manually by typing each test file name or function. You miss some tests or run wrong ones because you forget names or mix files.
Manually running tests is slow and tiring. You can easily forget to run some tests or run outdated ones. It's hard to keep track of all test names and locations. This leads to missed bugs and wasted time.
Test discovery rules let pytest automatically find all test files and functions by following simple naming patterns. You just run one command, and pytest finds and runs all tests correctly. No more guessing or missing tests.
pytest test_example.py::test_func1 test_example.py::test_func2
pytest
It enables you to run all your tests quickly and reliably with a single command, saving time and avoiding mistakes.
A developer adds new tests to different files. Instead of remembering each test name, they just run pytest and all new and old tests run automatically, ensuring nothing is missed.
Manual test running is slow and error-prone.
Test discovery rules automate finding tests by naming patterns.
This makes running all tests easy, fast, and reliable.
Practice
Solution
Step 1: Understand pytest file naming rules
pytest looks for files starting or ending with 'test' and ending with '.py'.Step 2: Check each option
'test_example.py' starts with 'test' and ends with '.py', so pytest will find it. Others either don't end with '.py' or don't start/end with 'test'.Final Answer:
test_example.py -> Option BQuick Check:
File starts or ends with 'test' + '.py' = test_example.py [OK]
- Thinking pytest finds .pyc files
- Ignoring case sensitivity in file names
- Assuming any .py file is a test file
Solution
Step 1: Recall pytest test function naming
pytest looks for functions starting with 'test_'.Step 2: Evaluate each function name
'test_login()' starts with 'test_' exactly, so pytest will find it. Others do not follow this pattern.Final Answer:
test_login() -> Option AQuick Check:
Function starts with 'test_' = test_login() [OK]
- Using camelCase instead of snake_case
- Placing 'test' at the end of function name
- Missing underscore after 'test'
File: test_math.py def test_add(): pass def add_test(): pass File: math_test.py def test_subtract(): pass def subtract_test(): pass File: math.py def test_multiply(): pass
Solution
Step 1: Identify test files pytest finds
pytest finds files starting or ending with 'test' and ending with '.py'. So 'test_math.py' and 'math_test.py' are test files. 'math.py' is not.Step 2: Identify test functions pytest finds in those files
In 'test_math.py', pytest finds 'test_add' (starts with 'test_'). 'add_test' is ignored. In 'math_test.py', pytest finds 'test_subtract'. 'subtract_test' is ignored. 'test_multiply' in 'math.py' is ignored because file is not a test file.Final Answer:
test_add, test_subtract -> Option AQuick Check:
Files and functions follow naming rules = test_add, test_subtract [OK]
- Assuming any function starting with 'test' is found regardless of file name
- Including functions in non-test files
- Confusing function name endings with beginnings
TestExample.py with a function def test_func():. pytest does not run this test. What is the likely cause?Solution
Step 1: Check pytest file discovery rules
pytest finds files starting or ending with 'test' in lowercase and ending with '.py'. 'TestExample.py' starts with uppercase 'T', so it is not recognized.Step 2: Verify function name and other options
Function name 'test_func' is correct. Return statement is not required. pytest does not require test classes to run functions.Final Answer:
File name does not follow pytest discovery rules -> Option CQuick Check:
File name case-sensitive for discovery = D [OK]
- Ignoring case sensitivity in file names
- Thinking function needs return statement
- Assuming test classes are mandatory
mytests.py containing functions def test_one(): and def test_two():. By default, pytest does not find this file. How can you rename the file to follow pytest discovery rules without changing function names?Solution
Step 1: Recall pytest file discovery naming
pytest finds files starting with 'test_' or ending with '_test.py'.Step 2: Check options for correct naming
'test_mytests.py' starts with 'test_' [check]. 'mytestsTest.py' ends with 'Test.py' (uppercase 'T' not matching lowercase 'test'). 'testmytests.py' lacks '_' after 'test'. 'my_test_s.py' does not start with 'test_' or end with '_test.py'. Only the first option works.Final Answer:
Rename to test_mytests.py -> Option DQuick Check:
File starts or ends with 'test' = test_mytests.py [OK]
- Removing 'test' from file name
- Adding 'test' inside word without underscore
- Using camelCase instead of snake_case
Ready to prove it?
Pass the test and this pattern moves unknown
