TestNG에서 각각의 테스트 메소드 실행 후에, 테스트 결과에 다라 발동되는 리스너에 대해 기재해봅니다.
어떠한 테스트 전후를 기점으로 활성화되어 실행됩니다.
예를들어, 테스트가 실패했을 때, 스크린샷을 찍는다고 한다면, 테스트가 실패하는 경우에만 자동적으로 리스너가 실행되는 것입니다.
TestNG에는 몇가지 리스너들이 있는데, 일단 테스트 실행결과에 따른 리스너에 대해서는, ITestListeners
라는 interface가 있어서 이것을 구현하면 됩니다.
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
public class Listeners implements ITestListener {
@Override
public void onTestStart(ITestResult iTestResult) {
}
@Override
public void onTestSuccess(ITestResult iTestResult) {
}
@Override
public void onTestFailure(ITestResult iTestResult) {
}
@Override
public void onTestSkipped(ITestResult iTestResult) {
}
@Override
public void onTestFailedButWithinSuccessPercentage(ITestResult iTestResult) {
}
@Override
public void onStart(ITestContext iTestContext) {
}
@Override
public void onFinish(ITestContext iTestContext) {
}
}
일단 인터페이스를 구현하게 된다면, 작성해야하는 메소드가 몇가지가 있긴합니다.. 여기서 선택적으로 구현해주면 됩니다.
이후, xml파일에서 Listeners의 위치를 등록해야사용할 수 있습니다.
<suite name="All Test Suite">
<parameter name="URL" value="https://www.naver.com"/>
<listeners>
<listener class-name="Listeners"/>
</listeners>
.
.
.
태그의 위치는 suite
태그 바로 아래에 선언하면 됩니다.
예시로, 성공했을때와 실패했을 때 각각의 동작을 정의를 해보겠습니다.
@Override
public void onTestSuccess(ITestResult iTestResult) {
System.out.println("Test Success!!");
System.out.println("----------------------------");
}
@Override
public void onTestFailure(ITestResult iTestResult) {
System.out.println("Test Failed!!");
System.out.println(iTestResult.getName());
System.out.println("----------------------------");
}
이후 테스트를 실행합니다.
위에 정의한대로, 성공한 경우와 실패한 경우에 따라 리스너 내부의 메소드가 실행된 것을 알 수 있었습니다.
ITestContext
의 객체와 ITestResult
는 테스트 결과에 대한 몇가지 값들을 가지고 있습니다.
ITestContext
: test run에 대한 정보를 가지고 있습니다. 이것은 xml파일 기준으로 하나의 test
태그라고 보시면 될 것 같습니다.ITestResult
: 테스트 자체의 결과에 대한 정보값을 가지고 있습니다.ref