一、Extent Report 的功能

1、使用写好的API,非常简单。

2、美观的界面。

3、为测试运行结果提供指示板。

4、创建一个单独的报告文件,从而减少对项目文件的管理。

5、分类成单独的部分,按类别提供测试分析。

6、根据测试用例的状态生成饼图。

7、我们可以根据状态筛选报告。

8、它可以获取系统细节,如操作系统、java版本和内存等。

9、可以在报告中附加截图,这是最重要的功能。

10、轻松集成测试--跑日志。

11、可以使用外部配置文件进行大量定制。

 

二、使用Extent Report首先我们需要下载4下jar文件,然后导入的项目文件中(具体的导入操作我以前的章节中有介绍过):

1、Extent Reports Version:

https://search.maven.org/search?q=a:extentreports

2、Freemarker Version:

http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.freemarker%22%20AND%2 0a%3A%22freemarker%22

3、Jsoup Version:

http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.jsoup%22%20AND%20a%3 A%22jsoup%22

4、Sqlite-jdbc Version:

http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.xerial%22%20AND%20a%3 A%22sqlite-jdbc%22

 

三、实例演示

1、网络没有FQ的话,extent report的CSS加载是有问题的,能生成报告,但报告显示有问题,解决这个问题的办法是:重写ExtentReport这个类。

 1 package extenreports;
 2 
 3 import java.io.File;
 4 import java.util.Date;
 5 
 6 import com.aventstack.extentreports.ExtentReports;
 7 import com.aventstack.extentreports.ResourceCDN;
 8 import com.aventstack.extentreports.reporter.ExtentHtmlReporter;
 9 import com.aventstack.extentreports.reporter.configuration.ChartLocation;
10 import com.aventstack.extentreports.reporter.configuration.Theme;
11 
12 public class ExtentFactory {
13     public static ExtentReports getInstance() {
14 
15         Date date = new Date();
16         String form = String.format("%tF", date);
17         String hour = String.format("%tH", date);
18         String minute = String.format("%tM", date);
19         String second = String.format("%tS", date);
20         // 生成的路径以及文件名
21         final String OUTPUT_FOLDER = "C:\\Users\\acer\\Desktop\\其它\\ExtentReports";
22         final String FILE_NAME = "index" + form + hour + minute + second + ".html";
23 
24         // 文件夹不存在的话进行创建
25         File reportDir = new File(OUTPUT_FOLDER);
26         if (!reportDir.exists() && !reportDir.isDirectory()) {
27             reportDir.mkdir();
28         }
29 
30         ExtentHtmlReporter htmlReporter = new ExtentHtmlReporter(OUTPUT_FOLDER + FILE_NAME);
31         // 设置静态文件的DNS
32         htmlReporter.config().setResourceCDN(ResourceCDN.EXTENTREPORTS);
33         // 怎么样解决cdn.rawgit.com访问不了的情况
34         htmlReporter.config().setResourceCDN(ResourceCDN.EXTENTREPORTS);
35         htmlReporter.config().setDocumentTitle("标品页面功能自动化测试报告");
36         htmlReporter.config().setReportName("标品冒烟测试--页面功能自动化测试报告");
37         htmlReporter.config().setChartVisibilityOnOpen(true);
38         htmlReporter.config().setTestViewChartLocation(ChartLocation.TOP);
39         htmlReporter.config().setTheme(Theme.STANDARD);
40         htmlReporter.config().setCSS(".node.level-1  ul{ display:none;} .node.level-1.active ul{display:block;}");
41         htmlReporter.config().setEncoding("gbk");
42         ExtentReports extent = new ExtentReports();
43         extent.attachReporter(htmlReporter);
44         extent.setReportUsesManualConfiguration(true);
45         extent.setSystemInfo("Selenium Version", "3.11.0");
46         extent.setSystemInfo("Platform", "Windows");
47 
48         return extent;
49     }
50 }

注意:

重写ExtentReport遇到包无法导入的问题, com.aventstack.extentreports.ResourceCDN和 com.aventstack.extentreports.reporter.configuration.ChartLocation 我用的是最新的依赖,无法导入这两个包,最后按照网上的方法,改版本号为3.0.6之后就解决 了。

 2、测试案例

 1 package extenreports;
 2 
 3 import java.util.concurrent.TimeUnit;
 4 import org.openqa.selenium.By;
 5 import org.openqa.selenium.NoSuchElementException;
 6 import org.openqa.selenium.WebDriver;
 7 import org.openqa.selenium.WebElement;
 8 import org.openqa.selenium.chrome.ChromeDriver;
 9 import org.testng.Assert;
