Test Suite unittest - PullRequest
       17

Test Suite unittest

1 голос
/ 21 января 2010

У меня есть набор тестов, и я пытаюсь заставить его работать с созданными мною тестами. Тест работает, если я запускаю их по отдельности, но я хочу запустить их все в тестовом наборе. Код ниже показывает созданный набор тестов:

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 ». Кто-нибудь знает, как заставить этот код работать?

Спасибо

Ответы [ 4 ]

2 голосов
/ 01 августа 2013

так я создаю свой набор тестов (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)
2 голосов
/ 21 января 2010

TestAbsoluteMove - это класс, и он должен прийти откуда-то. Где бы ни был определен ваш класс AbsoluteMoveTestSuite, вам необходимо импортировать TestAbsoluteMove.

2 голосов
/ 21 января 2010

Нос делает подобные вещи легкими. Он автоматически обнаружит ваши тесты и запустит их как набор. (Вы также можете запустить определенные тесты, передав ему флаг.)

0 голосов
/ 21 января 2010

unittest немного неудобно использовать, как это. Я очень рекомендую, чтобы вы следовали совету Элисон, взглянув на nose или воспользовались моим любимым инструментом тестирования Python py.test . Просто создайте функции, следуя определенному соглашению об именах, и дайте ему разорваться! Вся вещь xUnit не совсем вписывается в область Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...