繁体   English   中英

测试套件单元测试

[英]Test Suite unittest

我有一个测试套件,我正在尝试使其与我创建的测试一起使用。 如果我单独运行它们,但我想在测试套件中全部运行它们,则可以进行测试。 下面的代码显示了创建的测试套件:

import unittest

def suite():
    modules_to_test = ('TestAbsoluteMove', 'TestContinuousMove') # and so on
    alltests = unittest.TestSuite()
    for module in map(__import__, modules_to_test):
        alltests.addTest(unittest.findTestCases(module))
    return alltests

if __name__ == '__main__':
    unittest.main(defaultTest='suite')

我已将此代码放入测试代码中以与套件链接:

class AbsoluteMoveTestSuite(unittest.TestSuite):

def makeAbsoluteMoveTestSuite():
    suite = unittest.TestSuite()
    suite.addTest(TestAbsoluteMove("BasicAbsolutePan"))
    suite.addTest(TestAbsoluteMove("VerifyAbsolutePan"))
    suite.addTest(TestAbsoluteMove("VerifyAbsoluteTilt"))
    suite.addTest(TestAbsoluteMove("VerifyAbsolutePanSpeed"))
    suite.addTest(TestAbsoluteMove("VerifyAbsoluteTiltSpeed"))
    return suite

def suite():
    return unittest.makeSuite(TestAbsoluteMove)

产生的错误表明没有名为“ TestAbsoluteMove”和“ TestContinuousMove”的模块。 有谁知道如何使此代码正常工作?

谢谢

这就是我创建测试套件的方式(loadTestFromTestCase自动检测您的测试)

def suite():
    """ returns all the testcases in this module """
    return TestLoader().loadTestsFromTestCase(AbsoluteMoveTestSuite)

并立即运行它们,我有一个包含所有子套件的套件(请注意所有导入,您需要先导入它们,然后才能在新模块中使用它们)

import sys
import unittest

import test.framework.asyncprocess as a
import test.framework.easyconfig as e
import test.framework.modulegenerator as mg
import test.framework.modules as m
import test.framework.filetools as f
import test.framework.repository as r
import test.framework.robot as robot
import test.framework.easyblock as b
import test.framework.variables as v
import test.framework.github as g
import test.framework.toolchainvariables as tcv
import test.framework.toolchain as tc
import test.framework.options as o
import test.framework.config as c


# call suite() for each module and then run them all
SUITE = unittest.TestSuite([x.suite() for x in [r, e, mg, m, f, a, robot, b, v, g, tcv, tc, o, c]])

# uses XMLTestRunner if possible, so we can output an XML file that can be supplied to Jenkins
xml_msg = ""
try:
    import xmlrunner  # requires unittest-xml-reporting package
    xml_dir = 'test-reports'
    res = xmlrunner.XMLTestRunner(output=xml_dir, verbosity=1).run(SUITE)
    xml_msg = ", XML output of tests available in %s directory" % xml_dir
except ImportError, err:
    sys.stderr.write("WARNING: xmlrunner module not available, falling back to using unittest...\n\n")
    res = unittest.TextTestRunner().run(SUITE)

鼻子使这种事情变得轻而易举。 它将自动检测您的测试并将其作为套件运行。 (您还可以通过向其传递一个标志来运行特定的测试。)

TestAbsoluteMove是一个类,它需要来自某个地方。 无论在哪里定义AbsoluteMoveTestSuite类,都需要导入TestAbsoluteMove。

像这样使用unittest有点unittest 我非常建议您按照Alison的建议看一下nose或者使用我个人最喜欢的Python测试工具py.test 只需按照特定的命名约定创建函数,然后撕开它! 整个xUnit并不完全适合Python领域。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM