I am trying to ping two different networks with thread. I am able to get the response I want but I want to convert it into a test. I have the code that I have tried below but the test runner says that no tests were run. The code is below:
#!/home/workspace/downloads/Python-2.6.4/python
from threading import Thread
import subprocess, unittest
from Queue import Queue
class TestPing(unittest.TestCase):
num_threads = 4
queue = Queue()
ips = ["10.51.54.100", "10.51.54.122"]
#wraps system ping command
def RunTest(i, q):
"""Pings subnet"""
while True:
ip = q.get()
print "Thread %s: Pinging %s" % (i, ip)
ret = subprocess.call("ping -c 1 %s" % ip,
shell=True,
stdout=open('/dev/null', 'w'),
stderr=subprocess.STDOUT)
if ret == 0:
print "%s: is alive" % ip
assert True
else:
print "%s: did not respond" % ip
assert False
q.task_done()
#Spawn thread pool
for i in range(num_threads):
worker = Thread(target=pinger, args=(i, queue))
worker.setDaemon(True)
worker.start()
#Place work in queue
for ip in ips:
queue.put(ip)
#Wait until worker threads are done to exit
queue.join()
class PingTestSuite(unittest.TestSuite):
def makePingTestSuite():
suite = unittest.TestSuite()
suite.addTest(TestPingMove("TestPing"))
return suite
def suite():
return unittest.makeSuite(TestPing)
if __name__ == '__main__':
unittest.main()
I want the test to assert either true and false if a network gi开发者_JAVA技巧ves no response and to run two tests for the 2 networks to be pinged. Does anyone know where I have gone wrong?
When you subclass unittest.TestCase, all methods whose name begins with test, get run automatically. Otherwise, the code is not run as a test. (So RunTest is not getting run).
So if you change RunTest to (the not so mellifluous) test_RunTest:
class TestPing(unittest.TestCase):
def test_RunTest(self):
add code here
then the code will run. Also note, that unittest expects test_RunTest's first and only argument to be self.
If you want to test that func(args) raises an error, then use self.assertRaises like this:
self.assertRaises(AssertionError, func, args)
Or, if func returns True or False, then you can tests that the proper value is returned by using self.assertTrue or self.assertFalse.
Also, when you write unit tests, it would be wise to place all your functions/classes in a module, import the module for the unittest script, and then test that the functions are returning or raising what you expect in the unittest script. I could be wrong, but it seems as though at the moment you have the two pieces mixed together.
加载中,请稍侯......
精彩评论