Вы можете легко запустить сервер и затем получить к нему доступ в тестовом примере. собственный набор тестов 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
перед передачей его вашему обработчику.
Если вы не используете StreamServer
и ваш сервер основан на Greenlet , тогда действительно нерест это то, что вы должны сделать.Не забудьте убить в конце тестового примера.
Запуск сервера и порождение гринлета - это быстрые операции в gevent , намного быстрее, чем созданиеновый поток или процесс, и вы можете легко создать новый сервер для каждого теста.Только не забудьте очистить, как только вам больше не нужен сервер.
Я считаю, что нет необходимости издеваться над любым из Gevent API, гораздо проще просто использовать его, так как серверы и клиенты могут счастливожить в том же процессе.