package com.test.testng;
import org.testng.IReporter;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.testng.IResultMap;
import org.testng.ISuite;
import org.testng.ISuiteResult;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.xml.XmlSuite;
public class NewReport implements IReporter {
@Override
public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) {
List<ITestResult> list = new ArrayList<ITestResult>();
for (ISuite suite : suites) {
Map<String, ISuiteResult> suiteResults = suite.getResults();
for (ISuiteResult suiteResult : suiteResults.values()) {
ITestContext testContext = suiteResult.getTestContext();
IResultMap passedTests = testContext.getPassedTests();
IResultMap failedTests = testContext.getFailedTests();
IResultMap skippedTests = testContext.getSkippedTests();
IResultMap failedConfig = testContext.getFailedConfigurations();
list.addAll(this.listTestResult(passedTests));
list.addAll(this.listTestResult(failedTests));
list.addAll(this.listTestResult(skippedTests));
list.addAll(this.listTestResult(failedConfig));
}
}
this.sort(list);
this.outputResult(list, outputDirectory+"/test.txt");
}
private ArrayList<ITestResult> listTestResult(IResultMap resultMap){
Set<ITestResult> results = resultMap.getAllResults();
return new ArrayList<ITestResult>(results);
}
private void sort(List<ITestResult> list){
Collections.sort(list, new Comparator<ITestResult>() {
@Override
public int compare(ITestResult r1, ITestResult r2) {
if(r1.getStartMillis()>r2.getStartMillis()){
return 1;
}else{
return -1;
}
}
});
}
private void outputResult(List<ITestResult> list, String path){
try {
BufferedWriter output = new BufferedWriter(new FileWriter(new File(path)));
StringBuffer sb = new StringBuffer();
for (ITestResult result : list) {
if(sb.length()!=0){
sb.append("\r\n");
}
sb.append(result.getTestClass().getRealClass().getName())
.append(" ")
.append(result.getMethod().getMethodName())
.append(" ")
.append(this.formatDate(result.getStartMillis()))
.append(" ")
.append(result.getEndMillis()-result.getStartMillis())
.append("毫秒 ")
.append(this.getStatus(result.getStatus()));
}
output.write(sb.toString());
output.flush();
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private String getStatus(int status){
String statusString = null;
switch (status) {
case 1:
statusString = "SUCCESS";
break;
case 2:
statusString = "FAILURE";
break;
case 3:
statusString = "SKIP";
break;
default:
break;
}
return statusString;
}
private String formatDate(long date){
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return formatter.format(date);
}
}
测试类:
package com.test.testng;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.*;
import static org.testng.AssertJUnit.*;
/**
* @Author chunmei deng
* @Description 测试Demo
* @Date 2021/3/21
*/
@Listeners({DotTestListener.class,NewReport.class})
public class TestDemo {
public WebDriver driver;
@BeforeTest
public void init() {
String url = "http://www.baidu.com";
//新建一个浏览器句柄
driver = new Brower().firefox();
//driver = (WebDriver) new FirefoxDriver();
//打开URL
driver.get(url);
}
@Test
@Parameters("searchWord")
public void search(String searchWord) throws InterruptedException {
//输入搜索字符串
driver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys(searchWord);
//点击[百度一下]按钮
driver.findElement(By.xpath("//*[@id=\"su\"]")).click();
Thread.sleep(2000);
}
@Test
public void verifyLastName() {
String m_lastName = "Beust";
assert "Beust".equals(m_lastName) : "Expected name Beust, for" + m_lastName;
}
@Test
public void verify() {
String m_lastName = "Beust1";
assertEquals("Beust", m_lastName);
}
@Test(dependsOnMethods = "verify")
public void dependtest(){
System.out.println("dependtest");
}
@BeforeMethod
public void beforeMethod(){
System.out.println("beforeMethod");
}
@AfterMethod
public void afterMethod(){
System.out.println("afterMethod");
}
@BeforeClass
public void beforeClass(){
System.out.println("beforeClass");
}
@AfterClass
public void afterClass(){
System.out.println("afterClass");
}
@BeforeSuite
public void beforeSuite(){
System.out.println("beforeSuite");
}
@AfterSuite
public void afterSuite(){
System.out.println("afterSuite");
}
@AfterTest
public void teardown() {
driver.quit();
}
}
测试结果:存储在test-output文件夹里面,test.txt