TestNG 创建自定义的监听器

本文介绍如何在TestNG中创建自定义监听器,以此提升测试代码的可读性和组织性。

使用自定义的监听器,可以让测试代码更加易读

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() {
  }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值