testng 监听器

执行用例监听 

public class IHookableImp implements IHookable {
    @Override
    public void run(IHookCallBack iHookCallBack, ITestResult iTestResult) {
        ConstructorOrMethod method = iTestResult.getMethod().getConstructorOrMethod();
        String name = method.getName();
        if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "IHookableImp 测试method是 "+name);
        if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "IHookableImp 开始执行~");
        //测试用例开始执行
        iHookCallBack.runTestMethod(iTestResult);
        if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "IHookableImp 结束~");
    }
}

展示报告 

 

for(ISuite iSuite:suites){
    Map<String,ISuiteResult> iSuiteResultMap = iSuite.getResults();
    //获取所有执行的方法
    if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "CustomTestCaseReport 所有执行的方法:"+iSuite.getAllInvokedMethods());
    //获取所有@Test标注的方法
    if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "CustomTestCaseReport 获取所有@Test标注的方法:"+iSuite.getAllMethods());
    //获取suite标签的name属性
    if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "CustomTestCaseReport suiteName:"+iSuite.getName());
    //获取测试报告的输出路径
    if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "CustomTestCaseReport 输出路径:"+iSuite.getOutputDirectory());
    System.out.println("CustomTestCaseReport 报告路径:"+outputDirectory);
    //获取并发方式
    if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "CustomTestCaseReport 并发方式:"+iSuite.getParallel());

    for(ISuiteResult iSuiteResult:iSuiteResultMap.values()){
        ITestContext iTestContext = iSuiteResult.getTestContext();
        IResultMap iResultMap = iTestContext.getPassedTests();

        Set<ITestResult> iTestResultset = iResultMap.getAllResults();
        for(ITestResult iTestResult:iTestResultset){
            //获取执行的Test方法
            if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "CustomTestCaseReport 测试方法:"+iTestResult.getName());
            //获取执行结果
            if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "CustomTestCaseReport 执行结果(1-成功,2-失败,3-skip):"+iTestResult.getStatus());
            //获取开始执行的时间
            if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "CustomTestCaseReport 开始时间:"+iTestResult.getStartMillis());
            //获取结束执行的时间
            if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "CustomTestCaseReport 结束时间:"+iTestResult.getEndMillis());
        }
    }
}

 执行前监听

public class IInvokedMethodListenerImp implements IInvokedMethodListener {
    //TestNG在调用方法前、后启用该监听器,常用于日志的采集。
    @Override
    public void afterInvocation(IInvokedMethod iInvokedMethod, ITestResult iTestResult) {
        //获取执行的@Test方法
        if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "IInvokedMethodListenerImp "+iTestResult.getName());
    }
    @Override
    public void beforeInvocation(IInvokedMethod iInvokedMethod, ITestResult iTestResult) {
        //获取执行的@Test方法
        if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "IInvokedMethodListenerImp "+iTestResult.getName());
    }
}

 成功或失败

 

public class TestListenerAdapterImp extends TestListenerAdapter {
    private int m_count = 0;
    
    @Override
    public void onTestFailure(ITestResult tr) {
        if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "TestListenerAdapterImp --Test method failed\n");
    }
     
    @Override
    public void onTestSkipped(ITestResult tr) {
        if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "TestListenerAdapterImp --Test method skipped\n");
    }
     
    @Override
    public void onTestSuccess(ITestResult tr) {
        if (Constants.ISDEBUG) System.out.println(Constants.LogCustom + "TestListenerAdapterImp --Test method success\n");
    }
     
    private void log(String string) {
        System.out.print(string);
        if (++m_count % 40 == 0) {
        System.out.println("");
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要创建一个 Java 项目,并在 Eclipse 中安装 TestNG 和 JavaMail。 1. 创建 Java 项目 在 Eclipse 中,选择 File -> New -> Java Project,输入项目名称,点击 Finish。 2. 安装 TestNG 在 Eclipse 中,选择 Help -> Eclipse Marketplace,搜索 TestNG,点击 Install 安装。 3. 安装 JavaMail 下载 JavaMail API,将下载的文件夹解压缩,并将所有的 jar 文件添加到项目的 Build Path 中。 4. 创建 Demo.java 在项目中创建一个名为 Demo.java 的类,并添加测试用例。 ```java import org.testng.annotations.Test; public class Demo { @Test public void test1() { System.out.println("Test 1"); assert(false); } @Test public void test2() { System.out.println("Test 2"); assert(false); } @Test public void test3() { System.out.println("Test 3"); assert(true); } } ``` 5. 创建 TestListener 在项目中创建一个名为 TestListener.java 的类,继承 TestListenerAdapter,并重写 onTestFailure 和 onTestSuccess 方法,以便在测试用例失败或成功时发送邮件。 ```java import java.util.Properties; import javax.mail.*; import javax.mail.internet.*; import org.testng.ITestResult; import org.testng.TestListenerAdapter; public class TestListener extends TestListenerAdapter { @Override public void onTestFailure(ITestResult tr) { sendEmail("Test Failure", tr.getTestClass().getName() + "." + tr.getMethod().getMethodName()); } @Override public void onTestSuccess(ITestResult tr) { sendEmail("Test Success", tr.getTestClass().getName() + "." + tr.getMethod().getMethodName()); } private void sendEmail(String subject, String body) { Properties props = new Properties(); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.socketFactory.port", "465"); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.port", "465"); Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("your_email@gmail.com", "your_password"); } }); try { Message message = new MimeMessage(session); message.setFrom(new InternetAddress("your_email@gmail.com")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient_email@gmail.com")); message.setSubject(subject); message.setText(body); Transport.send(message); } catch (MessagingException e) { throw new RuntimeException(e); } } } ``` 注意,需要将 "your_email@gmail.com" 和 "your_password" 替换为你的 Gmail 邮箱和密码,将 "recipient_email@gmail.com" 替换为接收邮件的邮箱地址。 6. 创建属性文件 在项目中创建一个名为 config.properties 的文件,并添加 tomail 属性,指定接收邮件的邮箱地址。 ``` tomail=recipient_email@gmail.com ``` 7. 编写 TestNG.xml 在项目中创建一个名为 TestNG.xml 的文件,并添加以下内容: ```xml <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="TestSuite" verbose="1"> <test name="Test"> <classes> <class name="Demo" /> </classes> </test> <listeners> <listener class-name="TestListener" /> </listeners> </suite> ``` 该文件指定了要运行的测试用例类和监听器。 8. 运行测试 右键点击 TestNG.xml 文件,选择 Run As -> TestNG Suite,即可运行测试。 在测试完成后,会自动发送邮件,邮件主题为 "Test Success" 或 "Test Failure",邮件内容为成功或失败的测试用例类名和方法。 以上就是实现 TestNG + JavaMail 的基本步骤,希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值