簡體   English   中英

如何為我的 Flask API 編寫 UnitTest

[英]How can i write UnitTest for my Flask API

我對單元測試相當陌生,我需要為我的 flask api 編寫一些單元測試。 知道如何為下面的代碼編寫單元測試嗎? 任何示例和幫助將不勝感激。 我嘗試創建一個單獨的文件來開始單元測試,但我無法將 flask 應用程序導入文件,因為它給了我模塊錯誤。 除此之外,我不確定如何在此應用程序中測試每個 function。

from flask import Flask, request, Response, send_file
import machine_learning_model.Object_detection.yoloModel as yoloModel
import jsonpickle
import numpy as np
import cv2
import base64
import json
import ast
import requests
app = Flask(__name__)


url_base = 'http://192.168.1.6:5000'
predict_image_api = '/v1/api/predict'
bounding_box_API = '/v1/resoures/predict_images/'


# Load YOLO model
labels, colors = yoloModel.load_label("coco.names")
net, ln = yoloModel.load_model()


# route http posts to this method
@app.route(predict_image_api, methods=['GET', 'POST'])
def predict():
    loaded_body = parse_json_from_request(request)
    
    # Conversion of base64 image back to its binary
    img_original = base64.b64decode(loaded_body['image'])

    # Conversion of image data to unit8
    jpg_as_np = np.frombuffer(img_original, dtype=np.uint8)
    
    # Decoding the image
    image = cv2.imdecode(jpg_as_np, cv2.IMREAD_COLOR)

    idxs, boxes, confiences, centers, classIDs = yoloModel.detectObjectFromImage(image, net, ln)

    objectProperty = yoloModel.bouding_box(idxs, image, boxes, colors, labels, classIDs, confiences)

    response = {
        'objectProperty':''
    }
    response['objectProperty'] = objectProperty
    print(response)
    # encode response using jsonpickle
    response_pickled = jsonpickle.encode(response)



    return Response(response=response_pickled, status=200, mimetype="application/json")

@app.route(bounding_box_API+'<name>', methods=['GET'])
def get_image(name):
    filename = 'predict_images/output_resize_%s.jpg' % name
    print(filename)
    return send_file(filename, mimetype='image/gif')


def parse_json_from_request(request):
    body_dict = request.json
    body_str = json.dumps(body_dict)
    loaded_body = ast.literal_eval(body_str)
    return loaded_body

if __name__ == "__main__":
    # start flask app
    app.run()

首先,我推薦使用pytest

為了進行正確的單元測試,您的程序應拆分為最好只執行一項任務的簡單函數。

由於您正在處理requests ,您可能需要測試您的 HTTP 調用。 測試它們的一個好方法是使用響應來模擬目標服務器或 API。

Pragmatically, start to create a folder tests/ and create a file per class or per function, named after the class or the function you want to test (like so test_your_function.py ). 在此文件中,為您的函數編寫單元測試(即,以 test_ 開頭的test_以便pytest將其識別為單元測試)。 每個單元測試都應該包含一個assert tested_output_value == expected_output_value語句,這樣如果您的 function 沒有返回所需的tested_output_value ,您的單元測試就會失敗。

例如,如果您想測試您的 function predict一種方法是編寫一個請求您的本地主機服務器的 function 並驗證響應是否符合您的預期。 注意:在運行 pytest 之前,請確保您已經啟動了您的服務器;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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