Python中的Flask测试 – 在repo中构建一个API,其中有许多用于通过import_module对其进行单元测试

Python中的Flask测试 – 在repo中构建一个API,其中有许多用于通过import_module对其进行单元测试,第1张

概述我们有一个ETL数据API仓库.我们在其中进行所有etl处理,然后在API中吐出数据.这些API一次运行一个命令,从一个命令传递资源类到服务器以构建API.资源类位于__init__.py中的Web目录中. 这是一个很好的约定,使用起来非常简单,但我遇到的问题来自于试图获得3个API中的一个可用于测试.我们的目录结构是这样的(调用项目’番茄’) tomato- category_api 我们有一个ETL数据API仓库.我们在其中进行所有etl处理,然后在API中吐出数据.这些API一次运行一个命令,从一个命令传递资源类到服务器以构建API.资源类位于__init__.py中的Web目录中.

这是一个很好的约定,使用起来非常简单,但我遇到的问题来自于试图获得3个API中的一个可用于测试.我们的目录结构是这样的(调用项目’番茄’)

tomato- category_API    - web    - etl    - test        - here is where we are writing some tests (test_category_API.py)    - data- article_API    - web    - etl    - test    - data- recommendation_API    - web    - etl    - test    - data- common    - common shit

在这个测试中,我有以下测试类.在从底部向上的第七行,
你会看到它在哪里打破的评论.它是import_module方法.

import unittest    import sys    import os    import sys    import Json    from importlib import import_module    from flask import Flask    from flask_restful import API,abort,wraps    from flask_restful.utils import cors    from flask.ext.testing import TestCase    #dir_above_top_level = os.path.join(os.path.abspath(__file__),'../../..    /')    #sys.path.append(os.path.abspath(dir_above_top_level))    _category_ENDPOINT = '/v1/category/'    _PACKAGE_name = os.environ['RECO_API_PACKAGE_name']    _CORS = cors.crossdomain(origin='*',headers=['Origin','X-Requested-With','Content-Type','Accept'],methods=['GET','head','OPTIONS'],max_age=3600)    class categoryTests(TestCase):        def __init__(self):            self.app = Flask(__name__)            self._configure_app()            for resource in self.resource_classes:                self.API.add_resource(self.resource,self.resource.URI_TEMPLATE)        def test_status_code(self):            self.response = self.clIEnt.post(_category_ENDPOINT,data=Json.dumps(                                         {'Title': 'Enjoy this delicIoUs food'}),headers=Json.dumps(                                         {'content-type':'application/Json'}))            self.assertEqual(self.response.status_code,200)        def test_version(self):            self.response = self.clIEnt.post(_category_ENDPOINT,data=Json.dumps(                                             {"Title": "eat some delicIoUs stuff"}),headers=Json.dumps(                                             {'content-type':'application/Json'}))            self.assertEqual(Json.dumps(self.response['version']),'1')        def _configure_app(self):            self.app = Flask(__name__)            self.app.config['TESTING'] = True            self.app.deBUG = True            self.decorators = [_CORS]            self.app.Threaded = True            self.web_package = 'tomato.category.web'            self.package = import_module('.__init__',self.web_package) # WE BREAK HERE            self.resources = package.RESOURCE_nameS            self.resource_classes = [ getattr(package,resource) for resource in resources ]            self.API = API(self.app,catch_all_404s=True,decorators=self.decorators)    if __name__ == '__main__':        unittest.main()

运行这些测试时,我们会遇到异常:

importError:没有名为tomato.category.web .__ init__的模块

然后进入主要的顶级目录,并且ls tomato / category / web将我们__init__.py和它的资源类放在那里.

如何导入此类以便我可以实例化API以在此类中运行测试?
或者如果我完全走错了轨道我应该做什么呢?

解决方法 你不需要导入__init__,就像你可能不会从tomato.category.web import __init__那样.您应该能够直接导入Web包.

self.web_package = 'tomato.category.web'self.package = import_module(self.web_package)
总结

以上是内存溢出为你收集整理的Python中的Flask测试 – 在repo中构建一个API,其中有许多用于通过import_module对其进行单元测试全部内容,希望文章能够帮你解决Python中的Flask测试 – 在repo中构建一个API,其中有许多用于通过import_module对其进行单元测试所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1197201.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存