テストドキュメンテーションの自動化という夢想
テストのドキュメントを自動生成したい。ユニットテスト・フレームワーク一覧を探したけど、よさそうなのがない。希望としては
- 単体テスト、総合テストでも使える
- HTMLで出力する
- 結果の一覧を確認できる
- テストの手順を出力できる
こんな感じで
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html;charset=CP932"/> <title>Testing Summery</title> <link rel="stylesheet" href="style.css" type="text/css" /> </head> <body id="top"> <h1>1. Test Overview</h1> <table border="1"> <tr> <th>Project</th> <td>Test Project</td> </tr> <tr> <th>Sub Project</th> <td>Sub Test Project</td> </tr> <tr> <th>Module</th> <td>Module Name</td> </tr> <tr> <th>Sub Module</th> <td>Sub Module Name</td> </tr> <tr> <th>Test Date</th> <td>2012-03-04 </td> </tr> </table> <br/> <h1>2. Test Result</h1> <h2>2.1. Functional Requirement</h2> <table border="1"> <tr> <th>1st Category</th> <th>2nd Category</th> <th>3rd Category</th> <th>ID</th> <th>Description</th> <th>Count</th> <th>Pass</th> <th>Result</th> <th>Comment</th> </tr> <tr> <td rowspan="5">Function A1</td> <td rowspan="2">Sub-Func A1</td> <td>Sub-Sub A1</td> <td> <a href="detail.html#a1-1-1">a1-1-1</a> </td> <td><br/></td> <td>0</td> <td>0</td> <td class="None">--</td> <td><br/></td> </tr> <tr> <td>Sub-Sub A2</td> <td> <a href="detail.html#a1-1-2">a1-1-2</a> </td> <td><br/></td> <td>0</td> <td>0</td> <td class="None">--</td> <td><br/></td> </tr> <tr> <td rowspan="3">Sub-Func A2</td> <td>Sub-Sub A1</td> <td> <a href="detail.html#a1-2-1">a1-2-1</a> </td> <td><br/></td> <td>0</td> <td>0</td> <td class="None">--</td> <td><br/></td> </tr> <tr> <td>Sub-Sub A2</td> <td> <a href="detail.html#a1-2-2">a1-2-2</a> </td> <td><br/></td> <td>0</td> <td>0</td> <td class="None">--</td> <td><br/></td> </tr> <tr> <td>Sub-Sub A3</td> <td> <a href="detail.html#a1-2-3">a1-2-3</a> </td> <td>Description XXX</td> <td>2</td> <td>1</td> <td class="NG">NG</td> <td>Comment1</td> </tr> <tr> <td rowspan="5">Function A2</td> <td rowspan="2">Sub-Func A1</td> <td>Sub-Sub A1</td> <td> <a href="detail.html#a2-1-1">a2-1-1</a> </td> <td>Description YYY</td> <td>3</td> <td>3</td> <td>OK</td> <td>Comment2</td> </tr> <tr> <td>Sub-Sub A2</td> <td> <a href="detail.html#a2-1-2">a2-1-2</a> </td> <td><br/></td> <td>0</td> <td>0</td> <td class="None">--</td> <td><br/></td> </tr> <tr> <td rowspan="3">Sub-Func A2</td> <td>Sub-Sub A1</td> <td> <a href="detail.html#a2-2-1">a2-2-1</a> </td> <td><br/></td> <td>0</td> <td>0</td> <td class="None">--</td> <td><br/></td> </tr> <tr> <td>Sub-Sub A2</td> <td> <a href="detail.html#a2-2-2">a2-2-2</a> </td> <td><br/></td> <td>0</td> <td>0</td> <td class="None">--</td> <td><br/></td> </tr> <tr> <td>Sub-Sub A3</td> <td> <a href="detail.html#a2-2-3">a2-2-3</a> </td> <td><br/></td> <td>0</td> <td>0</td> <td class="None">--</td> <td><br/></td> </tr> </table> <p>Pass/Total = 4/5 = 80.00%</p> <h2>2.2. Non-Functional Requirement</h2> <table border="1"> <tr> <th>1st Category</th> <th>2nd Category</th> <th>3rd Category</th> <th>ID</th> <th>Description</th> <th>Count</th> <th>Pass</th> <th>Result</th> <th>Comment</th> </tr> <tr> <td rowspan="5">Function B1</td> <td rowspan="2">Sub-Func B1</td> <td>Sub-Sub B1</td> <td> <a href="detail.html#b1-1-1">b1-1-1</a> </td> <td>Description ZZZ</td> <td>1</td> <td>1</td> <td>OK</td> <td>Comment3</td> </tr> <tr> <td>Sub-Sub B2</td> <td> <a href="detail.html#b1-1-2">b1-1-2</a> </td> <td><br/></td> <td>0</td> <td>0</td> <td class="None">--</td> <td><br/></td> </tr> <tr> <td rowspan="3">Sub-Func B2</td> <td>Sub-Sub B1</td> <td> <a href="detail.html#b1-2-1">b1-2-1</a> </td> <td><br/></td> <td>0</td> <td>0</td> <td class="None">--</td> <td><br/></td> </tr> <tr> <td>Sub-Sub B2</td> <td> <a href="detail.html#b1-2-2">b1-2-2</a> </td> <td><br/></td> <td>0</td> <td>0</td> <td class="None">--</td> <td><br/></td> </tr> <tr> <td>Sub-Sub B3</td> <td> <a href="detail.html#b1-2-3">b1-2-3</a> </td> <td><br/></td> <td>0</td> <td>0</td> <td class="None">--</td> <td><br/></td> </tr> </table> <p>Pass/Total = 1/1 = 100.00%</p> <h2>2.3. Performance Measurement</h2> <p>TBD</p> <a href="detail.html">Go to detailed</a> <a href="#top">Go to top</a> </body> </html>
detail.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html;charset=CP932"/> <title>Test Detailed Results</title> <link rel="stylesheet" href="style.css" type="text/css" /> </head> <body id="top"> <h1 id="a1-2-3">1. Test ID a1-2-3</h1> <h2>1.1. Test Case Infomation</h2> <table border="1"> <tr> <th>ID</th> <td>a1-2-3</td> </tr> <tr> <th>Classify</th> <td>Function A1/Sub-Func A2/Sub-Sub A3</td> </tr> <tr> <th>Description</th> <td>Description XXX</td> </tr> <tr> <th>Condition</th> <td>Cond</td> </tr> <tr> <th>Valid</th> <td>Valid</td> </tr> <tr> <th>Note</th> <td>Note</td> </tr> </table> <br/> <h2>1.2. Test Pattern</h2> <table border="1"> <tr> <th>No.</th> <th>Pattern</th> <th>Note</th> </tr> <tr> <td>1</td> <td>Pattern1</td> <td>Note1</td> </tr> <tr> <td>2</td> <td>Pattern2</td> <td>Note2</td> </tr> </table> <br/> <h2>1.3. Test Steps</h2> <table border="1"> <tr> <th>Step</th> <th>Process</th> <th>Expect</th> <th>Result</th> <th>Note</th> </tr> <tr> <td>1</td> <td>Process 1</td> <td>Expect 1</td> <td>OK</td> <td><br/></td> </tr> <tr> <td>2</td> <td>Process 2</td> <td>Expect 2</td> <td class="NG">NG</td> <td><br/></td> </tr> </table> <br/> <h1 id="a2-1-1">2. Test ID a2-1-1</h1> <h2>2.1. Test Case Infomation</h2> <table border="1"> <tr> <th>ID</th> <td>a2-1-1</td> </tr> <tr> <th>Classify</th> <td>Function A2/Sub-Func A1/Sub-Sub A1</td> </tr> <tr> <th>Description</th> <td>Description YYY</td> </tr> <tr> <th>Condition</th> <td>Cond</td> </tr> <tr> <th>Valid</th> <td>Valid</td> </tr> <tr> <th>Note</th> <td>Note</td> </tr> </table> <br/> <h2>2.2. Test Pattern</h2> <table border="1"> <tr> <th>No.</th> <th>Pattern</th> <th>Note</th> </tr> <tr> <td>1</td> <td>Pattern1</td> <td>Note1</td> </tr> <tr> <td>2</td> <td>Pattern2</td> <td>Note2</td> </tr> </table> <br/> <h2>2.3. Test Steps</h2> <table border="1"> <tr> <th>Step</th> <th>Process</th> <th>Expect</th> <th>Result</th> <th>Note</th> </tr> <tr> <td>1</td> <td>Process 1</td> <td>Expect 1</td> <td>OK</td> <td><br/></td> </tr> <tr> <td>2</td> <td>Process 2</td> <td>Expect 2</td> <td>OK</td> <td><br/></td> </tr> <tr> <td>3</td> <td>Process 3</td> <td>Expect 3</td> <td>OK</td> <td><br/></td> </tr> </table> <br/> <h1 id="b1-1-1">3. Test ID b1-1-1</h1> <h2>3.1. Test Case Infomation</h2> <table border="1"> <tr> <th>ID</th> <td>b1-1-1</td> </tr> <tr> <th>Classify</th> <td>Function B1/Sub-Func B1/Sub-Sub B1</td> </tr> <tr> <th>Description</th> <td>Description ZZZ</td> </tr> <tr> <th>Condition</th> <td>Cond</td> </tr> <tr> <th>Valid</th> <td>Valid</td> </tr> <tr> <th>Note</th> <td>Note</td> </tr> </table> <br/> <h2>3.2. Test Pattern</h2> <table border="1"> <tr> <th>No.</th> <th>Pattern</th> <th>Note</th> </tr> <tr> <td>1</td> <td>Pattern1</td> <td>Note1</td> </tr> <tr> <td>2</td> <td>Pattern2</td> <td>Note2</td> </tr> </table> <br/> <h2>3.3. Test Steps</h2> <table border="1"> <tr> <th>Step</th> <th>Process</th> <th>Expect</th> <th>Result</th> <th>Note</th> </tr> <tr> <td>1</td> <td>Process 1</td> <td>Expect 1</td> <td>OK</td> <td><br/></td> </tr> </table> <br/> <a href="index.html">Go to index</a> <a href="#top">Go to top</a> </body> </html>
style.css
th { background-color : PaleGreen; text-align : left; } td.NG { background-color : Red; font-weight : bold; } td.None { background-color : Yellow; } h1 { border-top : 4px solid Blue; border-bottom : 1px solid Blue; background-color : SkyBlue; color : Blue; } h2 { border-top : 1px solid Black; color : Black; font-weight : bold; }