运行 一些只在特定环境下测试

run some tests only in specific environment

我正在编写一些只在特定环境下才有意义的测试,例如如果主机具有支持 Nvidia CUDA 的 GPU,或者它可能取决于特定于某些环境的其他资源。

如何使用 Nosetests 指定它?我的最佳选择是 Nosetests 列出跳过的测试和跳过的原因。

您可以 tag tests 使用 nose.plugins.attrib 中的 @attr 装饰器,只有在设置了给定属性时才需要 运行。

@attr(has_cuda_gpu=1)
def test_something(self):
    pass

然后创建一个测试 运行ner 脚本来配置这些属性。如果满足您的条件,请添加这些属性:

ATTRS="some_other_condition=1"
if [ check_cuda_gpu ]; then
    ATTRS="$ATTRS,has_cuda_gpu=1"
fi
nosetests -a $ATTRS

当你运行你的测试时,has_cud_gpu没有被添加到属性中,那么那些用这个条件装饰的测试将被跳过。

您通常可以使用标准 unittest library. At the very start of your tests you can always check for prerequisites with decorators (preferred) or by raising SkipTest 例外来完成。

import unittest 

class MyTestCase(unittest.TestCase):

    @unittest.skipIf(not have_gpu(),
                     "no gpu on this system")
    def test_gpu_performance(self):
        pass

    def test_something_else(self):
        if not have_gpu():
            raise unittest.SkipTest("no gpu")