1

Python 2.7.1 鼻子 1.1.2

我已经阅读了相关的问题,但它们没有帮助。我有如下所示的测试用例

例如在my_tests.py

def load_tests(loader, tests, pattern):
    return unittest.TestSuite(MyTest() for scenario_name in list)

我有几个带有 load_tests 方法的模块,我使用 unittest 运行它们,如下所示

test_loader = unittest.defaultTestLoader.discover( '.', my_pattern_var); 
test_runner = unittest.TextTestRunner();
result = test_runner.run(test_loader)
sys.exit(not result.wasSuccessful())

如果我用等效的鼻子代码替换它,nose.main()它会找到 0 个测试。

问题

  1. 如何让鼻子发现测试?实际上并没有失去使用 python unittest 运行我的测试的能力。我想使用 NOSE 作为 python unittest 的插件来获取三叶草和覆盖率报告
  2. 如何让它运行仅匹配特定模式的测试?
4

1 回答 1

2

抱歉这么晚才回来。除了我们将所有测试模块命名为 integration_foo.py 之外,我们基本上做了与您在此处尝试为控制台脚本做的相同的事情。无论如何,解决方案很简单,只需以编程方式运行即可。

import re
from nose.config import Config

TEST_REGEX = '(?:^|[\\b_\\./-])[Ll]oad'

# Change the test match pattern
nose_config = Config()
nose_config.testMatch = re.compile(TEST_REGEX)

# Specify the use of a Plugin Manager, load plugins
nose_config.plugins = BuiltinPluginManager()
nose_config.plugins.loadPlugins()

run(config=nose_config)

所以这个基本选项将鼻子正在寻找的正则表达式模式从所有标记为测试的方法更改为所有标记为负载的方法。然而,这并不是你完全运行鼻子所需要的,还需要获取某种解析器对象或将一组特定的 argv 传递给鼻子。

如果您想传递一组特定的 argv 以由鼻子解析,只需执行

run(config=nose_config, argv=["foo", "bar"])

否则,您可能可以在命令行中指定鼻子特定的参数,只要您不输入任何时髦的鼻子就不会出错。

在https://github.com/nose-devs/nose/tree/master/nose查看鼻子源代码,我在其中获得了编写此代码所需的所有信息

于 2013-04-24T06:10:25.207 回答