Devel::NYTProf::Apache - search.cpan.org
perlでtest coverageというとDevel::Coverですが、周りでは(自動)単体テストを採用していないアプリが殆ど。そこでDevel::NYTProf::Apacheを使ってmod_perl2(cgi)の(実行)カバレッジ計測を試してみた。
step1/2) httpd.conf
次の行を追加して下さい。
Devel::NYTProf::ApacheのドキュメントにはMaxClients=1でclient(worker?)を制限するよう記載されていますが、テスト実行時の動作が余りに遅かったので、私の場合、この制限は行なっていません。
PerlPassEnv NYTPROF #MaxClients 1 PerlModule Devel::NYTProf::Apache PerlSetEnv NYTPROF file=/home/endo/dev_data/nytprof/nytprof.out:addpid=1:endatexit=1
step2/2) nytprof.out.$$ のマージとhtml化
先程のhttpd.confの設定で nytprof.out.プロセスID のファイルが複数生成されるので、nytprofmerge でマージし、nytprofhtmlでhtmlに変換します。
$ cd /home/endo/dev_data/nytprof # nytprof-merged.out というファイルが生成されます $ nytprofmerge nytprof.out.* # nytprofhtmlを実行したdirにnytprofがmkdirされ、大量のhtml等が生成されます $ nytprofhtml -f nytprof-merged.out
生成されたhtmlの一覧
$ cd /home/endo/dev_data/nytprof/nytprof $ ls -l *XXXX*html* -rw-rw-r-- 1 endo endo 55082 Sep 7 19:20 home-endo-dev-XXXX-lib-XXXX-Config-pm-56-block.html -rw-rw-r-- 1 endo endo 55142 Sep 7 19:21 home-endo-dev-XXXX-lib-XXXX-Config-pm-56-line.html -rw-rw-r-- 1 endo endo 54672 Sep 7 19:19 home-endo-dev-XXXX-lib-XXXX-Config-pm-56-sub.html -rw-rw-r-- 1 endo endo 29944 Sep 7 19:20 home-endo-dev-XXXX-lib-XXXX-CtrlPage-AnkenList-pm-198-block.html -rw-rw-r-- 1 endo endo 30435 Sep 7 19:21 home-endo-dev-XXXX-lib-XXXX-CtrlPage-AnkenList-pm-198-line.html -rw-rw-r-- 1 endo endo 29866 Sep 7 19:19 home-endo-dev-XXXX-lib-XXXX-CtrlPage-AnkenList-pm-198-sub.html -rw-rw-r-- 1 endo endo 314303 Sep 7 19:20 home-endo-dev-XXXX-lib-XXXX-CtrlPage-Juchuu-pm-746-block.html -rw-rw-r-- 1 endo endo 318289 Sep 7 19:22 home-endo-dev-XXXX-lib-XXXX-CtrlPage-Juchuu-pm-746-line.html -rw-rw-r-- 1 endo endo 313751 Sep 7 19:19 home-endo-dev-XXXX-lib-XXXX-CtrlPage-Juchuu-pm-746-sub.html :
生成されたhtmlの一例
Devel::NYTProf::Apacheはパフォーマンス改善の為、遅いmodule, subroutineを特定に使われることが多いようですが、テスト漏れの検知にも使える気がします。
NYTProfをコマンドラインアプリで利用する
$ /usr/local/bin/perl -d:NYTProf foo.pl $ /usr/local/bin/nytprofhtml
で、上記と同様に nytprof/index.html が生成されます。