ReportNG測試報告模板定制


 

部分參考:http://tech.it168.com/a2013/0906/1530/000001530755_3.shtml

 

ReportNG提供了簡單的方式來查看測試結果,並能對結果進行着色,還可以通過修改模板定制化內容,修改CSS來替換默認的輸出樣式等。為了使用ReportNG,首先我們要引入reportng-1.1.4.jar和velocity-dep-1.4.jar,或者直接導入其源代碼,進行定制化。

 

一.增加項目名稱、Android設備信息等數據。

  在ReportMetadata.java文件增加以下內容(獲得Android設備id和名稱):

 1     /**
 2      *  get Device UDID
 3      */
 4     public String getDeviceUdid() {
 5         List<String> list = getDeviceInfo();
 6         String[] split = {"", "", ""};
 7         for (int i = 0; i < list.size() - 1; i++) {
 8             if (list.get(i).contains("model:")) {
 9                 split = list.get(i).split(" ");       
10             }       
11         }
12 
13         return split[0];
14     }
15 
16     /**
17      *  get Device Name
18      */
19     public String getDeviceName() {
20         List<String> list = getDeviceInfo();
21         int index = 0;
22         String[] split = {"", "", ""};
23         
24         for (int i = 0; i < list.size() - 1; i++) {
25             if (list.get(i).contains("model:")) {
26                 index = list.get(i).indexOf("model:");
27                 split = list.get(i).substring(index + 6).split(" ");        
28             }       
29         }
30 
31         return split[0];
32     }    
33 
34     public List<String> getDeviceInfo() {
35         List<String> list = new LinkedList<String>();
36         String line = "";  
37         String command = "cmd /c adb devices -l";
38         try {
39             Process process = Runtime.getRuntime().exec(command);
40             BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));                
41             while ((line = reader.readLine()) != null) {
42                 list.add(line.toString());
43             }
44             process.waitFor();
45          
46         } catch (IOException | InterruptedException e) {
47             e.getMessage();
48         }
49         
50         return list;
51     }
52    

 

  項目名稱和服務器信息存儲到xml文件中,這里繼續在ReportMetadata.java文件讀取xml:

    /**
     * 讀取xml文件
     * @param regInfoPath string    文件路徑
     */ 
    private static Map<String, String> parserXml(String regInfoPath) {
        Map<String, String> temp = new LinkedHashMap<String, String>();
        String path = System.getProperty("user.dir");
        path += regInfoPath;
        File inputXml = new File(path);
        SAXReader saxReader = new SAXReader();    
        try {    
            Document document = saxReader.read(inputXml);   //把文件讀入到文檔 
            Element employees = document.getRootElement();      //獲取文檔根節點            
            for(Iterator<?> i = employees.elementIterator(); i.hasNext();) {                
                Element employee = (Element) i.next();   
                for(Iterator<?> j = employee.elementIterator(); j.hasNext();) { 
                    Element node = (Element) j.next();                  
                    String key = node.getName();
                    String value = node.getText();
                    temp.put(key, value);
                }
            }           
        } catch (DocumentException e) {    
            System.out.println(e.getMessage());    
        } 
        return temp;
    }
    
    /**
     * 返回節點value
     * @param key
     * @return
     */
    public static String getXmlValue(String key) {        
        Map<String, String> init = parserXml("\\data\\init.xml");
        return init.get(key);
    } 

    public static String getServer() {
        return getXmlValue("project");
    }

    public static String getXmlSetting() {
        String temp = "";
        if (getXmlValue("switch").equals("1")) {
            return "線上環境";
        } else if (getXmlValue("switch").equals("2")) {
            return "測試環境";
        }

        return temp;
    }

 

  到模板屬性文件reportng.properties里添加模板屬性:

project=Project:
setting=Server:
deviceUdid=Device Udid:
deviceName=Device Name:
createTime=Create Time:

 

  然后到模板輸出文件overview.html.vm里修改顯示內容,meta為類對象,后面為調用方法:

 1 <table id="info" align="right">  
 2   <tr>
 3     <td><b>$messages.getString("project")</b> $meta.server</td>
 4   </tr>
 5   <tr>
 6     <td><b>$messages.getString("setting")</b> $meta.xmlSetting</td>
 7   </tr>       
 8   <tr>
 9     <td><b>$messages.getString("deviceName")</b> $meta.deviceName</td>
10   </tr>
11   <tr>
12     <td><b>$messages.getString("deviceUdid")</b> $meta.deviceUdid </td>
13   </tr>
14   <tr>
15     <td><b>$messages.getString("createTime")</b> $meta.reportDate $meta.reportTime</td>
16   </tr>
17 </table>

 

二.修改模板中執行方法排序問題

  模板中的方法排序是以字母順序排序的,這里想要改成以方法的執行順序排序,到TestResultComparator.java文件中修改以下位置:

  

 1     public int compare(ITestResult result1, ITestResult result2)
 2     {
 3         int longresult2 = 0;
 4         if (result1.getStartMillis() < result2.getStartMillis()) {
 5             longresult2 = -1;
 6         } else {
 7             longresult2 = 1;
 8         }
 9 
10         return longresult2;
11 //        return result1.getName().compareTo(result2.getName());
12     }

 

三.模板中增加Case異常截圖,暫未研究。。

 

ReportNG測試報告修改后如圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM