当前位置: 首页 > 面试题库 >

如何在目录中运行所有Python单元测试?

闻人升
2023-03-14
问题内容

我有一个目录,其中包含我的Python单元测试。每个单元测试模块的格式均为 test _ *。py 。我正在尝试制作一个名为
all_test.py
的文件,您猜对了,它将以上述测试形式运行所有文件并返回结果。到目前为止,我已经尝试了两种方法。都失败了。我将展示这两种方法,并希望那里的人知道如何正确地正确执行此操作。

对于我的第一次英勇尝试,我想:“如果仅将所有测试模块导入文件中,然后将其命名为unittest.main()doodad,它将起作用,对吗?”
好吧,原来我错了。

import glob
import unittest

testSuite = unittest.TestSuite()
test_file_strings = glob.glob('test_*.py')
module_strings = [str[0:len(str)-3] for str in test_file_strings]

if __name__ == "__main__":
     unittest.main()

这没有用,我得到的结果是:

$ python all_test.py

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK

对于第二次尝试,我还是可以,也许我会尝试以一种更加“手动”的方式进行整个测试。所以我尝试在下面这样做:

import glob
import unittest

testSuite = unittest.TestSuite()
test_file_strings = glob.glob('test_*.py')
module_strings = [str[0:len(str)-3] for str in test_file_strings]
[__import__(str) for str in module_strings]
suites = [unittest.TestLoader().loadTestsFromName(str) for str in module_strings]
[testSuite.addTest(suite) for suite in suites]
print testSuite

result = unittest.TestResult()
testSuite.run(result)
print result

#Ok, at this point I have a result
#How do I display it as the normal unit test command line output?
if __name__ == "__main__":
    unittest.main()

这也没有用,但是似乎太接近了!

$ html" target="_blank">python all_test.py 
<unittest.TestSuite tests=[<unittest.TestSuite tests=[<unittest.TestSuite tests=[<test_main.TestMain testMethod=test_respondes_to_get>]>]>]>
<unittest.TestResult run=1 errors=0 failures=0>

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK

我似乎有一套类似的套件,可以执行结果。我有点担心它说我只有一个事实run=1,似乎应该是这样run=2,但这是进步。但是如何传递结果并将其显示给main?还是我基本上如何使其工作,以便我可以运行该文件,然后在此目录中运行所有单元测试?


问题答案:

使用Python
2.7和更高版本,您无需编写新代码或使用第三方工具即可完成此操作。内置了通过命令行执行递归测试的功能。__init__.py在您的测试目录中放置:

python -m unittest discover <test_directory>
# or
python -m unittest discover -s <directory> -p '*_test.py'

您可以在python 2.7 或python
3.x
unittest文档中阅读更多内容。



 类似资料:
  • 问题内容: 我需要能够通过在Linux shell中键入一行来运行当前目录中的所有测试。在某些目录中,这可以正常工作。但是在其他情况下,当我键入“ nosetests”时,则不会运行任何测试。如果我分别要求进行测试,则将运行这些测试,但我需要它们全部自动运行。这是不起作用的目录之一: 当我在父目录中运行“ nosetests”时,将运行某个子目录中的所有测试,但不会运行/ extwebserver

  • 问题内容: 我正在使用一个简单的基于单元测试的测试运行程序来测试我的Django应用程序。 我的应用程序本身配置为在settings.py中使用基本记录器,方法是: 在我的应用程序代码中使用: 但是,在运行单元测试时,我想禁用日志记录,以免混乱我的测试结果输出。有没有一种简单的方法可以以全局方式关闭日志记录,以便在运行测试时,特定于应用程序的记录器不会将内容写到控制台上? 问题答案: 将禁用所有级

  • 问题内容: 我正在开发一个具有几个源文件的Python模块,每个文件都有自己的源于unittest的测试类。考虑目录结构: 要测试Foo.py或Bar.py,我将其添加到Foo.py和Bar.py源文件的末尾: 并在任一源上运行Python,即 理想情况下,我将让“ test.py”自动搜索dirBar以查找任何unittest派生类,并调用一次“ unittest.main()”。在实践中最好的

  • 许多标准库不使用类名,如何从命令行运行单个测试用例或将其添加到测试套件中? 这里提出了类似的问题,但所有解决方案都假设测试用例驻留在具有有效类名的文件中。 从unittest运行单个测试。通过命令行测试用例

  • 我通过以下命令克隆了Guava的存储库: 不幸的是,我收到了以下错误(在这里可以查看整个输出)。 如何运行Guava的单元测试?

  • 问题内容: 我正在尝试编写一个简单的Python脚本,它将所有子目录中的index.tpl复制到index.html(有一些例外)。 通过尝试获取子目录列表,我陷入了困境。 问题答案: 我对各种功能进行了 速度测试 ,以将 完整路径 返回到所有当前子目录。 tl; dr: 始终使用: 奖励:使用,您也可以只使用而不是来获取文件夹名称。 该函数(以及下面的所有其他函数)将不会使用 自然排序 。这意味

  • 尝试设置远程代码欺骗单元测试在PhpStorm中的Yii2项目。 使用SSH,我可以登录到服务器,转到我的Yii2项目的根目录并运行:

  • 问题内容: 我的项目中有一个包含一堆JUnit测试的目录。到目前为止,我已经为每个单元测试使用了单独的目标。例如: 此方法要求我每次添加单元测试时都更改构建文件。 我希望能够使用单个Ant构建器目标来运行项目中的所有单元测试。 有可能吗? 问题答案: 是的,您需要查看文件集标记,例如: 重要的部分是使用文件集和通配符/通配符模式来匹配测试名称。有关junit任务的完整文档,包括以下示例: http