使用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 方法,该方法会获取执行结果并发送邮件。