Python unittest即时加载测试数据

时间:2014-03-11 00:44:46

标签: python testing

我正在尝试从配置文件中加载基于应用程序名称的测试数据。 我正在使用ConfigParser,这是一个鼻子插件。 这是我的代码。我只是不知道如何在动态加载测试时传递应用程序名称。我尝试了构造函数,但无法找到将参数传递给loadTestsFromTestCase方法的方法。 有什么想法吗?

import unittest

class TestMyApp(unittest.TestCase):
    def test1(self):
        print "test1: %s" % self.app
    def test2(self):
        print "test2: %s" % self.app

if __name__ == '__main__':
    # here specify the app name
    suite = unittest.TestLoader().loadTestsFromTestCase(TestMyApp)
    # here specify the other app name
    suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestMyApp))
    unittest.TextTestRunner(verbosity=2).run(suite)

1 个答案:

答案 0 :(得分:1)

您需要进行测试参数化!使用pytest很容易。看看这个代码示例:

import pytest

class AppImpl:
    def __init__(self, app_name):
        self.name = app_name

    def get_name(self):
        return self.name

@pytest.fixture(params=['App1', 'App2'])
def app(request):
    return AppImpl(request.param)

def test_1(app):
    assert app.get_name()

def test_2(app):
    assert 'App' in app.get_name()

if __name__ == '__main__':
    pytest.main(args=[__file__, '-v'])

通过使用逻辑AppImpl的类实现,您可以创建一个fixture app,可以通过特定的arg params=['App1', 'App2']进行参数化。然后在测试test_1test_2中,在funcargs中使用fixture名称app。这种可能性提供了更多的模块化和可读性测试。