[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なんて試験マシンに入ってない(´・ω・)ッス

SIerPythonを使えない環境のために、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();
	}

}


これで、Javaしか入ってないSIerでも大丈夫!

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、正規表現が使えないのか・・・

追記

1つのhtmlで300枚のbmpを表示させようとすると、Firefoxの使用メモリが1.0Gを超えたりします。
スペックが低いマシンでは、枚数チェックしてindex1.html、index2.html・・・と分けるように改造した方がいいかも。