TestSuite с тестами и тест-кейсами - PullRequest
5 голосов
/ 09 августа 2011

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

Как мне это сделать?

Например, здесь есть suitecase (suiteFilter.py), который я хочу добавить:

import testFilter1
import testFilter2
import unittest
import sys

def suite():
    return unittest.TestSuite((\
        unittest.makeSuite(testFilter1.TestFilter1),
        unittest.makeSuite(testFilter2.TestFilter2),
        ))


if __name__ == "__main__":
    result = unittest.TextTestRunner(verbosity=2).run(suite())
    sys.exit(not result.wasSuccessful())

И структура тестового набора(Invoice.py):

from selenium import selenium
import unittest, time, re
from setup_tests import filename, fileForNrTest, username, password, server_url
fileW=open(filename,'a')


class TestInvoice(unittest.TestCase):

    def setUp(self):
        self.verificationErrors = []
        self.selenium = selenium("localhost", 4444, "*firefox", server_url)
        self.selenium.start()

    def test_invoice(self):
        sel = self.selenium
        [...] 

    def tearDown(self):
        self.selenium.stop()
        self.assertEqual([], self.verificationErrors)


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

Спасибо!

1 Ответ

12 голосов
/ 09 августа 2011

Вы можете предоставить некоторую дополнительную информацию, такую ​​как структура вашей программы / тестовых случаев и наборов.Я делаю это, определяя набор () для каждого модуля.Итак, я сказал для модуля UserServiceTest:

def suite():
    """
        Gather all the tests from this module in a test suite.
    """
    test_suite = unittest.TestSuite()
    test_suite.addTest(unittest.makeSuite(UserServiceTest))
    return test_suite

if __name__ == "__main__":
    #So you can run tests from this module individually.
    unittest.main()   

Затем у меня есть основной тест для каждого пакета:

def suite():
"""
    Gather all the tests from this package in a test suite.
"""
    test_suite = unittest.TestSuite()
    test_suite.addTest(file_tests_main.suite())
    test_suite.addTest(userservice_test.suite())
    return test_suite


if __name__ == "__main__":
    #So you can run tests from this package individually.
    TEST_RUNNER = unittest.TextTestRunner()
    TEST_SUITE = suite()
    TEST_RUNNER.run(TEST_SUITE)

Вы можете делать это рекурсивно до корня вашего проекта.Таким образом, основной тест из пакета A соберет весь модуль в пакете A + основной тест из подпакетов пакета A и так далее.Я предполагал, что вы используете unittest, поскольку вы не дали никаких дополнительных подробностей, но я думаю, что эта структура может быть применена и к другим средам тестирования Python.


Редактировать: Ну, яне совсем уверен, что я полностью понимаю вашу проблему, но насколько я понимаю, вы хотите добавить как набор, определенный в suiteFilter.py, так и тестовый набор, определенный в Invoice.py, в один и тот же набор?Если так, то почему бы просто не сделать это в mainTest.py, например:

import unittest
import suiteFilter
import Invoice


def suite()
    test_suite = unittest.TestSuite()
    test_suite.addTest(suiteFilter.suite())
    test_suite.addTest(unittest.makeSuite(Invoice))


if __name__ == "__main__":
    result = unittest.TextTestRunner(verbosity=2).run(suite())
    sys.exit(not result.wasSuccessful())

Вы можете добавить тесты и наборы одинаково в test_suite.

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