Test discovery rules help pytest find your test files and test functions automatically. This saves time and avoids mistakes in running tests.
Test discovery rules in PyTest
pytest discovers tests by looking for: - Files named test_*.py or *_test.py - Functions named test_* inside those files - Classes named Test* without an __init__ method - Methods inside those classes named test_*
Test files must be named with test_ prefix or _test suffix.
Test functions and methods must start with test_ to be discovered.
# File: test_math.py def test_add(): assert 1 + 1 == 2
Test and method starts with test_, so pytest finds this test.# File: math_test.py class TestMath: def test_subtract(self): assert 2 - 1 == 1
# File: example.py def add(): return 1 + 1
This file has two tests that pytest will find and run. The method not_a_test is ignored because it does not start with test_.
# test_sample.py def test_true_is_true(): assert True is True class TestNumbers: def test_one_plus_one(self): assert 1 + 1 == 2 def not_a_test(self): assert False # This will not run # Run pytest in terminal with: pytest
pytest ignores files and functions that do not follow the naming rules.
You can customize discovery rules with command line options or configuration files if needed.
Keeping consistent naming helps pytest find tests quickly and avoids confusion.
pytest finds tests by looking for files, classes, and functions with specific name patterns.
Test files: start or end with test, test functions and methods: start with test_.
Following these rules means pytest runs your tests automatically without extra setup.
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
