有人知道nosetest的-m、-i和-e是如何工作的吗?
我正在尝试让nosetests识别我的测试,但它并没有正确运行我的测试。
我的文件结构如下
Project
+----Foo/
+----__init__.py
+----bar.py
+----test/
+----__init__.py
+----unit/
+----__init__.py
+----bar_test.py
+----functional/
+----__init__.py
+----foo_test.py
在bar_test.py文件中
class BarTest(unittest.TestCase):
def bar_1_test():
...
在foo_test.py文件中
class FooFTest.py
def foo_1_test():
...
使用nosetests的-m、-i、-e选项
- 我需要什么正则表达式才能只运行单元测试(在unit/文件夹下,BarTest类中的测试)
- 我需要什么正则表达式才能只运行功能测试(在functional/文件夹下,FooFTest类中的测试)
我尝试了各种组合,但似乎无法让nosetests稳定地执行我想要的操作。
2 个回答
3
根据你的文件夹结构,你可以很方便地使用 --exclude 选项来运行部分测试。
运行所有测试:
nosetests Project
运行单元测试:
nosetests Project -e functional
运行功能测试:
nosetests Project -e unit
如果你有更复杂的测试需求,我建议你给测试打上标签,然后使用 attrib 包。
6
要只运行 Project/test/unit
目录下的测试,最简单的方法是使用 --where
这个选项。例如:
nosetests --where=Project/test/unit
如果需要,你还可以使用 --match
(简写为 -m
)或者 --exclude
(简写为 -e
)来进一步筛选测试列表。
如果你还是想用正则表达式来选择测试,可以试试这样做(不过没测试过):
nosetests --match='^Foo[\b_\./-])[Tt]est'
从 Project
目录执行这个脚本,会运行所有以 "Foo" 开头并且以 "[Tt]est" 结尾的测试。
一般来说,你可能只想使用 --match
或者 --exclude
中的一个,而不是同时使用这两个。这两个参数都是用来指定要匹配的 函数名称 的模式。你可以通过使用 --ignore-files
来进一步筛选,这样可以忽略整个文件。