【问题标题】:Unit testing: How can i import test classes dynamically and run?单元测试:如何动态导入测试类并运行?
【发布时间】:2015-07-28 16:40:40
【问题描述】:

我正在编写一个简单的脚本来运行和测试我的代码。如何动态导入并运行我的测试类?

【问题讨论】:

  • 我不确定你在这里问什么。如果您有解决方案,则可以先将其作为问题发布,然后自己回答。
  • 欢迎来到 SO!对不起,我不明白你的问题。你能澄清一下吗?预期的结果是什么?你在看什么?
  • 对不起@AIG。我希望我已经澄清了这个想法。

标签: python unit-testing testing automated-tests


【解决方案1】:

这是我发现的用于导入和动态运行我的测试类的解决方案。

import glob
import os
import imp
import unittest

def execute_all_tests(tests_folder):
    test_file_strings = glob.glob(os.path.join(tests_folder, 'test_*.py'))
    suites = []
    for test in test_file_strings:
        mod_name, file_ext = os.path.splitext(os.path.split(test)[-1])
        py_mod = imp.load_source(mod_name, test)
        suites.append(unittest.defaultTestLoader.loadTestsFromModule(py_mod))
    text_runner = unittest.TextTestRunner().run(unittest.TestSuite(suites))

【讨论】:

  • 您不需要这样做,因为它正在重新发明已有的东西。
【解决方案2】:

安装pytest,并使用如下命令运行测试:

py.test src

就是这样。 Py.test 将加载所有test_*.py 文件,在其中找到所有def test_* 调用,并为您运行每个调用。

董事会无法回答您的问题,因为它位于“为什么水是湿的?”领土;所有测试台都带有自动执行代码片段执行操作的运行器,因此您只需阅读教程即可开始使用。

major 用于编写自动测试的道具;他们让你超过了所有程序员的 75%。

【讨论】:

    【解决方案3】:

    这个解决方案太简单了,执行我想要的。

    import unittest
    
    def execute_all_tests(tests_folder):
        suites = unittest.TestLoader().discover(tests_folder)
        text_runner = unittest.TextTestRunner().run(suites)
    

    【讨论】:

    • 社区注意 - 不正确的答案被赞成,在这里。是的,这是紧随其后的,但它不是 DRY,因为所有这些 Python 自动测试设备都有自动运行器。仅当您需要使用默认 runner 的最高级别行为时才使用此代码;我想不出原因。
    猜你喜欢
    • 2010-11-16
    • 1970-01-01
    • 2013-02-04
    • 2011-04-24
    • 2018-01-12
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多