前言:由于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)容如下:

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

 

郵件內(nèi)容為:

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

從圖種可以看出,發(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):

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xù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");     } }

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

 

 

MailTask類具體實(shí)現(xiàn):

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xù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