extentreports報告插件之extentX之服務搭建(三)


   之前兩個章節已經寫完再extentreports報告插件與testng 的集成,但是發現 每次測試完后,生成的報告都要在單獨發送,每個項目都有一份報告,如果項目多的話,管理起來就會很冗余。

   這個給大家推薦一個extent另一個服務 extentX,這是一個web程序,可以讀取數據庫(mongodb、redis)中的數據,來生成報告,只要我們把測試的數據都存儲在數據庫中,就會看到一個很完美的集合報告。

   首先,說一下服務的搭建,我這里用的是mongodb:

 

方法一、MongoDB & NodeJS 在同一台服務器上

  1. 下載安裝node.js
  2. 下載安裝mongodb
  3. 配置mongodb並運行
  4. 下載extentX,解壓到某一目錄
  5. 進入解壓目錄中,使用命令 npm install
  6. 使用命令 sails lift 啟動服務
  7. 打開瀏覽器,使用 IP+端口訪問服務,服務默認端口為 1337

方法二、MongoDB & NodeJS 不在同一台服務器上

                   其他方法同上,只需在方法一中步驟5之前執行操作,

在extentx 中配置一下mongodb 數據庫的地址

                   配置方法如下:

  1. 進入extentx目錄下的config 文件夾中
  2. 打開connections.js 文件
  3. 更改host 或者port 即可

extent: {

  adapter: 'sails-mongo',

  host: 'localhost', // change to host where MongoDB is running

  port: 27017, // change toport where MongoDB is running

  database: 'extent'

}

   4. 后面同方法一

注:使用npm安裝的過程中,可能會需要翻牆下載某些模塊

監聽中配置,將測試數據寫入到數據庫中,紅色字體為extent報告配置,其中extent.x(…..)為寫入數據庫配置。若沒有此方法,請將報告插件版本升級至 2.41.1

Maven依賴:

                

<dependency>
	<groupId>com.relevantcodes</groupId>
	<artifactId>extentreports</artifactId>
	<version>2.41.1</version>
</dependency>

 監聽代碼:

import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.testng.IReporter;
import org.testng.IResultMap;
import org.testng.ISuite;
import org.testng.ISuiteResult;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.xml.XmlSuite;

import com.relevantcodes.extentreports.DisplayOrder;
import com.relevantcodes.extentreports.ExtentReports;
import com.relevantcodes.extentreports.ExtentTest;
import com.relevantcodes.extentreports.LogStatus;
import com.relevantcodes.extentreports.NetworkMode;
import com.relevantcodes.extentreports.ReporterType;

public class ExtentReporterNGListener implements IReporter{
	
	private ExtentReports extent;
	
	
	@Override
	public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory){
		
		
        extent = new ExtentReports("report/ExtentReport.html", //生成報告文件名
        		true  // true為覆蓋已經生成的報告,false 在已有的報告上面生成,不會覆蓋舊的結果
        		,DisplayOrder.NEWEST_FIRST // 最新運行的用例結果在第一個
        		,NetworkMode.OFFLINE //online  報告的一些樣式文件需從網絡下載,生成的報告文件小   offline  樣式及js文件不會從網絡下載,生成在文件中 
        		);
		extent.x("10.202.2.1",27017);
		extent.addSystemInfo("Host Name", "Anshoo");
		extent.addSystemInfo("Environment", "QA");
        
        extent.startReporter(ReporterType.DB, "report/"); //生成本地的DB數據文件
        
        
 
        for (ISuite suite : suites) {
            Map<String, ISuiteResult> result = suite.getResults();
 
            for (ISuiteResult r : result.values()) {
                ITestContext context = r.getTestContext();
 
                buildTestNodes(context.getPassedTests(), LogStatus.PASS);
                buildTestNodes(context.getFailedTests(), LogStatus.FAIL);
                buildTestNodes(context.getSkippedTests(), LogStatus.SKIP);
            }
        }
 
        extent.flush();
        extent.close();
    }
 
    private void buildTestNodes(IResultMap tests, LogStatus status) {
        ExtentTest test;
 
        if (tests.size() > 0) {
            for (ITestResult result : tests.getAllResults()) {
                test = extent.startTest(result.getMethod().getMethodName());
 
                test.setStartedTime(getTime(result.getStartMillis()));
                test.setEndedTime(getTime(result.getEndMillis()));
 
                for (String group : result.getMethod().getGroups())
                    test.assignCategory(group);
 
                if (result.getThrowable() != null) {
              //  	test.log(status, test.addScreenCapture("../img/"+result.getMethod().getMethodName()+".png"));
                	test.log(status, result.getThrowable());
                    
                }
                else {
                    test.log(status, "Test " + status.toString().toLowerCase() + "ed");
                }
 
                extent.endTest(test);
            }
        }
    }
 
    private Date getTime(long millis) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(millis);
        return calendar.getTime();        
    }

 

最后將此監聽器添加入testng配置中,添加方法如下:

至此配置已經完畢,每次運行完測試后,請訪問一下地址查看報告。

報告效果請看官方網站:

http://extentx.herokuapp.com/#/

就不上貼圖了。大家自己去看。


免責聲明!

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



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