TestSuite с тестами и тест-кейсами
Мне нужно сделать большой набор из питонов, состоящий из других чемоданов и тестовых наборов, которые я уже сделал для совместной работы.
Как мне это сделать?
Например, здесь есть 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 ответ
Вы можете предоставить некоторую дополнительную информацию, такую как структура вашей программы / тестовых случаев и наборов. Я делаю это, определяя набор () для каждого модуля. Итак, я сказал для модуля 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.