Java+Selenium3框架設計篇5-如何實現郵件傳送測試報告
阿新 • • 發佈:2019-01-08
本篇繼續回答網友的問題,這個主題是如何通過郵件傳送測試報告。通過郵件傳送測試報告,這個很重要,也很有必要。不管你使用什麼自動化測試框架,都建議添加發送測試報告的功能。先來設計我們的傳送郵件的場景:假如我們測試報告是固定的名稱,放在固定的路徑下。
1.下載java mail api包
瀏覽器開啟https://mvnrepository.com/artifact/com.sun.mail/javax.mail/1.6.0,點選download jar,把下載下來的jar檔案,放在當前專案的tools資料夾下,並新增到當前專案的library裡。具體這裡不過多描述,前面我們添加了很多次jar包。
2.在testSuite包下新建一個測試傳送郵件的類。
其實這個傳送郵件的類,我們可以單獨寫成一個靜態類,設定一個變數,郵件的附件,也就是我們測試報告檔案的路徑就是這個變數。今天我們暫時不考慮這麼多,只是簡單來利用QQ郵箱傳送一個測試報告。我的測試報告是TestNG自動化生成的一個html檔案。
3.如何開啟QQ上的smtp服務
我們在使用QQ的smtp伺服器之前,我們需要登入web qq郵箱,開啟smtp,具體看下面兩張圖。
上面紅圈的授權碼需要記錄下來,放到我們接下來的程式碼中關於身份認證這塊,替代password。如果你填寫的是你QQ的密碼,程式碼執行後應該報535錯誤,身份認證失敗。
4. 測試傳送郵件類的具體程式碼。
package testSuite;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
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;
public class SendEmail {
public static void main(String[] args) {
// 建立一個Property檔案物件
Properties props = new Properties();
// 設定郵件伺服器的資訊,這裡設定smtp主機名稱
props.put("mail.smtp.host", "smtp.qq.com");
// 設定socket factory 的埠
props.put("mail.smtp.socketFactory.port", "465");
// 設定socket factory
props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
// 設定需要身份驗證
props.put("mail.smtp.auth", "true");
// 設定SMTP的埠,QQ的smtp埠是25
props.put("mail.smtp.port", "25");
// 身份驗證實現
Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
// 第二個引數,就是我QQ開啟smtp的授權碼
return new PasswordAuthentication(" [email protected]", "kvsivuydzdbpbffd");
}
});
try {
// 建立一個MimeMessage類的例項物件
Message message = new MimeMessage(session);
// 設定發件人郵箱地址
message.setFrom(new InternetAddress("[email protected]"));
// 設定收件人郵箱地址
message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("[email protected]"));
// 設定郵件主題
message.setSubject("測試傳送郵件");
// 建立一個MimeBodyPart的物件,以便新增內容
BodyPart messageBodyPart1 = new MimeBodyPart();
// 設定郵件正文內容
messageBodyPart1.setText("這個是郵件的正文部分");
// 建立另外一個MimeBodyPart物件,以便新增其他內容
MimeBodyPart messageBodyPart2 = new MimeBodyPart();
// 設定郵件中附件檔案的路徑
String filename = ".\\test-output\\emailable-report.html";
// 建立一個datasource物件,並傳遞檔案
DataSource source = new FileDataSource(filename);
// 設定handler
messageBodyPart2.setDataHandler(new DataHandler(source));
// 載入檔案
messageBodyPart2.setFileName(filename);
// 建立一個MimeMultipart類的例項物件
Multipart multipart = new MimeMultipart();
// 新增正文1內容
multipart.addBodyPart(messageBodyPart1);
// 新增正文2內容
multipart.addBodyPart(messageBodyPart2);
// 設定內容
message.setContent(multipart);
// 最終傳送郵件
Transport.send(message);
System.out.println("=====郵件已經發送=====");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
執行一下,我能收到郵件,郵件中附件確實是TestNG生成的測試報告檔案。記得替換你自己QQ郵箱資訊在上面相關的地方,關於如何通過郵件傳送測試報告,就介紹到這裡。至於如何在完成自動化測試指令碼就第一時間通過郵件傳送測試報告,有必要的話,在後面檔案再介紹。