2

在nosetests 中,我知道您可以通过nosetests 配置文件指定要运行的测试,如下所示:

[nosetests]
tests=testIWT_AVW.py:testIWT_AVW.tst_bynd1,testIWT_AVW.py:testIWT_AVW.tst_bynd3

然而,当添加大量测试时,上面的内容看起来很混乱,并且变得更难维护,尤其是在无法使用换行符的情况下。我发现能够使用 unittests TestSuite 功能指定要运行的测试要方便得多。例如

def custom_suite():

    suite = unittest.TestSuite()
    suite.addTest(testIWT_AVW('tst_bynd1'))
    suite.addTest(testIWT_AVW('tst_bynd3'))
    return suite
if __name__=="__main__":

    runner = unittest.TextTestRunner()
    runner.run(custom_suite())

问题:如何我的 .py 文件中指定哪些测试应该由 nosetests 运行?
谢谢。
PS如果有一种方法可以通过nosetest配置文件指定测试而不强制所有测试都写在一行上,我也会对它开放,作为第二种选择

4

2 回答 2

5

我不完全确定您是要以编程方式还是从命令行运行测试。无论哪种方式,这都应该涵盖:

import itertools

from nose.loader import TestLoader
from nose import run
from nose.suite import LazySuite

paths = ("/path/to/my/project/module_a",
         "/path/to/my/project/module_b",
         "/path/to/my/project/module_c")

def run_my_tests():
    all_tests = ()
    for path in paths:
        all_tests = itertools.chain(all_tests, TestLoader().loadTestsFromDir(path))
    suite = LazySuite(all_tests)
    run(suite=suite)

if __name__ == '__main__':
    run_my_tests()

请注意,nose.suite.TestLoader对象有许多不同的方法可用于加载测试。

您可以从其他代码调用该run_my_tests方法,也可以使用 python 解释器从命令行运行它,而不是通过鼻子。如果您有其他鼻子配置,您可能还需要以编程方式传递它。

于 2013-07-23T14:37:30.930 回答
1

如果我正确理解您的问题,您可以在这里有几个选择:

  • 您可以使用特殊的鼻子装饰器标记您的测试:istestnottest. 查看文档
  • 你可以用标签标记测试
  • 您可以在测试套件中加入测试用例。我自己没有使用过它,但似乎您必须覆盖鼻子的默认测试发现以尊重您的测试套件(请参阅文档

希望有帮助。

于 2013-04-28T22:31:33.127 回答