3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2024-11-22 14:49:24 +01:00

test-runner: extend -S option

The -S/--sub-tests option allows the user to specify a test file
from inside an autotest. Inside this file there may also be many
test functions. This option is being extended to allow running
a single test function inside a test file. For example:

* Runs all test functions inside connection_test.py *
./test-runner -A some_test -S connection_test

* Runs only connection_test.py test_connect_success() *
./test-runner -A some_test -S connection_test.test_connect_success
This commit is contained in:
James Prestwood 2021-08-17 09:44:57 -07:00 committed by Denis Kenzior
parent 42fe6c5a15
commit fd43a3938f

View File

@ -1139,6 +1139,13 @@ def start_test(ctx, subtests, rqueue):
# Iterating through each python test file # Iterating through each python test file
for test in subtest: for test in subtest:
limit_funcs = []
if ctx.args.sub_tests:
for i in ctx.args.sub_tests:
if len(i.split('.')) == 2:
limit_funcs.append(i.split('.')[1])
# Iterating through individual test functions inside a # Iterating through individual test functions inside a
# Test() class. Due to the nature of unittest we have # Test() class. Due to the nature of unittest we have
# to jump through some hoops to set up the test class # to jump through some hoops to set up the test class
@ -1164,21 +1171,29 @@ def start_test(ctx, subtests, rqueue):
result = TestResult() result = TestResult()
try: try:
skip = len(limit_funcs) > 0 and func not in limit_funcs
# Set up class only on first test # Set up class only on first test
if index == 0: if index == 0:
if not skip:
dbg("%s\n\t%s RUNNING" % (file, str(func)), end='') dbg("%s\n\t%s RUNNING" % (file, str(func)), end='')
t.setUpClass() t.setUpClass()
else: else:
if not skip:
dbg("\t%s RUNNING" % str(func), end='') dbg("\t%s RUNNING" % str(func), end='')
sys.__stdout__.flush() sys.__stdout__.flush()
if not skip:
# Run test (setUp/tearDown run automatically) # Run test (setUp/tearDown run automatically)
result = t() result = t()
# Tear down class only on last test # Tear down class only on last test
if index == len(tlist) - 1: if index == len(tlist) - 1:
t.tearDownClass() t.tearDownClass()
if skip:
continue
except unittest.SkipTest as e: except unittest.SkipTest as e:
result.skipped.append(t) result.skipped.append(t)
except Exception as e: except Exception as e:
@ -1256,9 +1271,13 @@ def pre_test(ctx, test, copied):
pruned = [] pruned = []
for s in subtests: for s in subtests:
# Allow test name both with and without the extension file = s
if s in ctx.args.sub_tests or os.path.splitext(s)[0] in ctx.args.sub_tests: # Handle <file>.<test function> format
pruned.append(s) if '.' in s:
file = s.split('.')[0] + '.py'
if file == s:
pruned.append(file)
subtests = pruned subtests = pruned