Python интеграционный тест с локальным http сервером - PullRequest
0 голосов
/ 11 марта 2020

Я хочу проверить, сможет ли мой код загружать файлы с URL-адресов, поэтому я хочу запустить простой HTTP-сервер внутри моего интеграционного теста, чтобы я мог протестировать утилиту. Я использую

async def runServer(self):
    '''
    Run an HTTP server to listen to requests and send issuesFromCSV.csv as a response to requests.
    '''
    outerClassSelf = self
    class ThreadingHTTPServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
        pass

    class Handler(http.server.SimpleHTTPRequestHandler):

        def do_GET(self):
            # Construct a server response.
            self.send_response(200)
            self.send_header('Content-Disposition', 'attachment; filename.csv')
            self.send_header('Content-type', 'text/csv')
            self.end_headers()
            with open(outerClassSelf.filePath, 'r') as file:
                self.wfile.write(file.read().encode())
            return
    print('Server listening on port {}...'.format(self.port))
    httpd = await ThreadingHTTPServer(('', self.port), Handler)
    httpd.serve_forever()

для запуска сервера. Но когда я не использую ключевые слова async и await, сервер блокирует программу и застревает там. Когда я хочу запустить новый поток для сервера и просто вызвать его непосредственно в коде, мой тест отправляет запрос на сервер, прежде чем он запустится, и я получил ошибку. Итак, я хотел использовать await перед вызовом self.runServer(), чтобы мой тест ожидал запуска сервера, но для этого потребовалось указать ключевое слово async в сигнатуре моей тестовой функции, из-за чего python сделал Не рассматривайте эту функцию как тестовую и пропустите ее. Я использую библиотеку unittest для тестирования. Помогите мне, пожалуйста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...