使用TestNG+JavaMail实现如下任务,任务要求: 请 利用面向对象的思想完成。 Demo.java所有的测试用例执行完毕后,通过TestNG监听器获取失败的测试用例类名和方法,成功的测试用例名和方法,作为文本形式发送到接收者的邮箱。 接收者的邮箱需要配置在属性文件中,类似于以下的方式 属性文件 config.properties tomail=626231936@qq.com,你自己的邮箱 public class Demo { @Test public void test1() { assertEquals(1, 1); } @Test public void test3() { assertEquals(1, 1); } @Test public void test2() { assertEquals(1, 2); } } 提示:使用TestListenerAdapter监听器的子类 要求提交监听器的相关代码。

时间: 2024-02-26 09:57:14 浏览: 22
以下是实现该任务的代码: Demo.java: ```java import org.testng.Assert; import org.testng.annotations.Test; public class Demo { @Test public void test1() { Assert.assertEquals(1, 1); } @Test public void test3() { Assert.assertEquals(1, 1); } @Test public void test2() { Assert.assertEquals(1, 2); } } ``` TestResultListener.java: ```java import org.testng.ITestContext; import org.testng.ITestListener; import org.testng.ITestResult; import org.testng.xml.XmlSuite; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; public class TestResultListener implements ITestListener { private Properties properties; public TestResultListener() { properties = new Properties(); try { properties.load(new FileInputStream("config.properties")); } catch (IOException e) { e.printStackTrace(); } } @Override public void onStart(ITestContext context) { System.out.println("Test Suite started!"); } @Override public void onFinish(ITestContext context) { System.out.println("Test Suite finished!"); try { String mailContent = "Test Summary: \n\n"; mailContent += "Passed Test Cases: \n"; for (ITestResult result : context.getPassedTests().getAllResults()) { mailContent += result.getTestClass().getName() + "." + result.getName() + "\n"; } mailContent += "\nFailed Test Cases: \n"; for (ITestResult result : context.getFailedTests().getAllResults()) { mailContent += result.getTestClass().getName() + "." + result.getName() + "\n"; } sendMail(mailContent); } catch (MessagingException e) { e.printStackTrace(); } } @Override public void onTestStart(ITestResult result) { System.out.println("Test case started: " + result.getTestClass().getName() + "." + result.getName()); } @Override public void onTestSuccess(ITestResult result) { System.out.println("Test case passed: " + result.getTestClass().getName() + "." + result.getName()); } @Override public void onTestFailure(ITestResult result) { System.out.println("Test case failed: " + result.getTestClass().getName() + "." + result.getName()); } @Override public void onTestSkipped(ITestResult result) { System.out.println("Test case skipped: " + result.getTestClass().getName() + "." + result.getName()); } @Override public void onTestFailedButWithinSuccessPercentage(ITestResult result) { // do nothing } @Override public void onStart(ISuite suite) { // do nothing } @Override public void onFinish(ISuite suite) { // do nothing } @Override public void onConfigurationSuccess(ITestResult itr) { // do nothing } @Override public void onConfigurationFailure(ITestResult itr) { // do nothing } @Override public void onConfigurationSkip(ITestResult itr) { // do nothing } @Override public void onStart(XmlSuite suite) { // do nothing } @Override public void onFinish(XmlSuite suite) { // do nothing } private void sendMail(String mailContent) throws MessagingException { String toMail = properties.getProperty("tomail"); Properties props = new Properties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.port", "587"); Session session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(properties.getProperty("frommail"), properties.getProperty("password")); } }); Message message = new MimeMessage(session); message.setFrom(new InternetAddress(properties.getProperty("frommail"))); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toMail)); message.setSubject("TestNG Test Result"); message.setText(mailContent); Transport.send(message); System.out.println("Mail sent to " + toMail); } } ``` config.properties: ```properties frommail=your_email_address password=your_email_password tomail=recipient_email_address ``` 在 testng.xml 中添加以下代码: ```xml <listeners> <listener class-name="TestResultListener" /> </listeners> ``` 当 Demo.java 中的测试用例执行完毕后,TestNG 会自动调用 TestResultListener 类的 onFinish 方法,该方法会获取执行结果并发送邮件。

相关推荐

最新推荐

recommend-type

jenkins+testng+reportng+maven+java环境搭建

帮助测试人员搭建jenkins+testng+reportng+maven+java环境
recommend-type

终极自动化测试环境搭建:Selenium+Eclipse+Junit+TestNG+Python

终极自动化测试环境搭建:Selenium+Eclipse+Junit+TestNG+Python
recommend-type

java+selenium+testng参数化打开百度搜索

仅仅用于初学者交流,意在与自动化测试初学者进行相互学习交流,简单的实现了java+selenium+testng参数化打开百度搜索
recommend-type

IDEA自动生成TestNG的testng.xml的插件方法

主要介绍了IDEA自动生成TestNG的testng.xml的插件方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

Selenium终极自动化测试环境搭建(一):Selenium+Eclipse+Junit+TestNG.docx

Selenium终极自动化测试环境搭建(一):Selenium+Eclipse+Junit+TestNG.docx
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。