[英]Batch tests (unittest) in Python
我有一个单元测试,用于测试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永远不会神奇地将局部变量名传递给函数作为参数这一事实完全无关。 您必须显式传递它。
而是将您的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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.