- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我们有一个 ETL 数据 API 存储库。我们在其中进行所有 etl 处理,然后将数据吐出到 API 中。这些 API 从将资源类传递到服务器以构建 API 的单个命令一次运行一个。资源类位于 __init__.py.
这是一个很棒的约定并且使用起来非常简单,但我遇到的问题是试图让 3 个可用的 API 之一启动以进行测试。我们的目录结构是这样的(调用项目'tomato')
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__ 的模块
但 cd 进入主顶层目录,ls tomato/category/web
得到我们 __init__.py
并且它就在资源类中。
如何导入此类以便实例化 API 以运行此类中的测试?或者,如果我完全走错了路,我应该怎么做?
最佳答案
您不需要导入 __init__
,就像您可能不会执行 from tomato.category.web import __init__
一样。您应该能够直接导入 web
包。
self.web_package = 'tomato.category.web'
self.package = import_module(self.web_package)
关于python - Python 中的 Flask 测试——在 repo 中构建一个 API,通过 import_module 对其进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27553028/
根据 this answer , 你可以使用 importlib 到 import_module 使用像这样的相对导入: importlib.import_module('.c', 'a.b') 为什
我有一个简单的插件系统,简化形式如下。想法是插件将实现一个抽象类,并可以引发异常来发出拆卸信号。 # my_plugin.py import my_app class MyPlugin(my_app.
我正在尝试使用本指南运行聊天机器人示例:http://chatterbot.readthedocs.io/en/stable/tutorial.html 所以我收到此导入错误: ➜ examples
为了向我的程序(在 python 2.7 中)添加可用模块检查,我添加了以下代码来代替经典导入(目的是帮助某人定位和添加额外模块): mymodules = ['socket', 'requests'
这个问题在这里已经有了答案: Python: How to import all methods and attributes from a module dynamically (3 个答案) 关
我有以下文件夹结构,并且在 util.py 中有一个测试方法。运行 util 方法时,我看到在我试图获取所有类的模块中导入的模块出现错误。 Parent --report ----__init__.
我有一个现有的简单导入语句,如下所示: from booking import Booking 我想重写它以通过 importlib 库接受动态参数。 我的尝试有以下几种变体: from import
我想使用 importlib 中的 import_module 导入模块。当我这样做时,找不到我从模块引用的文件。如果我从 python shell 正常导入模块(不使用 main.py),它会按预期
具有相对模块名称的 importlib.import_module 有时会失败。 例如,我有这样一个包结构: ├── test0 │ ├── __init__.py │ ├── test1.p
我注意到 Flask 正在使用 Werkzeug 来 __import__ 一个模块,我有点困惑。我去查看了上面的文档,发现它似乎以某种方式让您在查找模块的位置方面提供了更多控制权,但我不确定确切如何
当尝试使用 manage.py 运行 runserver 或 shell 时,我得到一个 ImportError 异常。我正在使用 Django 1.9。 ImportError: No module
我正在尝试使用 importlib.import_module在 Python 2.7.2 中遇到奇怪的错误。 考虑以下目录结构: a | + - __init__.py
在我的 Django 测试之一中,我使用 django.utils.importlib.import_module类似于它的使用方式 here . 在升级到 django 1.8 时,我收到了弃用警告
我遇到了“模型未安装或抽象”错误,该错误仅发生在某些机器上,但不会发生在其他机器上,当我深入研究时,我发现问题是 load_app(self, app_name, can_postpone=False
我是 Django 新手。我有一个 Django 休息项目。当我运行它时,错误显示为 from django.utils.importlib import import_module ImportEr
我们有一个 ETL 数据 API 存储库。我们在其中进行所有 etl 处理,然后将数据吐出到 API 中。这些 API 从将资源类传递到服务器以构建 API 的单个命令一次运行一个。资源类位于 __i
我是一名优秀的程序员,十分优秀!