背景
軟件測試的最后有一道比較繁瑣的工作,就是編寫測試報告。手寫測試報告在數據統計和分析上面要耗費比較大的事件和精力。之前工作室使用mantis管理bug缺陷。公司有內部有個系統,可以直接從mantis上面獲取數據並進行統計,生成一份測試報告。后來換了一個工作室,bug缺陷管理平台也從原來的mantis 換成了redmine (http://www.redmine.org/ )。 然后走上了一條手寫測試報告的不歸路(測試人員前期還是推薦手寫測試報告的)。搞游戲的都知道,平時加班加點壓力就夠大的。急需一個接redmine的測試報告系統。
至此,交代完畢為啥要寫這么一個簡單的測試報告系統。
要求或者需求:
- 操作要足夠簡單
- 盡量獨立系統
開發技術:java/jsp
設計思路
數據來源:
照理來說,由於工作室內部自己搭的redmine,所以數據獲取應該可以直接讀取redmine 的數據庫就好了。我覺得這樣系統的依賴性較高,不夠獨立。而且問過接mantis 的測試報告系統的開發,他們是直接從mantis 上面爬取數據的。所以最終,我也是直接從redmine上爬取數據的。
數據存儲:
由於測試報告系統一般就測試人員使用(特別是動態網頁),其他人頂多也就查看靜態的測試報告也沒而已。所以系統對性能要求不高。所以沒有使用數據庫軟件,我是直接用文本文件來記錄數據。有一個原因是因為我覺得用了數據庫,需要配置、部署數據庫,萬事都相對比較麻煩。反正沒啥性能要求,直接就用文本吧。
簡單架構
系統從遠端redmine爬取數據,根據用戶選擇爬取某一個版本的數據。並且讀取測試報告模板和數據生成一份測試報告。並將測試報告發送給相應的人員和保存測試報告的靜態文件(用戶查看歷史測試報告)。
幾個核心問題和技術
- http請求——HttpClient
- 數據統計及圖片生成——JFreeChart
- 前端展示數據統計結果——Charts.js
- mail庫——mail
- 數據存儲——gson
爬取和過濾
爬取回來的是一個html文件,需要從html文件里面提取出需要的數據,這里使用正則表達式提取。
數據統計
數據統計前端主要用Charts.js 來即時展示數據的結果。由於郵件里面的js是無效的。所以最終的統計結果用JFreeChart第三方庫轉換成圖片。
數據存儲
其實用的是文本存儲,所以用的就是java的文件的讀寫操作而已。使用到了gson是因為存儲的數據用了json格式。gson很好用。
發送郵件用的是mail.jar這個庫。至於這個庫為啥我不用密碼就能夠發生出去,我也不太清楚。這可能跟郵件供應商有關系。
另外由於發生郵件需要發送圖片,這里糾結了一番。如果圖片存儲在服務器,一旦服務器不正常(停電、斷網什么的),測試報告就顯示不了圖片了。那么可以考慮使用附件發送出去。但發送附件可能會被定為垃圾郵件。最后選擇將圖片轉換成數據,直接寫入到html里面,解決噻~。下面是將圖片轉換成數據的源代碼。
/* * Convert PNG to Base64 * path the PNG path * */ public static String getBase64Png(String path) throws Exception { String msg=”"; try{ BufferedImage image = ImageIO.read(new File(path)); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(image, ”png”, baos); msg = Base64.encode(baos.toByteArray()); }catch(IOException e){ e.printStackTrace(); } return msg; }
一個小問題
我直接將redmine 地址改成redmine官方地址http://www.redmine.org ,結果爬取數據的時候報錯了。是因為我爬取一個表的時候,表結構不一樣。官方的remine 比我們工作室使用的redmine 在某個表少了一個字段。如果你也遇到了,可能需要改一下源代碼才能正常允許了。
例子
項目和版本選擇界面
測試報告編寫頁面
一個靜態的測試報告例子。直接點擊:http://www.veiyn.com/study/TestReport.html 可以查看。(點擊查看源代碼可以發現圖片是保存在html里面的)
題外
源代碼:https://github.com/rondsny/TestReport/
記得使用的時候一定要先配置config.properties 文件:
PT_URL =http://www.redmine.org #redmine平台地址 必需 MAIL_HOST =mail.test.com #郵件服務器地址 必需 MAIL_FROM =name1@test.com #默認發件人 非必需 MAIL_TOS =name2@test.com|name3@test.com #默認收件人 非必需
共勉之!
個人小博客原文地址:http://www.veiyn.com/?p=66