Amazon s3 如何使用pytest(flask+;mongo+;s3)实现这一点
我有一个flask方法,这个flask方法调用一个函数,从s3 bucket和mongo数据库加载数据,然后这些操作和返回 问题:当使用Flask test_client()调用端点时,它仍然尝试使用真实的数据库和s3 bucket 项目结构看起来有点像:Amazon s3 如何使用pytest(flask+;mongo+;s3)实现这一点,amazon-s3,mocking,pytest,boto3,Amazon S3,Mocking,Pytest,Boto3,我有一个flask方法,这个flask方法调用一个函数,从s3 bucket和mongo数据库加载数据,然后这些操作和返回 问题:当使用Flask test_client()调用端点时,它仍然尝试使用真实的数据库和s3 bucket 项目结构看起来有点像: +-- main | +-- s3_data_access | +--- pull_data.py | +-- mongo_data_access | +--- read_collection.py | +--
+-- main
| +-- s3_data_access
| +--- pull_data.py
| +-- mongo_data_access
| +--- read_collection.py
| +-- controller
| +-- flask_app.py
+-- test
| +-- flask_app_tests.py
main/s3\u data\u access/pull\u data.py
import boto3
def pull_data(str_date)
s3_client=boto3.client('s3')
data=s3_client.get_object(Bucket=self.bucket_name,Key=str_date)
return data
from pymongo import MongoClient
def read_data(timestamp):
coll=MongoClient(os.environ['URI'])[db][collection]
return coll.find({'ts':timestamp})
from flask_restplus import Resource
from flask import request
from main.s3_data_access import pull_data
from main.mongo_data_access import read_data
class UserListConfirmation(Resource):
@api.route("/daily_pull/transaction/<timestamp>/<str_date>")
def get(self):
s3_data=pull_data(str_date)
mongo_data=read_data(timestamp)
return _do_x(s3_data,mongo_data)
def _do_x(s3,mongo):
#does some operations
main/mongo\u data\u access/read\u collection.py
import boto3
def pull_data(str_date)
s3_client=boto3.client('s3')
data=s3_client.get_object(Bucket=self.bucket_name,Key=str_date)
return data
from pymongo import MongoClient
def read_data(timestamp):
coll=MongoClient(os.environ['URI'])[db][collection]
return coll.find({'ts':timestamp})
from flask_restplus import Resource
from flask import request
from main.s3_data_access import pull_data
from main.mongo_data_access import read_data
class UserListConfirmation(Resource):
@api.route("/daily_pull/transaction/<timestamp>/<str_date>")
def get(self):
s3_data=pull_data(str_date)
mongo_data=read_data(timestamp)
return _do_x(s3_data,mongo_data)
def _do_x(s3,mongo):
#does some operations
main/controller/flask_app.py
import boto3
def pull_data(str_date)
s3_client=boto3.client('s3')
data=s3_client.get_object(Bucket=self.bucket_name,Key=str_date)
return data
from pymongo import MongoClient
def read_data(timestamp):
coll=MongoClient(os.environ['URI'])[db][collection]
return coll.find({'ts':timestamp})
from flask_restplus import Resource
from flask import request
from main.s3_data_access import pull_data
from main.mongo_data_access import read_data
class UserListConfirmation(Resource):
@api.route("/daily_pull/transaction/<timestamp>/<str_date>")
def get(self):
s3_data=pull_data(str_date)
mongo_data=read_data(timestamp)
return _do_x(s3_data,mongo_data)
def _do_x(s3,mongo):
#does some operations
来自flask_restplus导入资源
从烧瓶进口请求
从main.s3_数据访问导入拉取数据
从main.mongo_数据访问导入读取数据
类UserListConfirmation(资源):
@api.route(“/daily\u pull/transaction/”)
def get(自我):
s3\u数据=拉取数据(str\u日期)
mongo_数据=读取_数据(时间戳)
返回_do_x(s3_数据、mongo_数据)
def_do_x(s3,mongo):
#做一些手术
理想情况下,我想模拟上一个文件/daily_pull/transaction//中的调用,但在浏览互联网后,我感到非常失落
为flask应用程序创建了一个app.test_client()并访问了CRUD,但他们试图访问生产资源(S3和mongo),因此我想了解两件事: