私はフラスコマイクロサービスを開発して、いくつかのデータをcassandraデータベースから公開しています。これは、コマンドラインから呼び出されているガンコーンによって提供されます。問題は、データベースに接続する場所と方法、特に単体テストを行うときにデータベースの必要性を模擬する方法やバイパスする方法を検討する際に混乱していることです。フラスコポストフォーク接続to cassandra
私の最初の試みは
それは、個々の要求のためのオーバーヘッドを削減シングル「グローバル」な接続を作ってあげることを考えdef create_app():
app = Flask(__name__)
app.debug = True
cluster = Cluster([os.environ['CASSANDRA_HOST']])
app.cassandra = cluster.connect(os.environ['CASSANDRA_KEYSPACE'])
return app
を次のようにアプリの作成時に接続することでした。これは、CIパイプラインの隔離された環境でのユニットテストのポイントではない、接続しようとするユニットテストを明らかに失敗します。
次に、Cassandraの人々からslidesを調べると、フラスコの使用には@app.before_first_request
と一般的なルールとして「ポストフォーク」を接続することが記載されています。私はポストフォークがこの文脈で何を意味するのか分かりません。とにかく
、
@app.before_first_request
def before_request():
app.cluster = Cluster([os.environ['CASSANDRA_HOST']])
app.cassandra = app.cluster.connect(os.environ['CASSANDRA_KEYSPACE'])
をやっても動作しますが、それでも孤立ユニットテストと同じ問題を抱えています。
postを読むと、私はgunicorn(ポストフォーク)によって生成されるフラスコインスタンスごとに1つのcassandraセッションを作成しているので、接続自体に問題はないと思います。
私の質問は、明示的にデータベースに達することなく、エンドポイントを単体テストできるようにするためにどの戦略に従うかを減らします。