框架搭建完成,用例可以执行,测试报告可以生存,那么肯定要考虑如何发送测试报告呢?
发送测试邮件
- 一:单独建一个java文件,用于存放邮件的相关配置
这个文件主要是用于测试结果的邮件发送,这个文件依赖另外两个文件,
host(邮件服务器名称),
user(邮箱登录名) ,
password(邮箱登录密码),
sender(邮件发送者),
receiver(多个接收者,中间用","分隔,如下图),
cc(邮件抄送者,选填)。
内容如下:
- 二:发送邮件
我们可以新建一个help包,然后创建一个发送邮件的SendEmail类
发送邮件的内容如下:
package help;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import data.EmailData;
import main.TestMain;
/**
*
* @author zx08443
*
*/
public class SendEmail {
static String host = EmailData.Host;
static String user = EmailData.User;
static String password = EmailData.Password;
static String sender = EmailData.Sender;
static String receiver = EmailData.Receiver;
static String cc = EmailData.Cc;
public static void Email(String filename) { //调用发送邮件的方法时,传入一个参数,参考https://blog.csdn.net/weixin_43574761/article/details/95637680 这篇博客
String email_body = new String();
String name = filename;
email_body = function.WriteOrReadFile.readValueFromFile(".\\test-report\\"+name+"\\html\\overview.html");
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String today = dateFormat.format(date);
Properties props = new Properties();
props.put("mail.smtp.host", host);
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", "25");
Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(sender));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(receiver));
if (cc != "") {
message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc));
}
message.setSubject("PC自动化测试报告" + today);
String url = "http://xx.xx.xx.xx:xxxx/" + name + "/html/index.html";
MimeBodyPart html = new MimeBodyPart();
String body = "<div style='font-size:40px;color:white;'>0</div><a href=\"http://xx.xx.xx.xx/\"><span style='display:inline-block;font-size:20px;color:red;margin-left:40px;'>查看测试报告详情</span></a>";
String content = body.replace("http://xx.xx.xx.xx/", url);
html.setContent(email_body + content, "text/html;charset=utf-8");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(html);
message.setContent(multipart);
Transport.send(message);
System.out.println("=====PC自动化测试邮件已发送,请注意查收!!!=====");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
有疑问的加V了解详情:zx1187463903
如上图注意:
由于ReportNg插件的测试结果呈现在index.html中,但它由\html这里面的多个文件组成,所以通过在邮件里加入一个超链接,点击跳转到另一个网页查看测试报告详情页,这样处理的。所以,做以下设置:
1:本地新建一个站点,做好基本配置,如下图。
2:在Email的方法中,将站点的URL地址放在email_body中即可。这样就可以做到下面的效果,邮件中查看测试报告的详细内容。为什么这里做了一个url替换呢,因为reportNg,每次运行之后会覆盖上一次的运行结果,这样不便于结果的追查,所以我们就考虑重新指定测试结果保存的文件夹,文件夹名称根据年月日时分来定义,不会出现重复的情况。所以每个邮件里发送的链接都是不一样的,对应着每次运行的结果。
邮件的内容如下图:
点击超链接:“查看测试报告详情” 效果如下:
如果你也搞定了,开心的同时请小编喝个咖啡也极好的呀。