Python中的批处理测试(unittest)



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

test.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
----------------------------------------------------------------------

怎么了?

您的测试方法被忽略,因为它需要一个参数。测试方法从不接受参数。这与 Python 永远不会神奇地将局部变量名称作为参数传递到函数中这一事实无关;您必须显式传递它。

改为将您的网址加载集成到测试本身中:

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()

最新更新