代码之家  ›  专栏  ›  技术社区  ›  Jake

Python unittest使用单个套接字在tcp服务器上进行多个测试

  •  2
  • Jake  · 技术社区  · 7 年前

    我正在尝试测试一个使用TCP套接字的简单服务的实现。我希望在不为每个测试用例创建连接的情况下测试我的服务器。我想为整个测试套件建立一个连接。目前我有这样的东西。。

    class Test_service(unittest.TestCase):
    
        def test_1(self):
            client_socket = socket(AF_INET, SOCK_STREAM)
            client_socket.connect(('', port_number))
            client_socket.send('message1'.encode())
            self.assertEqual(client_socket.recv(1024).decode(), 'reply1')
            client_socket.close()
    
        def test_2(self):
            client_socket = socket(AF_INET, SOCK_STREAM)
            client_socket.connect(('', port_number))
            client_socket.send('message2'.encode())
            self.assertEqual(client_socket.recv(1024).decode(), 'reply2')
            client_socket.close()
    
    if __name__ == '__main__':
        unittest.main()
    

    保持单个套接字连接打开并让多个测试用例使用该连接的好方法是什么?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Turn Deven    7 年前

    如果你看看 docs 你会发现 setUp tearDown 测试类中将执行一次的方法。因此,您可以执行以下操作:

    class Test_service(unittest.TestCase):
    
        def setUp(self):
            client_socket = socket(AF_INET, SOCK_STREAM)
            client_socket.connect(('', port_number))
    
        def tearDown(self):
            client_socket.close()
    
        def test_1(self):
            client_socket.send('message1'.encode())
            self.assertEqual(client_socket.recv(1024).decode(), 'reply1')
    
        def test_2(self):
            client_socket.send('message2'.encode())
            self.assertEqual(client_socket.recv(1024).decode(), 'reply2')