前言:由于ant-jmeter目前的版本不支持javamail,也就是說發(fā)送郵件時(shí)只能借助jenkins自帶的發(fā)送郵件插件來發(fā)送報(bào)告。
但是jenkins發(fā)送郵件支持發(fā)送郵件內(nèi)容(且有價(jià)值、有營(yíng)養(yǎng)的內(nèi)容也只能是借用jenkins的宏),不允許上傳附件。
總的來說若借助jenkins自帶的郵件插件來發(fā)送報(bào)告的話,內(nèi)容空洞、沒價(jià)值
jenkins自帶的郵件系統(tǒng)配置內(nèi)容如下:
郵件內(nèi)容為:
從圖種可以看出,發(fā)送一個(gè)報(bào)告的連接,相對(duì)來說不直觀,且如果要保持這個(gè)連接一直有效,那必須要做備份處理!!
缺點(diǎn)很多,就不一一列舉~
因此這么多缺點(diǎn),是必須要做出優(yōu)化了?。。。。。?/p>
再此,對(duì)ant-jmeter進(jìn)行二次開發(fā),讓他支持javamail。
二次開發(fā)支持的功能:①支持上傳附件②支持郵件內(nèi)容是以文件的方式輸出
首先反編譯jmeter自帶的ant-jmeter,之后增加2個(gè)類,
一個(gè)JavaMail類(方法實(shí)現(xiàn)),一個(gè)MailTask類(方法執(zhí)行)。ps:關(guān)于javamail網(wǎng)上很多材料,現(xiàn)成的的代碼,稍微坐下修改就可以~
JavaMail類具體實(shí)現(xiàn):
package org.programmerplanet.ant.taskdefs.jmeter; import java.io.File; import java.io.UnsupportedEncodingException; import java.text.DecimalFormat; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Address; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; 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 javax.mail.internet.MimeUtility; public class JavaMail { static File mailAttachmentFile; static public void sendMail(int all, int successnum, int failnum, String htmlstring, String mailSubject, String mailAttachment, String mailAddress) throws MessagingException, UnsupportedEncodingException { String s; DecimalFormat df = new DecimalFormat("0.00"); if(all == 0){ s = "0"; } else { s = df.format((float)successnum/(float)all*100); } Properties props = new Properties(); // 開啟debug調(diào)試 //props.setProperty("mail.debug", "true"); // 發(fā)送服務(wù)器需要身份驗(yàn)證 props.setProperty("mail.smtp.auth", "false"); // 設(shè)置郵件服務(wù)器主機(jī)名(ip或者域名) props.setProperty("mail.smtp.host", "10.64.1.85"); // 發(fā)送郵件協(xié)議名稱 props.setProperty("mail.transport.protocol", "smtp"); // 設(shè)置環(huán)境信息 Session session = Session.getInstance(props); // 創(chuàng)建郵件對(duì)象 Message msg = new MimeMessage(session); // 設(shè)置發(fā)件人 msg.setFrom(new InternetAddress("XXX@XXX.com.cn")); // 設(shè)置收件人 @SuppressWarnings("static-access") Address[] addresses = new InternetAddress().parse(mailAddress); msg.setRecipients(Message.RecipientType.TO,addresses); // 設(shè)置主題 if(mailSubject != null){ msg.setSubject(mailSubject); }else{ msg.setSubject("接口測(cè)試報(bào)告"); } // 設(shè)置郵件內(nèi)容 BodyPart bp = new MimeBodyPart(); Multipart mp = new MimeMultipart(); bp.setContent("<!DOCTYPE html>" + "<html lang=\"en\">" + "<head><META http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">" + "<meta content=\"shanhe.me\" name=\"Author\">" + "<title>JMeter Test Results</title>" + "<style type=\"text/css\">" + "* { margin: 0; padding: 0 }" + "html{ font-size: 12px; margin: auto; }" + "body { width: 80%; margin: 0 auto; text-align:center; font-size:62.5%;}" + "table { font-size:12px;border-collapse: collapse; table-layout: fixed;word-wrap:break-word;word-break:break-all; }" + "th{border:1px solid black;color: #ffffff;font-weight: normal;text-align:center;background:#2674a6;}" + "td {border:1px solid black;font-weight:normal;}" + "</style></head></head><body>" + "<h2>接口測(cè)試報(bào)告概要(詳細(xì)內(nèi)容見郵件附件)</h2>" + "<table width=\"100%\"class=\"details\" align=\"center\">" + "<tr style=\"line-height:2em;\" valign=\"middle\">" + "<th width=\"50%\">執(zhí)行總數(shù)</th>" + "<th>失敗數(shù)</th>" + "<th>成功率</th>" + "</tr>" + "<tr style=\"line-height:2em;\" valign=\"middle\">" + "<td align=\"center\">"+all+"</td>" + "<td align=\"center\">"+failnum+"</td>" + "<td align=\"center\">"+s+"%</td>" + "</tr>" +htmlstring + "</table></body></html>", "text/html;charset=utf-8"); mp.addBodyPart(bp); //附件為空時(shí)不發(fā)附件 mailAttachmentFile = new File(System.getProperty("user.dir")+mailAttachment); if(mailAttachmentFile.exists()){ System.out.println("把mailAttachment報(bào)告文件作為附件發(fā)送"); bp = new MimeBodyPart(); FileDataSource fileds = new FileDataSource(System.getProperty("user.dir")+mailAttachment); bp.setDataHandler(new DataHandler(fileds)); bp.setFileName(MimeUtility.encodeText(fileds.getName(),"UTF-8","B")); mp.addBodyPart(bp); }else{System.out.println("mailAttachment文件不存在,郵件添加附件失敗,請(qǐng)檢查!");} msg.setContent(mp); msg.saveChanges(); Transport transport = session.getTransport(); // 連接郵件服務(wù)器 transport.connect(); // 發(fā)送郵件 Transport.send(msg); // 關(guān)閉連接 transport.close(); } //測(cè)試 public static void main(String[] args) throws MessagingException, UnsupportedEncodingException { String ContentString = "<tr valign=\"middle\" style=\"line-height:2em;\">" + "<th>接口</th>" + "<th>執(zhí)行結(jié)果</th>" + "<th>執(zhí)行時(shí)間</th>" + "</tr>"; String ContentString2 = "<tr valign=\"middle\" style=\"color:black;background:#D1F3FE;line-height:2em;\">" + "<td align=\"left\">"+"/portal/home/pc/search/popup報(bào)告測(cè)試"+"</td>" + "<td align=\"center\">"+"成功"+"</td>" + "<td align=\"center\">"+"100ms"+"</td>" + "</tr>"; sendMail(5,5,0,ContentString+ContentString2,"/portal/home/pc/search/popup接口報(bào)告", "111","XXX@XXX.com.cn"); } }
MailTask類具體實(shí)現(xiàn):
package org.programmerplanet.ant.taskdefs.jmeter; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import javax.mail.MessagingException; import java.io.UnsupportedEncodingException; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; public class MailTask extends Task { private String mailAddress=null; private String mailSubject=null; private String mailAttachment=null; private String resultLog=null; File resultLogFile; File htmlFile; //jtl文件 public void setResultLog(String resultLog) { this.resultLog = resultLog; } public String getResultLog() { return resultLog; } //郵件主題 public void setMailSubject(String mailSubject) { this.mailSubject = mailSubject; } public String getMailSubject() { return mailSubject; } //附件 html報(bào)告文件 public void setMailAttachment(String mailAttachment) { this.mailAttachment = mailAttachment; } public String getMailAttachment() { return mailAttachment; } //收件地址,多個(gè)逗號(hào)(英文)隔開 public void setMailAddress(String mailAddress) { this.mailAddress = mailAddress; } public String getMailAddress() { return mailAddress; } /** * @see org.apache.tools.ant.Task#execute() * task執(zhí)行的入口 */ public void execute() throws BuildException { System.out.println("開始執(zhí)行發(fā)送郵件task"); resultLogFile = new File(System.getProperty("user.dir")+resultLog); if (mailAddress != null && resultLogFile.exists()){ System.out.println("開始解析resultLog"); try { analyseResultLog(); } catch (MessagingException e) { e.printStackTrace(); } }else{System.out.println("resultLog不存在,請(qǐng)檢查!");} } /** * 計(jì)算統(tǒng)計(jì)數(shù)據(jù) * @throws MessagingException */ http://www.cnblogs.com/nzg-noway/p/6909821.html