У нас есть большой репозиторий, содержащий несколько пакетов Python(*). Я хочу, чтобы scons запускались py.test в каждом из подкаталогов, а не из корня проекта. Это довольно неприятно. В настоящее время у меня есть это действие со всеми удаленными проверками ошибок:
def runTests (target = None, source = None, env = None):
cmd = which(env['TEST_RUNNER'])
if cmd:
retCode = True
for path in env['TEST_DIR_LIST']:
print 'Doing directory %s:' % (path)
retCode = retCode and subprocess.call([cmd], cwd=path)
env.Exit(retCode)
Который я называю как в файле SConstruct
:
runTestsCmd = env.Command('runTests', None, Action(runTests, "Running tests"))
AlwaysBuild(runTestsCmd)
Alias('test', runTestsCmd)
И в каждом файле SConscript
у меня есть это:
env.Append(TEST_DIR_LIST = ['PackageDirectory'])
Я получаю, что запущен только один экземпляр py.test. Я вижу сообщения «Выполнение каталога X», но не запускаю py.test.
Очевидно, что необходимо не клонировать среду в SConscript или, если среда клонирована, убедиться, что добавление в TEST_DIR_LIST происходит на исходной среде.
Итак, у меня два вопроса:
- Разумный ли это способ делать то, что я хочу?
- Если это так, Что я делаю неправильно? Если это не так, что мне делать?
(*) Да, мы собираемся это изменить. Нет, этого не произойдет достаточно скоро, поэтому мне нужно это.