サーバーを簡単に起動して、テストケースでアクセスできます。gevent独自のテストスイートは、geventの組み込みサーバーをテストするためのものとまったく同じです。
例えば:
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もサポートし、コンストラクターkeyfile
に引数を渡し、ハンドラーに渡す前にcertfile
各ソケットをラップします。SSLObject
使用せず、サーバーがGreenletStreamServer
に基づいている場合は、実際にそれを生成する必要があります。テストケースの最後にそれを殺すことを忘れないでください。
サーバーの起動とグリーンレットの生成は、geventでの高速操作であり、新しいスレッドまたはプロセスを作成するよりもはるかに高速であり、テストケースごとに新しいサーバーを簡単に作成できます。サーバーが不要になったらすぐにクリーンアップすることを忘れないでください。
gevent APIをモックする必要はないと思います。サーバーとクライアントが同じプロセス内で幸せに暮らせるので、geventAPIを使用する方がはるかに簡単です。