带有testsuites和testcase的TestSuite

2024-09-22 14:22:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要做一个大的python套件,它由其他的套件和测试套件组成,我已经做了这些套件来一起执行。

我该怎么做?

例如,这里有一个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()

谢谢你!


Tags: namepyimportselfif套件maindef
1条回答
网友
1楼 · 发布于 2024-09-22 14:22:10

您可以提供一些额外的信息,比如程序/测试用例和套件的结构。我的方法是为每个模块定义一个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())

您可以将所有相同的测试和套件添加到测试套件。

相关问题 更多 >