テスト説明
この文書では、EnvGeo-Seawater の現在の pytest 群が何を確認しているか、また今後どこを拡充すべきかを説明します。
テストの実行方法
プロジェクトのルートディレクトリで、全体のテストを実行します。
pytest
開発中の簡易確認では、共通ユーティリティとリポジトリ健全性テストを先に実行します。
pytest -q test/test_envgeo_utils.py test/test_repository_health.py
継続的インテグレーション
.github/workflows/ci.ymlは、push、pull request、手動起動時にLinux/Python 3.10と3.12で動作する。
requirements-dev.txtを導入してpytestを実行し、wheelを作成した後、checkout外の別venvへそのwheelを
導入する。開発/公開前repositoryのsource cloneには、事前検証用のPage 90・91を含む12ページを残す。
一方、最後のwheel検査では、インストール先、packageに収録するサポート対象の10ページ、診断ツール、
Page 90・91・99とGEBCO生成scriptの非収録を確認する。
CIの環境構築時にはパッケージindexから宣言済み依存関係を取得する。一方、テストとアプリ確認そのものは 外部タイル、外部download、実ネットワークサービスを必要としないことを原則とする。ブラウザ上の視覚確認と オンライン地図の挙動は、引き続き手動QAで確認する。
テストファイル
test/test_basic.py
基本的な import とバージョン確認です。
このファイルでは、主に次を確認しています。
envgeo_utilsを import できること。- アプリのバージョン値が利用できること。
test/test_envgeo_utils.py
envgeo_utils.py に集約した共通関数のテストです。
現在は、主に次を確認しています。
- アプリのバージョン情報。
- 品質フラグの判定基準と、短い品質基準表示文。
- 図の保存ファイル名の安全な生成。
- 共通海域プリセットと Data filtering 用のエリアプリセット範囲。
- EnvGeo、EnvGeo + Around Japan、EnvGeo + Global のデータ読み込み。
- 必須列の存在と、主要列の数値変換。
- 表計算ソフト由来の不可視空白を除去した数値変換と、pandasのPyArrow文字列での動作。
- 常時読み込み用ローカル表の結合、別パス指定、ファイルがない場合の安全な動作。
- Depth Profile 用の gap row 挿入処理。
- EnvGeo / cmocean カラーマップ共通ヘルパー。
- アップロードデータ列名の自動標準化。
- 海岸線座標の読み込み。
- d-excess 計算と欠損値の扱い。
- 抽出データ概要統計と CSV レポート生成。
test/test_data_integrity.py
公開データセットの整合性と広めの健全性チェックです。
現在は、主に次を確認しています。
- 公開データソースが空でない DataFrame として読み込めること。
- 読み込んだデータに必須列が存在すること。
**のような欠損プレースホルダーが数値列に残っていないこと。- 緯度、経度、水深、塩分などが広めの物理的範囲に収まること。
- 既知の不適切値が
NaNに変換され、元の値は品質情報として残ること。 - 不正なデータソース名では例外ではなく空の DataFrame で安全に戻ること。
test/test_repository_health.py
リポジトリ構成、公開ページ、共通ワークフローを守るためのテストです。
現在は、主に次を確認しています。
- Streamlit ページと補助ツールが Python 構文として壊れていないこと。
- README 内の画像リンクが実在するファイルを指していること。
- 公開リリースに必要な基本文書が存在すること。
- 4D Visualizer の選択データ表に品質情報列が含まれること。
- Integrated Visualizer beta にアップロードデータ重ね描き機能が残っていること。
- アップロードデータの重ね描きが WebGL 系 trace として扱われること。
- 統合ページの地図が共通海域プリセットを使うこと。
- 抽出データ概要の CSV 書き出しが利用できること。
- 品質フラグ基準が関連する表の近くに表示されること。
- Shared-filter beta のタブが読みやすい短いラベルになっていること。
- 標準地図背景が API key を要求する CARTO ではなく OpenStreetMap であること。
- Mapping ページが共通カラーマップ関数を使うこと。
- 独立 uploader が Integrated Visualizer の full-page workflow から除外されていること。
- ユーザーアップロードファイルをローカル/サーバーへ保存しない方針であること。
test/test_public_surface.py
公開向けの表面と、アクティブなソースツリーを確認するテストです。
現在は、主に次を確認しています。
- README やアプリ更新履歴に、内部的な投稿状況の表現が出ていないこと。
pages/直下には、安定ページ、明示的な beta ページ、ローカル開発用ページだけがあること。- 退役ページがアクティブな公開ソースツリーに残っていないこと。
現在のテスト範囲
現在の pytest 群は、主に次を対象にしています。
- import とバージョン情報。
- データ読み込みと数値変換。
- ローカルユーザー表の統合と、表計算データの不可視空白の正規化。
- データ品質ルール。
- 共通ユーティリティ関数。
- カラーマップ、保存ファイル名、海域プリセット、海岸線読み込みなどの作図支援。
- リポジトリ構成と公開ページの健全性。
- 開発/公開前repositoryだけで確認する、Page 90 Integrated Visualizerのアップロードデータworkflow。 安定版repositoryにはこのページを意図して含めない。
これらのテストは、リファクタリングや公開準備中のよくある破損を検出することを目的としています。
現在の限界
現在のテストでは、まだ次を十分に自動化できていません。
- Streamlit のブラウザ操作。
- 図の見た目の自動比較。
- Streamlit UI を通したアップロードファイル処理の end-to-end テスト。
- Box/Lasso 選択などの Plotly インタラクション。
- すべての図の科学的妥当性検証。
- 全球データなど大規模選択時のパフォーマンス確認。
そのため、現時点では自動テストに加えて、手動の画面確認と視覚確認も重要です。手動確認項目は docs/release_checklist.md にまとめています。
今後拡充したいテスト
優先的に拡充したい項目は次の通りです。
- ユーザーデータアップロード処理を
envgeo_utils.pyの共通関数へ移した後のテスト。 - 品質フラグと品質レポート出力のより詳細なテスト。
- 参照データとアップロードデータの両方における d-excess の挙動。
- 代表的なページワークフローの smoke test。
- Matplotlib 図の生成テスト。
- 共通サイドバーの Area filter preset の挙動確認。
- 公開/非公開ページの切り分け確認。