有人知道nosetest的-m、-i和-e是如何工作的吗?

11 投票
2 回答
5028 浏览
提问于 2025-04-17 05:53

我正在尝试让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 来进一步筛选,这样可以忽略整个文件。

撰写回答