一、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、网络没有翻墙的话,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基础开始。
欢迎关注,转载请注明来源。