testNG集成Allure報告--注解使用說明
前置條件
- 首先需要下載allure的zip包解壓,然后配置環境變量即可(win)。allure的GitHub下載地址:
- 然后執行testn.xml或者是單元測試下的runCase方法,兩者任選其一。測試用例執行完成后會在項目目錄下生成:allure-results文件夾
- 最后通過cmd或者IDEA 的Terminal功能,在當前項目下執行如下命令
allure serve allure-results
即可自動打開web頁面測報告
下面詳解下java版allure的注解使用
- allure簡介就不多說了官網介紹很詳細,
Allure官方地址,需要了解更多詳情異步這里
本次demo使用技術如下
-
使用springboot框架+testNG框架+Allure報告框架+管理Selenium WebDriver所需的驅動程序webdrivermanager庫+log4j2日志
-
引入上面的依賴,具體allure-javaAnnotations項目pom文件如下:
<?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>org.example</groupId>
<artifactId>allure2test</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
</parent>
<!--引入spingboot框架-->
<dependencies>
<!-- springboot starter依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<!-- 移除自帶的log -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-log4j -->
<!--引入支持的log4j2日志依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--引入allure2的依賴-->
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-testng</artifactId>
<version>2.10.0</version>
</dependency>
<!-- testng -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
</dependency>
<!--WebDriverManager是一個庫,它可以自動管理Selenium WebDriver所需的驅動程序(例如chromedriver,geckodriver等)-->
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- Allure注釋大致可分類如下:
/**@Epic -Epics可用作您的產品或項目的大量需求的占位符。Epic將在適當的時候分為較小的用戶故事。
*用戶故事可以拆分為較小的任務,並且可以是較大的Feature和Epic的一部分。
*/
@Epic
@Features
//是一個標注信息注解,但是改標注可以把相同的標注統一到相同模塊下用於篩選
@Stories/@Story
//使用@Severity批注測試缺陷等級,例如BLOCKER,CRITICAL,NORMAL,MINOR,TRIVIAL
@Severity(SeverityLevel.BLOCKER)
//測試方法描述
@Description("測試流程描述")
//@Step注釋是對任何(公共,私有,受保護)對任何方法進行注釋。例如- @Step(“輸入{0}和{1}”)
@Step
//@Attachment-附件只是帶有注釋的方法,@Attachment該方法返回String或byte [],應將其添加到報表中。我們可以將故障屏幕截圖作為附件
@Attachment
//@Links-我們可以將測試鏈接到某些資源,例如TMS(測試管理系統)或錯誤跟蹤器。將測試用例鏈接到測試方法總是有幫助的。
@Link
下面介紹每種注解的示例及報告展示
- @Description注解:描述性注解
- 示例--位置test包下的BasePageTest類中每個測試方法都加了@Description,如:
@Description("Description注解:驗證主頁面 test 2")
@Test
public void baseTest2() throws InterruptedException {
Assert.assertTrue(true, "測試示例 ");
}
對應allure報告位置截圖如下:
- @Stories/@Story注解使用(該注解可以管理同一模塊,及分組展示)
- 示例--位置同上
@Description("Description注解:驗證主頁測試1")
@Story("基礎測試")
@Test
public void baseTest1() {
System.out.println("我在test1測試中");
}
@Description("Description注解:驗證主頁面 test 2")
@Story("基礎測試")
@Test
public void baseTest2() {
Assert.assertTrue(true, "測試示例 ");
}
對應allure報告展示如下:
- @Severity注解(@Severity注解:測試的嚴重程度划分BLOCKER,CRITICAL,NORMAL,MINOR,TRIVIAL。通過查看此信息,我們可以了解測試失敗的嚴重性。)
- 示例
@Severity(SeverityLevel.TRIVIAL)
@Description("Description注解:驗證主頁測試1")
@Story("基礎測試")
@Test
public void baseTest1() {
System.out.println("我在test1測試中");
}
@Severity(SeverityLevel.BLOCKER)
@Description("Description注解:驗證主頁面 test 2")
@Story("基礎測試")
@Test
public void baseTest2() {
Assert.assertTrue(true, "測試示例 ");
}
@Severity(SeverityLevel.CRITICAL)
@Description("Description注解:驗證主頁面 test 3")
@Story("基礎測試")
@Test
public void baseTest3() {
Assert.assertTrue(false, "這是預期的失敗");
}
對應allure報告展示如下:
- @Step注解( @Step注解可以對參數化進行檢查)
- 示例
@Step("驗證參數 uname {0} and password {1}")
public boolean verifySignIn(String uname, String pwd) {
enterUserName(uname);
enterPassword(pwd);
clickOnSignIn();
return getErrorMessage().contains("不正確的");
}
@Step("輸入 username {0}")
public void enterUserName(String userName) {
WebElement emailTxtBox = driver.findElement(emailTextBox);
if (emailTxtBox.isDisplayed())
emailTxtBox.sendKeys(userName);
}
//SignInPageTest測試類
@Severity(SeverityLevel.BLOCKER)
@Description("驗證登錄功能")
@Story("測試驗證登錄")
@Test
public void verifySignInFunction() {
System.out.println("登錄功能詳細信息...");
basePage = new BasePage(driver);
signInPage = basePage.clickSignInBtn();
Assert.assertTrue(signInPage.verifySignInPageTitle(), "登錄頁面標題不匹配");
Assert.assertTrue(signInPage.verifySignInPageText(), "頁面文本不匹配");
Assert.assertTrue(signInPage.verifySignIn("usertest", "p123"), "登錄失敗");
}
對應allure報告展示如下:
- @Epic注解(在敏捷中,測試也可以按Epic,Theme和story進行分類,allure中也可以這樣標注映射關系)
- 示例
@Epic("Epic示例")
@Feature("testNG+allure集成")
public class EpicTest {
@Test
@Story("對story注釋的基本支持")
@Story("對story注釋的高級支持")
public void testSomething() throws Exception {
System.out.println("Epic注解使用");
}
}
對應allure報告展示如下:
- @Links注解(@Links可以將測試鏈接到某些資源,例如TMS(測試管理系統)或錯誤跟蹤器等
- 示例
@Link("www.baidu.com")
@Severity(SeverityLevel.TRIVIAL)
@Description("Description注解:驗證主頁測試1")
@Story("基礎測試")
@Test
public void baseTest1() {
System.out.println("我在test1測試中");
}
對應allure報告展示如下:
- @Attachment注解(@Attachment該方法返回String或byte [],應將其添加到報表中。我們可以使用該注解將異常屏幕截圖作為附件展示)
如果失敗截圖需要先創建TestFailListener類,如下:
public void onTestFailure(ITestResult result) {
System.out.println("*** 測試執行 " + result.getMethod().getMethodName() + " 失敗...");
System.out.println(result.getMethod().getMethodName() + " 失敗!");
super.onTestFailure(result);
TestBase testBase = (TestBase) result.getInstance();
//獲取驅動
WebDriver driver = testBase.getDriver();
// 在報告中附加屏幕截圖
saveFailureScreenShot(driver);
}
@Attachment(value = "失敗截圖如下:",type = "image/png")
public void saveFailureScreenShot(WebDriver driver) {
byte[] screenshotAs = ((TakesScreenshot)driver).getScreenshotAs(OutputType.BYTES);
Allure.addAttachment("失敗截圖", new ByteArrayInputStream(screenshotAs));
}
在測試類上通過@Listeners(TestFailListener.class)注解來監聽失敗用例截圖
@Listeners( TestFailListener.class)
@Epic("Epic示例")
@Feature("testNG+allure集成")
public class EpicTest {
@Test
@Story("對story注釋的基本支持")
@Story("對story注釋的高級支持")
public void testSomething() throws Exception {
System.out.println("Epic注解使用");
}
對應allure報告展示如下:
allure是一種靈活的輕量級多語言測試報告工具,它不僅可以以簡潔的網絡報告形式非常簡潔地顯示已測試的內容,而且還允許參與開發過程的每個人從日常執行中提取最大的有用信息,詳細的了解注解使用會使你的測試報告更加易讀直觀!
該項目源碼地址
更多測試技術分享、學習資源以及一些其他福利可關注公眾號:【Coding測試】獲取: