pytestとは、Python用に設計された単体テスト用のフレームワーク(テスティングフレームワーク)で、Flaskを用いたWebアプリケーションで、pytestを利用したテストを行うことができる。
今回は、pytestを用いて、Flaskで実装したCSVファイルを取り込みJSON形式に変換する処理のテストを実装してみたので、そのサンプルプログラムを共有する。
前提条件
下記記事の実装が完了していること。
また、下記記事の「pytestのインストール」が完了していること。
サンプルプログラムの作成
作成したサンプルプログラムの構成は、以下の通り。

なお、上記の赤枠は、前提条件のプログラムから追加したプログラムである。
__init__.py は以下の通りで、空ファイルであるが、demo_testフォルダ内でpytestが実行できるようにしている。

また、test_import_csv.pyの内容は以下の通りで、csvフォルダ内の「user_data.csv」を読み込み、テスト用クライアントでviews.pyのimport_csvメソッドを呼び出し、戻り値が「user_data.json」と一致していることを確認している。
import pytest
import os
from six import BytesIO
from demo import app
# views.pyのメソッドを呼び出すための処理
@pytest.fixture
def create_client():
app.config['TESTING'] = True
return app.test_client()
# 引数で指定されたCSVファイルを読み込む処理
@pytest.fixture
def read_csv_binary():
def _read_csv_binary(file_name):
csv_dir = os.path.dirname(__file__) + "\\csv\\"
csv_data = ""
with open(csv_dir + file_name, 'rb') as f:
csv_data = f.read()
return csv_data
return _read_csv_binary
# 引数で指定されたJSONファイルを読み込む処理
@pytest.fixture
def read_json():
def _read_json(file_name, encoding):
json_dir = os.path.dirname(__file__) + "\\json\\"
json_data = ""
with open(json_dir + file_name, 'r', encoding=encoding) as f:
json_data = f.read()
return json_data
return _read_json
# CSV取込ボタン押下処理のテスト
def test_import_csv(create_client, read_csv_binary, read_json):
# CSVファイルを読み込み、views.pyのimport-csvメソッドを呼び出す
csv_data = read_csv_binary('user_data.csv')
test_data = dict()
test_data['csv_data'] = (BytesIO(csv_data), 'user_data.csv')
result = create_client.post('/import-csv', data=test_data)
# HTTPステータスコードが正常(200)であることを確認
assert 200 == result.status_code
# 読み込んだCSVファイルの内容が、想定通りのJSON形式で出力できていることを確認
json_data = read_json('user_data.json', encoding='utf-8')
assert json_data == result.data.decode('utf-8')
その他、「user_data.csv」、「user_data.json」の内容は以下の通り。


その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/python/tree/master/make-flask-csv-to-json-pytest/

サンプルプログラムの実行結果
サンプルプログラムの実行結果は、以下の通り。
1) PyCharmで「test_import_csv.py」を選択し右クリックし、「Python テスト」メニューを選択すると、以下のように「test_import_csv.py」の実行結果が確認できる。


2) コマンドプロンプトでdemo_testフォルダに移動し、pytestコマンドでtest_import_csv.pyを実行した結果は以下の通りで、正常に実行できていることが確認できる。

要点まとめ
- Flaskで実装したCSVファイルを取り込みJSON形式に変換する処理についても、pytestによって、テストコードを作成することができる。





