0

我有一个测试 url 连接的单元测试。单独它可以工作,但我有几个要测试的网址,所以我试图调用这个测试模块并对它们进行批量测试!但是我在调​​用测试函数时出错。你可以帮帮我吗?

测试.py:

class TestConnector(unittest.TestCase):

    def setUp(self):
        [...]

    def test_connection(self, url):
        conn = Connector(self.user)
        self.assertNotEqual(conn.read(url), None)

if __name__ == '__main__':
    unittest.main()

现在我想测试几个 url,所以我用它们创建了文件,并尝试调用测试函数:

import test

with open('URL_list.txt') as f:
    urls = f.readlines()

suite = unittest.TestLoader().loadTestsFromModule(test.TestConnector)

for url in urls:
    unittest.TextTestRunner().run(suite)

我收到这条消息的次数与我拥有的网址一样多:

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK

----------------------------------------------------------------------

怎么了?

4

1 回答 1

3

您的测试方法被忽略,因为它需要一个参数。测试方法从不带参数。这与 Python 永远不会神奇地将局部变量名称作为参数传递给函数的事实完全不同。你必须明确地传递它。

将您的 url 加载集成到测试本身中:

class TestConnector(unittest.TestCase):

    def setUp(self):
        [...]

    def test_connections(self):

        with open('URL_list.txt') as f:
            for url in f:
                conn = Connector(self.user)
                self.assertNotEqual(conn.read(url.strip()), None)

if __name__ == '__main__':
    unittest.main()

或动态创建测试方法:

class TestConnector(unittest.TestCase):
    def setUp(self):
        [...]

def generate_test(url):
    def test(self):
        conn = Connector(self.user)
        self.assertNotEqual(conn.read(url), None)

if __name__ == '__main__':
    with open('URL_list.txt') as f:
        for i, url in enumerate(f):
            test_name = 'test_{}'.format(i)
            setattr(TestConnector, test_name, generate_test(url.strip()))

    unittest.main()
于 2013-10-03T20:48:57.220 回答