自動化測試報表統一平臺 ReportPortal 集成 TestNG
本文主要介紹 ReportPortal 如何集成 TestNG 測試框架,用到的工具鏈有:ReportPortal + TestNG + log4j。ReportPortal 集成 TestNG 的主要原理是通過給 TestNG 配置 ReportPortal 的 listener,在測試開始時該監聽器將測試信息實時上報給 ReportPortal 平臺。另外我們通過給 log4j 配置 ReportPortal appender,將測試過程中代碼日誌也上報到 ReportPortal 平臺。然後 ReportPortal 將收到的數據進行整合、分析,形成平臺數據統一展示。
ReportPortal 簡介
ReportPortal 是一個統一的自動化測試報告收集、分析、可視化平臺,可以集成多種測試框架,比如 TestNG、Selenium 等等。ReportPortal 的主要特性有:
- 能輕易和多種測試框架集成;
- 實時展示測試情況;
- 所有的自動化測試結果在一個地方統一查看;
- 保留歷史測試信息;
- 能和 bug 跟蹤系統集成,比如 Jira;
ReportPortal 解決了什麼問題
個人認爲 ReportPortal 最大的價值在於報表的統一收集、查看、分析。假如沒有 ReportPortal 工具,我們可能需要自己寫腳本,或者 Jenkins 插件針對不同的測試框架裝不同的插件,然後展示測試報告,但是 Jenkins 收集的測試報告只能在 Jenkins 平臺查看。微服務拆分細、導致 Jenkins job 數量比較多,要看每次測試的報告要逐個點開進去查看,沒有一個全局的地方查看。另外 Jenkins 本身的插件生態提供的測試報告收集不支持對歷史測試報告的統一查詢,如果有這種需求,基本不能滿足。
ReportPortal 基本是全測試框架支持的統一報表收集、分析、可視化平臺,能輕鬆解決上存在的痛點。
ReportPortal 在 CI/CD 中扮演了什麼角色
CI/CD 我們已經很熟悉了,但是如何將 CI/CD 與 CT 無縫整合,也許 ReportPortal 在 CI/CD 與 CT 的整合中扮演了重要角色。DevOps 的關鍵在於自動化統一標準、流程,根據 ReportPortal 的特性及本人的試用,發現 ReportPortal 真是對 CI/CD 完美的補充,整個交付流水線更加統一、規範、簡潔、無縫銜接。
ReportPortal + TestNG + log4j 集成詳細步驟
以一個基於 TestNG 測試框架的 java 工程爲例說明,配置前 java 工程目錄結構:
.
├── pom.xml
├── README.md
├── run.sh
└── src
├── main
│ ├── java
│ │ └── com
│ └── resources
│ ├── config.properties
│ ├── dev.yml
│ ├── log4j.properties
│ ├── log4testng.properties
│ ├── production.yml
│ ├── stage.yml
│ ├── test.yml
│ └── web.yml
└── test
├── java
│ └── com
└── resources
└── testng.xml
1. 配置工程 pom 文件
1.1 配置 ReportPortal 相關依賴遠程倉庫
<repositories>
<repository>
<id>bintray</id>
<url>http://dl.bintray.com/epam/reportportal</url>
</repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
1.2 添加一些依賴配置
testng 依賴
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.11</version>
</dependency>
ReportPortal agent 的 testng 實現
<dependency>
<groupId>com.epam.reportportal</groupId>
<artifactId>agent-java-testng</artifactId>
<version>4.2.1</version>
</dependency>
添加 Rport Portal 的 log 包裝以及 log4j 本身的配置
<dependency>
<groupId>com.epam.reportportal</groupId>
<artifactId>logger-java-log4j</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.26</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
1.3 maven-surefire-plugin 插件配置
說明:
src/test/resources/testng.xml:tesng 執行測試用例時讀取的文件,該文件指定執行哪些測試用例等信息;
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
<suiteXmlFiles>
<suiteXmlFilexmlFile>src/test/resources/testng.xml</suiteXmlFilexmlFile>
</suiteXmlFiles>
<properties>
<property>
<name>usedefaultlisteners</name> <!-- disabling default listeners is optional -->
<value>false</value>
</property>
</properties>
</configuration>
</plugin>
1.4 maven-compiler-plugin 插件配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
2. TestNG 配置 RportPortal listener
testng testng.xml 文件添加 RportPortal 的 listener,文件:src/test/resources/testng.xml
<listeners>
<listener class-name="com.epam.reportportal.testng.ReportPortalTestNGListener"/>
</listeners>
3. 工程添加 ReportPortal resource
src/test/resources/ 目錄添加 ReportPortal 配置文件:reportportal.properties
獲取 ReportPortal 配置:
訪問 ReportPortal UI—>點擊右上角圖標—>點擊 Profile—>拷貝右下角框框中 REQUERED 配置。
將上面獲取到的 ReportPortal 配置放到 src/test/resources/ 目錄下reportportal.properties 文件:
示例文件內容:
rp.endpoint = http://reportIp:8080
rp.uuid = xxxxx
rp.launch = superadmin_TEST_EXAMPLE
rp.project = superadmin_personal
4. 配置 log4j 的 ReportPortal appender
src/test/resources/ 目錄添加 log4j.xml 文件,主要是配置 log4j 的 ReportPortal appender,內容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="ReportPortalAppender" class="com.epam.ta.reportportal.log4j.appender.ReportPortalAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{HH:mm:ss}] %-5p (%F:%L) - %m%n"/>
</layout>
</appender>
<logger name="com.epam.reportportal.apache">
<level value="OFF"/>
</logger>
<root>
<level value="info"/>
<appender-ref ref="ReportPortalAppender"/>
</root>
</log4j:configuration>
至此相關配置已完成,工程目錄結構此時爲:
.
├── pom.xml
├── README.md
├── run.sh
└── src
├── main
│ ├── java
│ │ └── com
│ └── resources
│ ├── config.properties
│ ├── dev.yml
│ ├── log4j.properties
│ ├── log4testng.properties
│ ├── production.yml
│ ├── stage.yml
│ ├── test.yml
│ └── web.yml
└── test
├── java
│ └── com
└── resources
├── log4j.xml
├── reportportal.properties
└── testng.xml
5. 執行 mvn clean test
測試;
6. 到 ReportPortal 控制檯觀察新的 Launches 是否啓動
每次測試會在 ReportPortal 平臺對應觸發一個 Launche,包含本次構建相關信息。
7. 創建 ReportPortal Dashboard,可視化測試報告
創建 ReportPortal 的 Dashboard 很簡單,也很靈活,主要思想是 RP 提供了多種圖表,然後每個圖表配置條件,篩選出想要的 Launches 展示。
相關文檔
https://reportportal.io/docs
https://github.com/reportportal/example-java-TestNG