Scons在不同的子目录中运行py.test

时间:2012-11-22 13:13:34

标签: python scons pytest

我们有一个包含多个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中克隆环境,或者如果克隆了env,请确保在原始环境中添加TEST_DIR_LIST。

所以,我的问题有两个:

  1. 这是一种明智的方式来做我想做的事吗
  2. 如果是,我做错了什么?如果不是,我应该做什么
  3. (*)是的,我们正在考虑改变这一点。不,它不会很快发生,所以我确实需要上述内容。

1 个答案:

答案 0 :(得分: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