10 import org.testng.annotations.AfterClass;
11 import org.testng.annotations.BeforeClass;
12 import org.testng.annotations.Test;
13 
14 import com.aventstack.extentreports.ExtentReports;
15 import com.aventstack.extentreports.ExtentTest;
16 import com.aventstack.extentreports.Status;
17 
18 
19 public class SeleniumLoginTest {
20     
21     private WebDriver driver;
22     private String baseUrl;
23 //    使用ExtentReports高级报告,我们需要先声明以下两个变量(需要导入相对应的包,否则会报错)
24     ExtentReports reports;
25     ExtentTest test;
26 
27     @BeforeClass
28     public void beforeClass() {
29         baseUrl = "https://mail.qq.com";
30         //初始化变量
31         reports = ExtentFactory.getInstance();
32 //        括号中填写的是测试的名字
33         test = reports.createTest("Verify if login success");
34         driver = new ChromeDriver();
35 //        记录登录的日志信息
36         test.log(Status.INFO,"Browser Maxanized ............");
37         driver.manage().window().maximize();
38         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
39         test.log(Status.INFO,"Browser started ............");
40         driver.get(baseUrl);
41         test.log(Status.INFO,"Web  Application Open ............");
42 
43     }
44     
45     @Test
46     public void test1_validLoginTest() throws Exception {
47         driver.switchTo().frame("login_frame");
48         
49         WebElement dl = driver.findElement(By.className("switch_btn"));
50         dl.click();
51         
52         WebElement emailField = driver.findElement(By.id("u"));
53         emailField.sendKeys("1234567890");
54         test.log(Status.INFO,"Enter User Name ............");
55         
56         WebElement passwordField = driver.findElement(By.id("p"));
57         passwordField.sendKeys("******");
58         test.log(Status.INFO,"Enter Password ............");
59 
60         
61         WebElement goButton = driver.findElement(By.id("login_button"));
62         goButton.click();
63         test.log(Status.INFO,"Clicked on login button ............");
64 
65         WebElement welcomeText = null;
66         
67         try {
68             welcomeText = driver.findElement(By.xpath("//b[text()='****']"));
69         }
70         catch (NoSuchElementException e) {
71             System.out.println(e.getMessage());
72         }
73         Assert.assertTrue(welcomeText != null);
74         test.log(Status.PASS,"Verified Login Success............");
75 
76     }
77     
78     @AfterClass
79     public void afterClass() throws InterruptedException {
80         driver.quit();
81 //        刷新
82         reports.flush();
83     }
84 }

运行结果:在我指定的目录下生成了一个测试报告文件。

 

测试报告文件内容:

 

 错误总结:

我的ExtentReport  jar包最先是直接从网站下载然后build到我的java项目中,这就导致了我的testcase类中如果不调用该jar包中的remove方法运行时就会报错且无法成功生成测试报告文件,于是我更换了最新的ExtentReport  jar版本4.0.9,仍然无法解决。查阅了一大堆资料后仍为解决,忍无可忍只能通过maven直接在线加载ExtentReport   jar包并删除了testcase中的remove方法,最终运行成功,文件也成功生成到指定目录。(先把原先导入的包删除掉在maven新的jar包)

maven下载地址:

<dependency>

<groupId>com.aventstack</groupId>

<artifactId>extentreports</artifactId>

<version>3.0.6</version>

</dependency>

3、如何把普通项目转换为maven项目

在eclipse中找到需要转换的项目然后右击,按下图标识选择。

 

 然后点击下图的finish。

 

 成功后就可以看到项目中出现了一个pom.xml文件。

 

 打开这个文件,把上面下载的extentreports代码标签复制到xml文件中的如图所示位置,点击保存,jar包就自动下载到了项目中。

 

 

 

如果有不明白的小伙伴可以加群“555191854”问我,群里都是软件行业的小伙伴相互一起学习。

内容具有连惯性,未标注的地方可以看前面的博客,这是一整套关于ava+selenium自动化的内容,从java基础开始。

欢迎关注,转载请注明来源。

posted on 2019-10-18 11:46  时光以北暮南城  阅读(523)  评论(0编辑  收藏  举报