Scons запускает py.test в разных подкаталогах

У нас есть большой репозиторий, содержащий несколько пакетов 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 происходит на исходной среде.

Итак, у меня два вопроса:

  1. Разумный ли это способ делать то, что я хочу?
  2. Если это так, Что я делаю неправильно? Если это не так, что мне делать?

(*) Да, мы собираемся это изменить. Нет, этого не произойдет достаточно скоро, поэтому мне нужно это.


person Sardathrion - against SE abuse    schedule 22.11.2012    source источник


Ответы (1)


Проблема в строке:

retCode = retCode and subprocess.call([cmd], cwd=path)

subprocess.call возвращает 0 (что оценивается как False) в случае успеха. Вам нужно вставить not или, возможно, сделать правильную проверку следующим образом:

retcode = subprocess.call([cmd], cwd=path)
if retcode != 0:
     print ("failed ...")
     break  # or not break if you want to continue anyway
person hpk42    schedule 23.11.2012
comment
Конечно. Я понял это поздно ночью. Благодарить! - person Sardathrion - against SE abuse; 23.11.2012