对于后台测试中的接口测试,因为结果确定,所以实现自动化相对而言比较容易,同时自动化用例方便维护也可以降低回归成本。
python提供了unittest类用来方便的实现case的自动调用,接着昨天的socket例子,实现了一个有3个测试case的用例,代码如下:
import socket
import sys
import time
import unittest
class testClient(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def testInputInt(self):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('127.0.0.1', 62001))
sock.send('1')
strBuf = sock.recv(1024)
strReturn = strBuf.split(':')[1]
try:
intReturn = int(strReturn)
except:
pass
self.assertEqual(intReturn, 2)
sock.close()
def testTimeout(self):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('127.0.0.1', 62001))
time.sleep(6)
try:
sock.send('1')
strBuf = sock.recv(1024)
self.assertEqual(0, 1)
except:
pass
sock.close()
def testInputString(self):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('127.0.0.1', 62001))
sock.send('abcd')
strBuf = sock.recv(1024)
strReturn = strBuf.split(':')[1]
self.assertEqual(strReturn, 'abcd')
sock.close()
if __name__ == "__main__":
unittest.main()
跑完之后结果如下:
...
----------------------------------------------------------------------
Ran 3 tests in 6.003s
OK
3个点表示是3个成功的case,失败的话会打E,然后打印出失败的信息。当然,也可以自己加一些log打印。
实现的基本过程是这样的:
1.自定义一个类继承unittest;
2.定义setUp和tearDown方法,分别用来执行调度用例前和调度用例后需要执行的操作;
3.所有的用例需要用test来开头;
4.通过执行unittest.main()来调度所有case。