【问题标题】:Nose unable to find tests in ubuntu鼻子在ubuntu中找不到测试
【发布时间】:2009-09-21 21:55:22
【问题描述】:

Nose 是否有任何原因无法在 Ubuntu 9.04 中找到测试?

我将鼻子 0.11.1 与 python 2.5.4 一起使用。
只有当我明确指定文件名时,我才能运行测试。 如果我没有指定它刚才说的文件名,0 个测试

同一个项目在我的 Mac 上运行测试很好,所以我很难过!

【问题讨论】:

  • 当您希望运行测试时您输入的究竟是什么命令?
  • “nosetests --with-gae”或只是“nosetests”。我也尝试过“nosetests 测试”,其中“测试”是我的测试文件目录的名称。所有命令在 Mac 上都能完美运行,两台机器上都没有更改鼻子配置。如果我在测试目录的 init.py 中导入测试文件并运行“nosetests 测试”,我在 ubuntu 中工作。但是,这是不可持续的。
  • 尝试运行nosetests 和一些-v 的... -vv 通常会给我足够的信息来解决我的问题。
  • 你能告诉我们一些目录结构吗?在您运行命令的目录中,子目录是什么,测试在哪个目录中?测试目录是否在 .py 下的 init 下?列出一些您希望在测试目录中运行的文件。
  • 我不能让你们访问 repo,测试驻留在“tests”目录中,它确实有一个空的 init.py。如果我在 init.py 中导入每个测试文件并运行“nosetests 测试”,那么一切都可以在 ubuntu 上运行。但是每当我添加新测试时,我都无法继续更新 init.py。我想知道为什么鼻子在 Mac 和 Ubuntu 上的行为不同。

标签: python nose


【解决方案1】:

我遇到了同样的问题。我的测试在 Windows 中运行良好,但在 Ubuntu 中却不行。

在 Ubuntu 中,如果你运行:

nosetests -vv --collect-only

您可能会看到它正在跳过您的测试文件,因为它是一个可执行文件: _Tools/LintControlFiles/test_HgLint.py 是可执行的;跳过

为了让鼻子考虑可执行文件,像这样运行它:

nosetests --exe

【讨论】:

  • 我有一些测试说,这些文件将被跳过,因为它们是可执行文件,然后它仍然会进入并使用它们。而在同一项目的另一个应用程序中,它确实会跳过它们。我花了很长时间才发现 A)缺少测试,B)nosetest 而不是 django 有问题,C)--exe 是解决方案!
  • 这个修复就像一个魅力!我已经尝试了很长时间,您的 --exe 提交了它!
  • 虽然我们的 docker 容器在 linux 中运行,但我在 Windows 上工作。所以我遇到了这个问题并按照@rocky 的回答进行了修复。我也不确定在 Windows 中克隆这个 repo 是否是所有文件都可执行的原因?猜猜这是一个与 Windows 相关的问题。
【解决方案2】:

总是让我知道nose 的另一件事是它不会在可执行文件中运行测试。我不确定为什么这会对 Mac/Ubuntu 产生影响,但值得一试。

确保脚本没有以某种方式在 Mac 上获得 chmod +x'd……如果有,请使用 chmod -x $(find tests/ -name '*.py') 修复它们。

【讨论】:

  • 仍然无法正常工作...问题出在 ubuntu 上,而不是在 mac 上。
  • Nose 默认情况下不会在 Windows 平台上的可执行模块中查找测试...在 mac/ubuntu 上,他必须使用 --noexe 开关才能发生这种情况
  • 查看代码告诉我可执行文件在 windows 和 IronPython 上被跳过except。我遇到了这个问题,使用 --exe 对我有用。
  • 谢谢!这一直困扰着我几个小时!现在nose 终于运行了我所有的测试,而不必在命令行上一一命名。
  • 这解决了我的鼻子问题。谢谢。
【解决方案3】:

我可以确认,正如@david-wolever 所说,它们不能在 Ubuntu 上可执行。 运行

nosetests -vv --collect-only 

查看检查了哪些文件的完整详细信息。

【讨论】:

    【解决方案4】:

    一些相关的东西,如果你在一个目录下运行测试,即

    nosetests ... tests/
    

    其中 tests 是包含我的测试的文件夹的名称,并且在 .py 模块之一中具有单独的 python 测试函数...您的函数必须以“测试”开头,以便鼻子测试将其识别为您想要的测试跑步。

    例如:

     def test_something():
        ...
    

    nosetests 在这个目录中执行时会运行这个函数,而

     def somethin_to_test():
        ...
    

    不会。

    【讨论】:

      【解决方案5】:

      这种行为几乎可以肯定是因为您的文件没有按照鼻子的测试匹配行为命名。来自the nose docs

      nose 自动从其工作目录(默认为当前工作目录)中找到的 python 源文件、目录和包收集测试。 任何与 testMatch 正则表达式匹配的 python 源文件、目录或包(默认情况下:(?:^|[b_.-])[Tt]est)都将被收集为测试(或源用于收集测试)。

      重点是我的。

      一些匹配的示例名称:

      • TestFoo.py
      • Foo-Test.py
      • Foo_Test.py
      • Foo.Test.py(注意这个会尝试导入 Foo,如果不能,会引发异常)

      看起来匹配但实际上不匹配的名称:

      • FooTest.py

      如果你只是重命名你的文件,你应该很高兴。


      更新:我无法从您发布的详细信息中得知,但您的测试目录可能缺少 __init__.py 文件?

      ...确保您的“测试”目录实际上是模块(它们有一个空的__init__.py 文件)。

      【讨论】:

      • 会尝试...问题是,在我的 Mac 上提取的相同文件...不是在所有平台上都使用相同的匹配器吗?
      • 您的 NOSE_TESTMATCH 环境变量可能设置不同,或者查看nose/config.py。 code.google.com/p/python-nose/wiki/FindingAndRunningTests
      • 当我在 init.py 中导入测试文件并指定要运行的模块时,测试工作。不然。但是,即使没有明确指定目录,完全相同的目录和命令在我的 Mac 上也能正常工作。还是想不通。
      • 第一个链接('the nose docs')重定向到 readthedocs 并且不存在。
      • 我在测试模块目录中缺少 init.py 文件。这个修复就像一个魅力!
      【解决方案6】:

      使用-all-modules,它会找到所有的测试。

      nosetests --all-modules ./tests

      【讨论】:

        【解决方案7】:

        查看nose的源代码后,特别是selector.py文件,如果你看看发生了什么,

        https://github.com/nose-devs/nose/blob/master/nose/selector.py#L129

        在检查我们是否调用了wantFile 时,self.matches 被调用,然后它会针对match 进行regex 搜索,这就是您传递的testMatch

        当您稍后检查(以及整个该文件)时,会出现问题,

        https://github.com/nose-devs/nose/blob/master/nose/selector.py#L152

        它再次针对 wantFunction 运行相同类型的检查。

        这意味着,如果您的包、容器 pyfile 和实际测试类/函数具有不同的结构,您将不得不创建一个疯狂复杂的正则表达式来匹配每个阶段的结构。

        对我来说,当我了解到这一点时,我选择在我的包、容器和测试函数前面加上一个共同的位,即

        setests ├── __init__.py ├── setest_area1.py └──── def setest_someblock(): ...

        然后我的nose 命令就像,

        nose --testMatch="setest"

        然后这会过滤我期望的工作方式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-21
          • 2012-08-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多