Я пытаюсь протестировать сервер и хочу распечатать его в конце теста здесь

class TestHandler(TestCase):

    def setUp(self):
        cmd = [
            'python', '-m', 'server',
            '-f', write_to_path,
            '--debug'
        ]
        self.server = Popen(cmd, universal_newlines=True, cwd=root_dir_path,
                            stdout=PIPE, stderr=PIPE)

        # also tried this, did not help
        # cmd = [
        #     'python -m server --debug -f ' + write_to_path
        # ]
        # self.server = Popen(cmd, shell=True, universal_newlines=True, cwd=root_dir_path,
        #                     stdout=PIPE, stderr=PIPE)

    def tearDown(self):
        try:
            outs, errs = self.server.communicate(timeout=2)
            print(outs, errs)
        except TimeoutExpired:
            print("kill")
            self.server.kill()
            outs, errs = self.server.communicate()
            print(outs, errs) # empty output here

    def testWordWithoutParent(self):
        pass

Когда я запускаю его, stdout и err пусты, но код сервера был выполнен (я тестировал его основную функцию в server / __ main__.py с pdb)

 ~/Documents/LINGUALEO/lingualeo2anki $ python -m unittest
.kill

.
----------------------------------------------------------------------
Ran 2 tests in 2.006s

OK

Источник здесь

Я пробовал много ответов на stackowerflow почти 3 часа, и никто не помог, я сдался.

0
srghma 28 Дек 2016 в 00:18

1 ответ

Лучший ответ

Сигнал завершения был обработан неправильно.

Был

try:
    httpd = HTTPServer(config.server_address, Handler)
    debug('http server is running...listening on port %s', config.port)
    httpd.serve_forever()
except KeyboardInterrupt:
    httpd.server_close()
    sys.exit(0)
finally:
    httpd.socket.close()
    httpd.server_close()
    debug("finnaly")

Стали

server = None

def close_server(signum, frame):
    debug("Signal handler called with signal %s", signum)
    if server:
        server.server_close()
        sys.exit()

server = HTTPServer(config.server_address, Handler)
signal.signal(signal.SIGINT, close_server)
signal.signal(signal.SIGTERM, close_server)
debug('http server is running...listening on port %s', config.port)
server.serve_forever()
0
srghma 28 Дек 2016 в 19:54