【问题标题】:python nosetests equivalent of unittest Testsuite in the test filepython nosetests 等效于测试文件中的 unittest Testsuite
【发布时间】:2013-04-28 22:27:34
【问题描述】:

在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 文件中 运行哪些测试?
谢谢。
附言如果有一种方法可以通过nosetest 配置文件指定测试,而不会强制将所有测试都写在一行上,我也会对它开放,作为第二种选择

【问题讨论】:

    标签: python nosetests


    【解决方案1】:

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

    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 解释器从命令行运行它,而不是通过nose。如果您有其他鼻子配置,您可能还需要以编程方式传递它。

    【讨论】:

      【解决方案2】:

      如果我对您的问题的理解正确,您有几个选择:

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

      希望对您有所帮助。

      【讨论】:

      • 谢谢,但很遗憾没有。我可以通过将方法名称从 tstXXXX 更改为 testXXXX 来完成类似的事情,它们会自动运行。我希望能够创建自定义套件:因为这将是一种更有效的方式来运行某组测试而不是运行另一组测试。
      • 好的,谢谢。我添加了更多选项,请检查是否有帮助。
      • 谢谢,测试套件看起来很有希望。如果有人可以提供一个伟大的工作示例
      猜你喜欢
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 2014-07-05
      • 1970-01-01
      • 2023-03-21
      • 2015-01-17
      • 1970-01-01
      • 2023-03-31
      相关资源
      最近更新 更多