Python unittest 在单套接字的 TCP 服务器上进行多项测试

Python unittest multiple tests on tcp server with single socket

我正在尝试测试使用 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()

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

如果您查看 docs,您会发现可以将 setUptearDown 方法放入测试 class 中,它们将执行一次。所以你可以这样做:

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