[Java][Python] エビデンスを印刷するためのHTMLを生成してみた。
エビデンスとは
SIerで好んで使われる試験結果の資料。
主に画面のスクリーンキャプチャの事を指し、画面遷移前後の画像を撮る事で、
正しく機能が実装されていた事を証明する。
気配りが上手い人はExcelに試験番号、タイトル、ページ番号を追加し、綺麗な資料にまとめ上げる。
200〜500枚程度のbmpをエコとか気にせず印刷することも多い。
実際に頼まれたので・・・
キャプチャ自体はWinShotなどで簡単に撮れますが、エビデンスをまとめる作業が面倒くさい。
さすがに1ファイルずつExcelにコピペとか嫌過ぎるので、PythonでサクっとHTMLを生成させてみた。
- createEvidenceHTML.py
#!/usr/bin/env python # -*- coding:utf-8 -*- import os, sys, re # 画像(bmp, jpg, gif)の判定 def isPicExt(file) : return re.search(r'\.bmp$', file) or re.search(r'\.jpg$', file) or re.search(r'\.gif$', file) # ファイルのオープン fw = open('index.html', 'w') # ヘッダ fw.write('''<html> <head></head> <body> <ul> ''') # ファイル一覧を取得 list = os.listdir('./') # HTMLに画像を書き出す。 for file in list : if isPicExt(file) : str = ' <li>' + file + '</li>\n' str = str + ' <img src="' + file + '" alt="' + file + '" hspace=10 border="1"><p>\n' fw.write(str) # フッター fw.write(''' </ul> </body> </html> ''') # クローズ fw.close()
実際に生成されるHTMLは下記のような感じです。
- index.html
<html> <head></head> <body> <ul> <li>1-1-1_画面表示機能.bmp</li> <img src="1-1-1_画面表示機能.bmp" alt="1-1-1_画面表示機能.bmp" hspace=10 border="1"><p> <li>1-1-2_ログイン機能.bmp</li> <img src="1-1-2_ログイン機能.bmp" alt="1-1-2_ログイン機能.bmp" hspace=10 border="1"><p> <li>1-1-3_ログイン失敗.bmp</li> <img src="1-1-3_ログイン失敗.bmp" alt="1-1-3_ログイン失敗.bmp" hspace=10 border="1"><p> </ul> </body> </html>
後は、Firefoxなどで印刷する大きさを調節して、両面4in1とかで印刷すればおk。
ちなみに、SXGA(1280×1024)はFirefoxで78%で丁度良い感じでした。
Pythonなんて試験マシンに入ってない(´・ω・)ッス
SIerでPythonを使えない環境のために、Javaで書いてみました。
- EvidenceHTML.java
package sample.Evidence; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; public class EvidenceHTML { private StringBuilder sb; private String picext = ".*\\.(bmp|jpg|gif)$"; public EvidenceHTML() { sb = new StringBuilder(); } public static void main(String[] args) { // HTMLの構築 EvidenceHTML html = new EvidenceHTML(); html.createHeder(); html.createBody(); html.createHooter(); try { // ファイルの書き込み BufferedWriter bw = new BufferedWriter(new FileWriter(new File( "index.html"))); bw.write(html.toString()); bw.close(); } catch (IOException e) { e.printStackTrace(); } } /** * ヘッダーを作る */ private void createHeder() { sb.append("<html>\n<head></head>\n<body>\n <ul>\n"); } /** * エビデンスのリンクを作る。 */ private void createBody() { File dir = new File("./"); for (File f : dir.listFiles()) { // ファイルの拡張子が画像ならリンクを追加する。 if (f.isFile() && f.getName().matches(picext)) { String filename = f.getName(); StringBuilder str = new StringBuilder(); str.append(" <li>" + filename + "</li>\n"); str.append(" <img src=\"" + filename + "\" alt=\"" + filename + "\" hspace=10 border=\"1\"><p>\n"); sb.append(str); } } } /* * フッターを作る */ private void createHooter() { sb.append(" </ul>\n</body>\n</html>"); } @Override public String toString() { return sb.toString(); } }
Java1.3だと動きません。・゚・(ノД`)・゚・。
世の中にはJDK1.3とかいう時代遅れで化石な環境もある訳で、対応させてみた。
- EvidenceHTML13.java
package sample.Evidence; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; public class EvidenceHTML13 { private StringBuffer sb; public EvidenceHTML13() { sb = new StringBuffer(); } public static void main(String[] args) { // HTMLの構築 EvidenceHTML13 html = new EvidenceHTML13(); html.createHeder(); html.createBody(); html.createHooter(); try { // ファイルの書き込み BufferedWriter bw = new BufferedWriter(new FileWriter(new File( "index.html"))); bw.write(html.toString()); bw.close(); } catch (IOException e) { e.printStackTrace(); } } /** * ヘッダーを作る */ private void createHeder() { sb.append("<html>\n<head></head>\n<body>\n <ul>\n"); } /** * エビデンスのリンクを作る。 */ private void createBody() { File[] list = new File("./").listFiles(); for (int i = 0; i < list.length; i++) { // ファイルの拡張子が画像ならリンクを追加する。 if (isPicExt(list[i])) { String filename = list[i].getName(); StringBuffer str = new StringBuffer(); str.append(" <li>" + filename + "</li>\n"); str.append(" <img src=\"" + filename + "\" alt=\"" + filename + "\" hspace=10 border=\"1\"><p>\n"); sb.append(str); } } } /** * ファイルが画像(.bmp|.jpg|.gif)であるか判定する。 * * @param file * 判定するファイル * @return ファイルの拡張子が画像なら<code>true</code>、異なるなら<code>false</code> */ private boolean isPicExt(File file) { if (file.isFile()) { if (file.getPath().endsWith(".bmp") || file.getPath().endsWith(".jpg") || file.getPath().endsWith(".gif")) { return true; } } return false; } /* * フッターを作る */ private void createHooter() { sb.append(" </ul>\n</body>\n</html>"); } public String toString() { return sb.toString(); } }
自宅に1.3環境が無かったので、テスト出来てないけどたぶん大丈夫なハズ。
JDK1.3だとアノテーション、拡張for、StringBuilder、正規表現が使えないのか・・・