🔍
Windowsでpg_proveを使ってpgTAPテストを自動化する方法
✅ はじめに
PostgreSQLでpgTAPを使ってユニットテストを行うと、
関数やトリガの品質を自動で検証できます。
さらに、pg_prove
を使うと、複数のSQLテストファイルをまとめて実行し、
TAP形式のレポートを取得できます。
本記事では、
Windows環境 + Strawberry Perl + pg_prove を使ったテスト自動化の手順をまとめます。
✅ 前提条件
- PostgreSQL(Windows版)
- pgTAPインストール済み(
CREATE EXTENSION pgtap;
で確認) - Strawberry Perl
✅ 手順概要
- Strawberry Perlをインストール
- CPANを初期化
- cpanmを導入
- PostgreSQLクライアントライブラリを準備
- Perlモジュールをインストール
- pg_proveでテストを実行
- バッチで自動化
✅ 1. Strawberry Perlをインストール
pg_prove
は Perl モジュール App::Prove
と TAP::Parser::SourceHandler::pgTAP
により
動作します。
Windowsでこれを使うには、Strawberry Perl が最も簡単です。
インストール方法
wingetコマンドで簡単インストールします。
winget install --id StrawberryPerl.StrawberryPerl
✅ 2. CPANを初期化
初回のみCPANの設定を行います。
cpan
Enterキーでデフォルト設定を受け入れてOK。
✅ 3. cpanm(簡易インストーラ)を導入
cpan App::cpanminus
✅ 4. PostgreSQLクライアントライブラリの準備
DBD::Pg をインストールするために、PostgreSQLのbinフォルダをPATHに追加します。
C:\Program Files\PostgreSQL\<version>\bin
pg_config --version
✅ 5. 必要なPerlモジュールをインストール
cpanm DBD::Pg
cpanm App::Prove
cpanm TAP::Parser::SourceHandler::pgTAP
インストール確認:
pg_prove --version
✅ 6. pg_proveでSQLテストを実行
pg_prove コマンドは、複数のSQLファイルを一括実行できます。
pg_prove --dbname=<DB名>--host=<端末名> --username=<ユーザ名> --port=5432 *.sql
ポイント
pg_prove は psql を内部で使用します。
PostgreSQLのbinフォルダがPATHに通っている必要あり。
✅ 7. バッチファイルで自動化
毎回コマンドを打たず、バッチで簡単に実行できます。
@echo off
cd /d %~dp0
set DBNAME=mydb
set HOST=localhost
set USER=postgres
set PGPASSWORD=yourpassword
set PORT=5432
for /f "tokens=1-4 delims=/ " %%a in ("%date%") do set TODAY=%%a%%b%%c
for /f "tokens=1-4 delims=:." %%a in ("%time%") do set NOW=%%a%%b%%c
set LOGFILE=pg_prove_result_%TODAY%_%NOW%.log
pg_prove --dbname=%DBNAME% --host=%HOST% --username=%USER% --port=%PORT% --verbose *.sql > "%LOGFILE%" 2>&1
if errorlevel 1 (
echo Test FAILED. See %LOGFILE%
) else (
echo Test PASSED. See %LOGFILE%
)
pause
✅ 8. よくあるエラーと対策
- SJISとUTF-8の文字化け
- 環境変数を設定:set PGCLIENTENCODING=SJIS
- pg_proveのエラー「Cannot detect source」
- .sql以外のファイルを対象にしないよう注意。
- 関数is()が存在しない
- pgTAPのis()は文字列比較が基本 → ::textでキャスト、期待値は文字列。
✅ まとめ
- WindowsでもpgTAP + pg_proveでSQLテストを自動化できる。
- Strawberry Perlはwingetでインストール可能。
- バッチスクリプトで定期実行やCI/CDに応用可能。
Discussion