Python中的Flask测试 – 在repo中构建一个API,其中有许多用于通过import_module对其进行单元测试
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python中的Flask测试 – 在repo中构建一个API,其中有许多用于通过import_module对其进行单元测试,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2855字,纯文字阅读大概需要5分钟。
内容图文
我们有一个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对其进行单元测试所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。