🔍

Windowsでpg_proveを使ってpgTAPテストを自動化する方法

に公開

✅ はじめに

PostgreSQLでpgTAPを使ってユニットテストを行うと、
関数やトリガの品質を自動で検証できます。

さらに、pg_prove を使うと、複数のSQLテストファイルをまとめて実行し、
TAP形式のレポートを取得できます。

本記事では、
Windows環境 + Strawberry Perl + pg_prove を使ったテスト自動化の手順をまとめます。


✅ 前提条件

  • PostgreSQL(Windows版)
  • pgTAPインストール済み(CREATE EXTENSION pgtap; で確認)
  • Strawberry Perl

✅ 手順概要

  1. Strawberry Perlをインストール
  2. CPANを初期化
  3. cpanmを導入
  4. PostgreSQLクライアントライブラリを準備
  5. Perlモジュールをインストール
  6. pg_proveでテストを実行
  7. バッチで自動化

✅ 1. Strawberry Perlをインストール

pg_prove は Perl モジュール App::ProveTAP::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