python nosetest框架有一些命令行选项,可以为测试包含、排除和匹配regex,这些选项可以分别包含/排除和匹配。
然而,它们似乎工作不正常。
[kiran@my_redhat test]$ nosetests -w cases/ -s -v -m='_size'
----------------------------------------------------------------------
Ran 0 tests in 0.001s
OK
[kiran@my_redhat test]$ grep '_size' cases/test_case_4.py
def test_fn_size_sha(self):
nose框架的regex匹配语义有什么问题吗?
Nosetests的-m参数用于匹配目录、文件名、类和函数。(请参阅nose-docs对此参数的解释)在您的情况下,测试文件的文件名(test_case_4.py)与-m匹配表达式(_size)不匹配,因此永远不会打开。
你可能会注意到,如果你强迫nose打开你的测试文件,它将只运行指定的测试:
nosetests -sv -m='_size' cases/test_case_4.py
通常,当我想匹配特定的测试或测试子集时,我会使用--attrib插件,它在默认的nose安装中可用。您可能还想尝试排除与某些模式匹配的测试。
在指定regexp:时尝试删除'='
$ nosetests -w cases/ -s -v -m '_size'
或者保留"="并拼写出--match:
$ nosetests -w cases/ -s -v --match='_size'
Nose可能使用Python的re.match
或类似的东西,这需要在字符串的开头进行匹配。_size
不匹配,因为函数名test_fn_size_sha
不是以正则表达式_size
开头。
尝试使用从一开始就匹配的正则表达式:
nosetests -w cases/ -s -v -m='w+_size'
这对我有用。
nosetests --collect-only test_mytesttest_category --exclude=test_.*Pin
在这里,我排除了所有在测试用例名称中有一个单词"Pin"的测试。
注意:在我的案例中,所有测试用例名称都以test_开头。