Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python单元测试测试套件选择特定测试_Python_Unit Testing_Test Suite - Fatal编程技术网

如何使用Python单元测试测试套件选择特定测试

如何使用Python单元测试测试套件选择特定测试,python,unit-testing,test-suite,Python,Unit Testing,Test Suite,我将Python单元测试代码组织如下: Maindir | |--Dir1 | | | |-- test_A.py | |-- test_B.py | |-- test_C.py | |--Dir2 | ... 我想你明白了。在每个Dirx目录中,我都有一个名为suite.py的文件,它将给定目录中的测试集合在一起(因此您可以选择特定测试,省略其他测试,等等)。这些文件看起来如下(在选择所有测试的情况下,它们也可能只选择一个

我将Python单元测试代码组织如下:

Maindir
   |
   |--Dir1
   |  |
   |  |-- test_A.py
   |  |-- test_B.py
   |  |-- test_C.py
   |
   |--Dir2
       | ...
我想你明白了。在每个
Dirx
目录中,我都有一个名为
suite.py
的文件,它将给定目录中的测试集合在一起(因此您可以选择特定测试,省略其他测试,等等)。这些文件看起来如下(在选择所有测试的情况下,它们也可能只选择一个子集测试)(也考虑测试单元测试):

import test_A
import test_B
import test_C

suite1 = test.TestSuite()
suite1.addTests(test.TestLoader().loadTestsFromTestCase(test_A.MyTest))
suite1.addTests(test.TestLoader().loadTestsFromTestCase(test_B.MyTest))
suite1.addTests(test.TestLoader().loadTestsFromTestCase(test_C.MyTest))
Maindir
目录中的主运行程序
execall.py
,如下所示:

from Dir1.suite import suite1
from Dir2.suite import suite2

suite_all = test.TestSuite([
    suite1,
    suite2])

if __name__ == '__main__':
    test.main(defaultTest='suite_all')
现在,我可以执行以下操作:

  • 运行所有测试:“execall.py”(如文档所示)
  • 运行特定套件:
    execall.py suite1
    (如文档所示)
但是我怎么能只运行一个特定的测试呢?如何运行特定文件的所有测试?我尝试了以下操作,但没有成功,出现了相同的错误:
'TestSuite'对象没有属性“xxx”

execall.py suite1.test_A
execall.py suite1.test_A.test1
execall.py test_A
execall.py test_A.test1

execall.py-h
给出了如何在测试用例中运行单个测试或测试的非常具体的示例,但在我的例子中,这似乎不起作用。

一种方法是编写自己的测试加载程序。我强烈建议采用中的机制

基本思想是:

  • 实现一个例程,该例程返回一个
    unittest.TestSuite()
    对象以及包含所需测试的所有Python模块。这可以通过扫描目录中的
    test_XXX.py
    文件来完成(只需通过
    startswith('test')
    、regexp等检查它们)

  • 子类
    unittest.TestLoader
    和重写
    loadestsfromname(self、name、module)
    这将使用步骤1中生成的testsuite。例如,在烧瓶中:

     for testcase, testname in find_all_tests(suite):
         if testname == name or \
             testname.endswith('.' + name) or \
             ('.' + name + '.') in testname or \
             testname.startswith(name + '.'):
             all_tests.append(testcase)
    
    这允许按Python模块名称、测试套件(测试类)名称或仅按测试用例名称加载测试


  • 但这是一个更大的扩展,使用不同的框架。。。太超出范围了不,这是一个开源的、BSD许可的框架,所以只需要从那里获取您需要的东西。事实上,我在自己的框架中使用了一点修改过的Flask的testsuite方法。但我似乎需要
    werkzeug
    来让它工作,或者不是真的?Flask确实需要werkzeug,但我说的是使用它的一小部分,一种机制和想法,一个概念,一种方式,…-你可以说,测试是如何在烧瓶中进行的。在最简单的情况下,您必须采用testsuite中的单个
    \uuuuu init\uuuuuu.py
    。阅读其他程序员的代码可以更快地提高技能。Armin Ronacher,《Flask》的作者是Python界非常知名的人物,从他的代码中学习是一个非常愉快的过程。好的,我想我会尝试一下。谢谢