I want to run a suite of unit tests in the tests
folder. The basic code is:
suite = unittest.defaultTestLoader.discover('tests')
I want only some of these tests to run, for example test_e1
if file e1.py
is present, test_e5
if e5.py
is present, but not test_e2
and test_e11
(because files e2.py
and e11.py
are missing).
I tried the pattern
argument of the discoverer()
function, which defaults to test_*.py
, but it does not allow enough control for what I need (see How to match specific files with a shell pattern in unit test discoverer? ).
One answer in that thread suggests finding these tests with unittest.TestLoader().loadTestsFromNames
, so I tried this code:
file_list = []
for some_file in some_file_list:
full_filepath = os.path.join(some_dir, some_file)
if not os.path.exists(full_filepath):
continue
file_list.append("tests/test_%s.TestDocs" % some_file)
suite = unittest.TestLoader().loadTestsFromNames(file_list)
print(suite)
The name TestDocs
is the class name that inherits from the unit test:
class TestDocs(unittest.TestCase):
But this shows a list of failed tests such as:
<unittest.suite.TestSuite tests=[<unittest.loader._FailedTest testMethod=tests/test_>]>
How can I run tests only for a certain set of files?
You are passing hybrid file-path/object names to loadTestsFromNames
. Drop the tests
from the name, and ensure that tests
appears on your module search path, either by
sys.path
before calling the method, ortests
to the PYTHONPATH
environment variable before running your tests.