背景
用testNG写用例的时候,只是打印了请求的日志,没有打印这个用例的开始和结束的标识,想加上这个标识这样更好的排查问题
这种日志是加在用例开始执行和结束,相当于spring中的AOP功能,今天翻阅了testNG的文档发现有监听器这玩意,这玩意可以在testNG执行的某一过程中进行操作;
操作步骤
直接show the code:
public class TestNGLogListener extends TestListenerAdapter { static Logger logger = LogManager.getLogger(TestNGLogListener.class.getName()); @Override public void onTestFailure(ITestResult tr) { log(String.format("[method: %s]",tr.getName())+ "--Test method failed\n"); } @Override public void onTestSkipped(ITestResult tr) { log(String.format("[method: %s]",tr.getName())+ "--Test method skipped\n"); } @Override public void onTestSuccess(ITestResult tr) { log(String.format("[method: %s]",tr.getName())+ "--Test method success\n"); } @Override public void onTestStart(ITestResult tr) { log(String.format("[method: %s]",tr.getName())+ "-- START"); } private void log(String string) { logger.info(string); } }
1. 写编写一个监听器的类,继承 TestListenerAdapter 这个类,需要重写对应的几个方法
void onTestFailure(ITestResult result) // 用例执行结果失败 void onTestSkipped(ITestResult result) // 跳过该条用例 void onTestSuccess(ITestResult result) // 用例执行结果成功 void onTestStart(ITestResult tr) // 用例开始执行的时候
2. 使用这个监听器,有两种方法
2.1 第一种是直接在测试用例的class上加Listener注解,如下:
@Listeners({CustomListener.class }) public class SampleTest { @Test public void testMethodOne(){ Assert.assertTrue(true); } @Test public void testMethodTwo(){ Assert.assertTrue(false); } @Test(dependsOnMethods={"testMethodTwo"}) public void testMethodThree(){ Assert.assertTrue(true); } }
2.2 直接在testNG.xml文件中添加,如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="wm-api-autotest"> <test name="Test"> <packages> <package name="com.jwen.demo"/> </packages> </test> <listeners> <listener class-name=com.jwen.demo.common.TestNGLogListener'/> </listeners> </suite> <!-- Suite -->
2.3 效果展示:
虽千万人,吾往矣!