Модульный тест для загрузки файла колбу - PullRequest
0 голосов
/ 20 ноября 2018

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

main.py - здесь файл загружается, а затем мы вызываем функцию func_predict, которая возвращает вывод

upload_parser = api.parser()
upload_parser.add_argument('file', location='files',
                       type=FileStorage, required=True)
@api.route('/classification')
@api.expect(upload_parser)
class classification(Resource):

    def post(self):
    """
       predict the document
    """
        args = upload_parser.parse_args()
        uploaded_file = args['file']
        filename = uploaded_file.filename
        prediction,confidence = func_predict(uploaded_file)
        return {'file_name':filename,'prediction': prediction,'confidence':confidence}, 201

Forex.py: этот файл содержит функцию func_predict, которая выполняет фактическую работу прогнозирования. Загружает загруженный файл как вход

def func_predict(file):
    filename = file.filename #filename
    extension = os.path.splitext(filename)[1][1:].lower() #file_extension
    path = os.path.join(UPLOAD_FOLDER, filename) #store the temporary path of the file
    output = {}
    try:
    # Does some processing.... some lines which are not relevant and then returns the two values
    return (''.join(y_pred),max_prob)

Теперь моя путаница в том, как мне высмеивать загруженный файл, загруженный файл имеет тип FileStorage. Кроме того, какой метод я должен выполнить тестирование, должно ли это быть '/ классификация' или func_predict.

Я попробовал описанный ниже метод, хотя я не добился успеха в этом. Я создал файл test.py и импортировал метод классификации из main.py, а затем передал имя файла в данные

from flask import Flask, Request
import io
import unittest
from main import classification

class TestFileFail(unittest.TestCase):

    def test_1(self):

        app = Flask(__name__)
        app.debug = True
        app.request_class = MyRequest


        client = app.test_client()
        resp = client.post(
            '/classification',
            data = {
            'file': 'C:\\Users\\aswathi.nambiar\\Desktop\\Desktop docs\\W8_ECI_1.pdf'
        }, content_type='multipart/form-data'
    )
        print(resp.data)

        self.assertEqual(
        'ok',
        resp.data,
    )


if __name__ == '__main__':
    unittest.main()

Я полностью потерян! Я знаю, что были более ранние вопросы, но я не могу понять.

1 Ответ

0 голосов
/ 20 ноября 2018

Я наконец-то наткнулся на то, как это проверить, на случай, если кто-нибудь ищет что-то подобное

from predict_main_restplus import func_predict 
from werkzeug.datastructures import FileStorage
file = None

def test_classification_correct():
    with open('W8-EXP_1.pdf', 'rb') as fp:
        file = FileStorage(fp)
        a , b = func_predict(file)
        assert (a, b) == ('W-8EXP',90.15652760121652)

Итак, здесь мы тестируем функцию прогнозирования в Foregnetic.py, она возвращает два значения: результат прогнозирования и достоверность прогнозирования. Мы можем смоделировать загрузку, используя open (file), а затем обернуть ее FileStorage. Это сработало для меня.

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