使用自定义的监听器,可以让测试代码更加易读
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.apache.log4j.Logger;
import org.testng.IResultMap;
import org.testng.ITestContext;
import org.testng.ITestNGMethod;
import org.testng.ITestResult;
import org.testng.Reporter;
import org.testng.TestListenerAdapter;
import org.testng.internal.ResultMap;
//监听器,作为系统底层,用于采集信息并输出报告内容
public class LS_Customer_Listener extends TestListenerAdapter {
private static Logger logger = Logger.getLogger(LS_Customer_Listener.class);
@Override
public void onTestStart(ITestResult itr) {
super.onTestStart(itr);
logger.info("logger>> "+itr.getName() + " method START---------->>");
doReport(itr,"Reporter "+itr.getName()+ " method START---------->> "+"<br>");
//Reporter.setCurrentTestResult(itr);
//Reporter.log("Reporter "+itr.getName()+ " method START---------->>");
}
@Override
public void onTestFailure(ITestResult itr) {
super.onTestFailure(itr);
logger.error("Error info:" + itr.getThrowable().getMessage());
//Object currentClass = itr.getInstance();
logger.info("logger>> "+itr.getName() + " method FAILURE<<----------");
doReport(itr,"Reporter "+itr.getName()+ " method FAILURE<<---------- "+"<br>");
}
@Override
public void onTestSkipped(ITestResult itr) {
super.onTestSkipped(itr);
logger.info("logger>> "+itr.getName() + " method SKIPPED<<----------");
doReport(itr,"Reporter "+itr.getName()+ " method SKIPPED<<---------- "+"<br>");
}
@Override
public void onTestSuccess(ITestResult itr) {
super.onTestSuccess(itr);
logger.info("logger>> "+itr.getName() + " method SUCCESS<<----------");
doReport(itr,"Reporter "+itr.getName()+ " method SUCCESS<<---------- "+"<br>");
}
@Override
public void onStart(ITestContext testContext) {
super.onStart(testContext);
logger.info("logger>> "+testContext.getName() + "====================Project Start====================>>");
Reporter.log("Reporter "+testContext.getName()+ "====================Project Start====================>> "+"<br>");
}
private void doReport(ITestResult itr,String itstatus) {
Reporter.setCurrentTestResult(itr);
Reporter.log(itstatus);
}
}
创建后,在测试代码中增加@Listeners注释,引用自定义的监听代码段
import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.Listeners;
import java.util.ArrayList;
import java.util.List;
import com.qa.ballon.api.listener.LS_Customer_Listener;
@Listeners({ LS_Customer_Listener.class })
public class engine_for_API {
private static int count=0;
@BeforeMethod
public void beforeMethod() {
}
@AfterMethod
public void afterMethod() {
}
//>>>=====================
@DataProvider
public Object[][] dp() {
List<String> elist= new ArrayList();
for(int i=1;i<=10;i++){
elist.add(String.valueOf(i));
}
return new Object[][] {
new Object[] { 1, "a" },
new Object[] { 2, "b" },
new Object[] { 3, String.valueOf(elist) }
//provider 在测试方法中要传两个参数,但这里只提供了一个,因此传输错误
//new Object[] { 4 }
};
}
//传两个参数
@Test(dataProvider = "dp")
public void dotest(Integer n, String s) {
count++;
System.out.println(n+" "+s+" "+count);
}
//<<<======================
//>>>======================
@DataProvider
public Object[][] dpp() {
List<String> elist= new ArrayList();
for(int i=1;i<=10;i++){
elist.add(String.valueOf(i));
}
return new Object[][] {
new Object[] { 1 },
new Object[] { 2 }
};
}
//传1个参数
@Test(dataProvider = "dpp")
public void dotestp(Integer n) {
count++;
System.out.println(n+" "+count);
}
//<<<=======================
@BeforeClass
public void beforeClass() {
}
@AfterClass
public void afterClass() {
}
@BeforeTest
public void beforeTest() {
}
@AfterTest
public void afterTest() {
}
@BeforeSuite
public void beforeSuite() {
}
@AfterSuite
public void afterSuite() {
}
}
本文介绍如何在TestNG中创建自定义监听器,以此提升测试代码的可读性和组织性。
1306

被折叠的 条评论
为什么被折叠?



