[英]Flask make_server always raises "OSError: [Errno 98] Address already in use"
我正在嘗試為我正在處理的一些 Python 代碼編寫單元測試,其中一些代碼在完成后會聯系 API。 我正在嘗試運行一個簡單的 Flask API 來模擬這個 API 並檢查代碼是否發送了正確的信息。 這是代碼:
import unittest
import time
from threading import Thread
from flask import Flask
from flask_restx import Api, Resource
from werkzeug.serving import make_server
mock_app = Flask(__name__)
mock_api = Api(mock_app)
# Mock API
data_in = []
data_out = ""
result_code = 200
@mock_api.route('/jobs')
class MockAPI(Resource):
def post(self):
global data_in, data_out, result_code
data_in.append(mock_api.payload)
return data_out, result_code
# Unit test class
class TestClass(unittest.TestCase):
def __init__(self, arg):
super().__init__(arg)
# Some needed fields
# ...
# Mock API Server
self.mock_server = make_server('localhost', 6000, mock_wfm)
self.mock_server_thread = Thread(target = self.mock_wfm.serve_forever)
調用make_server
的行是導致異常的行。 lsof -i:6000
之類的命令不會返回任何內容,更改地址或端口也不會解決任何問題。
編輯:
在故障行前添加一個簡單的打印后,我發現代碼實際上被調用了兩次,導致錯誤。 我還不知道為什么。
問題是__init__
方法顯然是為每個測試調用的,所以它每次都在第二個測試中失敗。
解決的辦法是把服務器和線程的創建放在一個setUp方法中,然后在tearDown中關閉它們。
def setUp(self):
self.mock_server = make_server('localhost', 6000, mock_wfm)
self.mock_server_thread = Thread(target = self.mock_server.serve_forever)
self.mock_server_thread.start()
time.sleep(1)
def tearDown(self):
self.mock_server.shutdown()
self.mock_server_thread.join()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.