Python,unit test-将命令行参数传递给unittest.TestCas的设置

2024-04-30 01:33:49 发布

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

我有一个脚本,它充当一些使用Pythonunittest模块编写的单元测试的包装器。除了清理一些文件、创建输出流和生成一些代码之外,它还使用

unittest.TestLoader().loadTestsFromTestCase()

我已经在使用optparse来提取几个用于确定输出位置、是否重新生成代码以及是否进行清理的命令行参数。我还想传递一个配置变量,即端点URI,以便在测试用例中使用。

我意识到我可以在TestCase的setUp方法中添加一个OptionParser,但是我想把这个选项传递给setUp。是否可以使用loadTestsFromTestCase()?我可以遍历返回的TestSuiteTestCases,但是我可以手动调用TestCases上的setUp吗?

**编辑** 我想指出的是,如果我遍历测试并手动调用setUp,我可以将参数传递给setUp

(options, args) = op.parse_args()
suite = unittest.TestLoader().loadTestsFromTestCase(MyTests.TestSOAPFunctions)
for test in suite:
    test.setUp(options.soap_uri)

但是,我使用xmlrunner来实现这个,它的run方法使用TestSuite作为参数。我假设它将运行setUp方法本身,因此我需要XMLTestRunner中可用的参数。

我希望这有道理。


Tags: 方法代码test脚本参数setupargs手动
3条回答

我绝对建议不要像这样将参数传递给setUp;setUp在运行测试时应该被隐式调用,所以不应该像这样显式调用它。

解决这个问题的一种方法是将需要设置的值设置为环境变量或全局可访问的“context”模块中的值,这将允许测试用例根据需要访问它们。我喜欢使用环境变量,因为它在运行测试方面更加灵活(这样就不再依赖命令行参数)。

if __name__ == '__main__':
    from optparse import OptionParser
    parser = OptionParser()
    parser.add_option("-z", "--zebra",
                      action="store_true", dest="zebra", default=False,
                      help="run like a zebra")    


    (options, args) = parser.parse_args()

    if options.zebra:
        zebrafy()


    # remove our args because we don't want to send them to unittest
    for x in sum([h._long_opts+h._short_opts for h in parser.option_list],[]):
        if x in sys.argv:
            sys.argv.remove(x)


    unittest.main()

好吧,我也想做同样的事,我自己也要问这个问题。我想改进下面的代码,因为它有重复。但它确实允许我向测试用例发送参数:

import unittest
import helpspot

class TestHelpSpot(unittest.TestCase):
    "A few simple tests for HelpSpot"

    def __init__(self, testname, path, user, pword):
        super(TestHelpSpot, self).__init__(testname)
        self.hs = helpspot.HelpSpot(path, user, pword)

    def test_version(self):
        a = self.hs.version()
        b = self.hs.private_version()
        self.assertEqual(a, b)

    def test_get_with_param(self):
        a = self.hs.filter_get(xFilter=1)

    def test_unknown_method(self):
        self.assertRaises(helpspot.HelpSpotError, self.hs.private_wuggienorple)

if __name__ == '__main__':
    import sys
    user = sys.argv[1]
    pword = sys.argv[2]
    path = sys.argv[3]

    test_loader = unittest.TestLoader()
    test_names = test_loader.getTestCaseNames(TestHelpSpot)

    suite = unittest.TestSuite()
    for test_name in test_names:
        suite.addTest(TestHelpSpot(test_name, path, user, pword))

    result = unittest.TextTestRunner().run(suite)
    sys.exit(not result.wasSuccessful())

相关问题 更多 >