gpt4 book ai didi

Python:单元测试基于套接字的代码?

转载 作者:IT老高 更新时间:2023-10-28 21:01:03 27 4
gpt4 key购买 nike

我正在编写一个 Python 客户端+服务器,它使用 gevent.socket 进行通信。有什么好的方法可以测试代码的套接字级别的操作(例如,验证带有无效证书的 SSL 连接是否会被拒绝)?还是仅仅spawn 一个真正的服务器最简单?

编辑:由于涉及复杂的交互,我认为“天真的”模拟不足以测试 SSL 组件。我错了吗?还是有更好的方法来测试 SSL 的东西?

最佳答案

您可以轻松启动服务器,然后在测试用例中访问它。该gevent的own test suite正是为了测试 gevent 的 built-in servers .

例如:

class SimpleServer(gevent.server.StreamServer):

def handle(self, socket, address):
socket.sendall('hello and goodbye!')

class Test(unittest.TestCase):

def test(self):
server = SimpleServer(('127.0.0.1', 0))
server.start()
client = gevent.socket.create_connection(('127.0.0.1', server.server_port))
response = client.makefile().read()
assert response == 'hello and goodbye!'
server.stop()

使用 0端口值表示服务器将使用任何可用端口。服务器启动后,bind 选择的实际值可用 server_port属性。

StreamServer也支持SSL,通过keyfilecertfile构造函数的参数,它将用 SSLObject 包装每个套接字在将其传递给您的处理程序之前。

如果您不使用 StreamServer并且您的服务器基于 Greenlet那么确实spawning这是你应该做的。不要忘记 kill它在测试用例的末尾。

gevent 中启动服务器和生成greenlet 是快速操作。 ,比创建新线程或进程快得多,您可以轻松地为每个测试用例创建新服务器。只是不要忘记在您不再需要服务器时立即进行清理。

我相信没有必要模拟任何 gevent API,使用它会容易得多,因为服务器和客户端可以愉快地生活在同一个进程中。

关于Python:单元测试基于套接字的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4047897/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com