包含测试套件和测试用例的测试套件
我需要创建一个大的 Python 套件,这个套件里面包含了其他的套件和我已经做好的测试用例,想要一起执行。
我该怎么做呢?
比如说,这里有一个套件(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
你可以提供一些额外的信息,比如你的程序结构、测试用例和测试套件的情况。我通常的做法是为每个模块定义一个 suite()。比如说,我有一个 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 中。