以前用過testNG自帶的測試報告、優化過reportNG的測試報告、extentreport、Zreport(大飛總原創),這些是我以前都用過的,也是在去年雯姐和我說過Allure2這個報告不錯,一直沒時間,正巧最近有用到,接觸下發現確實是個神器。java
Allure(已經有allure2了,小編用的就是allure2),生成的測試報告與上述對比,簡直堪稱完美!先上個測試報告的圖表,給你們直觀感覺下:git
下面讓咱們一塊兒走進Allure的世界,跟上步伐,相信我這一切並不難github
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>allure-demo</groupId> <artifactId>allure-demo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <allure.version>2.10.0</allure.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <aspectj.version>1.9.2</aspectj.version> <suiteXmlFile>src/test/resources/suite/test-moudle/testng.xml</suiteXmlFile> </properties> <dependencies> <dependency> <groupId>selenium-server-standalone</groupId> <artifactId>selenium-server-standalone</artifactId> <version>3.9.1</version> </dependency> <dependency> <groupId>io.qameta.allure</groupId> <artifactId>allure-testng</artifactId> <version>${allure.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-all</artifactId> <version>1.3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.14.3</version> </dependency> <dependency> <groupId>io.qameta.allure</groupId> <artifactId>allure-java-commons</artifactId> <version>2.10.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> <configuration> <argLine> -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar" </argLine> <suiteXmlFiles> <!--該文件位於工程根目錄時,直接填寫名字,其它位置要加上路徑--> <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile> </suiteXmlFiles> </configuration> <dependencies> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${aspectj.version}</version> </dependency> </dependencies> </plugin> </plugins> </build> <reporting> <excludeDefaults>true</excludeDefaults> <plugins> <plugin> <groupId>io.qameta.allure</groupId> <artifactId>allure-maven</artifactId> <version>2.10.0</version> <configuration> <reportVersion>${allure.version}</reportVersion> </configuration> </plugin> </plugins> </reporting> </project>
在Jenkins插件管理中,搜索Allure便可apache
保存便可maven
此時再經過Jenkins構建並執行測試代碼後,就能夠看到Allure的測試報告了。以上,完成了Allure的基本配置。ide
一、註解:工具
我只列舉一些經常使用的註解,其餘的能夠自行去官網查閱測試
//用例編號 @TmsLink("562") //bug編號 @Issue("4042") //bug嚴重等級,優先級,包含blocker, critical, normal, minor, trivial 幾個不一樣的等級 @Severity(SeverityLevel.TRIVIAL) //用例描述 @Description("測試一個流程,用做迴歸冒煙測試")
添加@TmsLink, @Issue註解後,在allure report中會生成相應的連接,可是它是如何訪問咱們的缺陷管理系統以及用例管理系統給的呢,在官網文檔有說明。優化
查看文檔發現,須要有一個配置文件,將咱們系統域名預先設置好,再將{}的內容使用註解進行替換,這樣就能訪問到咱們想範文的鏈接了。可是官方並無說明這個配置文件的具體配置,好在官方有一些簡單的小demo可供產考;ui
這是官方的testng的demo地址https://github.com/allure-examples/allure-testng-example/tree/master/src/test/resources
能夠看到它有一個文件名叫作allure.properties
這是文件的內容
allure.results.directory=target/allure-results allure.link.issue.pattern=https://example.org/issue/{} allure.link.tms.pattern=https://example.org/tms/{}
第一個應該是默認的輸出路徑,暫時未用到先不研究,將你須要訪問的url替換就能夠,好比:
allure.link.issue.pattern=http://jira.XXX.com/browse/{} allure.link.tms.pattern=http://testlink.XXX.com/{}
這裏須要注意一點,allure.properties的位置必須是跟你路徑下的test同級不然會找不到這個文件;
我用的是idea建立的maven項目
最終效果以下:
allure最吸引個人地方是,不用存到本地,它能將selenium的截圖放到report中
第一步:寫一個監聽類,當執行失敗自動截圖
package com.allure.demo; import io.qameta.allure.Attachment; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.testng.ITestResult; import org.testng.TestListenerAdapter; public class TestFailListener extends TestListenerAdapter { @Override public void onTestFailure(ITestResult result) { screenshot(); } @Attachment(value = "screen shot",type = "image/png") public byte[] screenshot(){ byte[] screenshotAs = ((TakesScreenshot)GetDriver.driver).getScreenshotAs(OutputType.BYTES); return screenshotAs; } }
第二步:在測試類上,添加Listeners的註解
package com.allure.demo; import io.qameta.allure.*; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.testng.Assert; import org.testng.annotations.*; import java.util.concurrent.TimeUnit; @Epic("百度查詢功能測試") @Feature("百度查詢功能") @Listeners(TestFailListener.class) public class AllureDemo { static WebDriver driver; static final int MAX_TIMEOUT_IN_SECONDS = 5; @BeforeClass public static void beforeClass() throws Exception { driver = new GetDriver().getDriver(); String url = "https://www.baidu.com/"; driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(MAX_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS); driver.get(url); } //用例編號 @TmsLink("562") //bug編號 @Issue("4042") //bug嚴重等級,優先級,包含blocker, critical, normal, minor, trivial 幾個不一樣的等級 @Severity(SeverityLevel.TRIVIAL) //用例描述 @Description("測試一個流程,用做迴歸冒煙測試") /** *功能塊,具備相同feature或astory的用例將規整到相同模塊下,執行時可用於篩選 */ @Story("查詢場景-正向查詢功能") @Test(description = "驗證百度查詢功能", dataProvider = "testDemo") public void testDemo(String key) throws Exception { driver.findElement(By.id("kw")).clear(); driver.findElement(By.id("kw")).sendKeys(key, Keys.ENTER); Thread.sleep(3000); Assert.assertEquals(driver.getTitle(), key + "_百度搜索"); if (key.equals("java")){ Assert.assertEquals(driver.getTitle(),"斷言失敗!"); } } @AfterClass public static void tearDownAfterClass() { if (driver != null) { System.out.println("運行結束!"); driver.quit(); } } @DataProvider(name = "testDemo") public Object[][] testDemo() { return new Object[][]{ {"軟件測試君"}, {"refain 博客園"}, {"java"}, }; } }
截圖效以下圖:
是否是很nice,還不動手試一試········