簡體   English   中英

Flask make_server 總是引發“OSError:[Errno 98] 地址已在使用中”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM