发送邮件除了需要在Loadrunner或Jmeter做好以上Jar包的引用,还需要注意在测试脚本中(Loadrunner为Java Vuser,Jmeter可以是BeanShell)引用以下包:



import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import javax.mail.BodyPart;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import com.sun.mail.smtp.SMTPTransport;
import javax.activation.FileDataSource;
import javax.activation.DataHandler;
public class sendEmail {

/**
mailToS 邮件接收方(数组)
mailBody 邮件内容
mailFileName 邮件附件(最好是基于相对路径)
**/
public static void email(String[] mailToS,String mailBody,String mailFileName) throws Exception {
Properties props; //系统属性
MimeMessage msg; //mime邮件对象
MimeMultipart mp ; // Multipart对象,邮件内容,标题,附件等内容均添加到其后再生成minmemessage对象
Session session; //邮件会话
String filename=mailFileName;//设置文件名,如Loadrunner的output.txt
String host="smtp.exmail.qq.com"; //smtp地址
String username="chenJack@xxxxx.com"; //smtp认证用户名
String password="xxxxxxxxxx"; //smtp认证用户密码
String subject="接口自动化测试结果报告"; //邮件主题
String personalname="软件测试组"; //邮件发送人姓名
String body=mailBody; //邮件正文
String charset="UTF-8"; //邮件字符集
String mailFrom="chenJack@xxxxxx.com"; //发件人地址

props=System.getProperties();
props.setProperty("mail.smtp.host",host);
props.setProperty("mail.smtp.port","25");

//设置邮件总体信息
session=Session.getInstance(props,null);
msg=new MimeMessage(session);
mp=new MimeMultipart();

//邮件头
msg.setSubject(subject,charset);
InternetAddress[] to = new InternetAddress[mailToS.length];
InternetAddress from = new InternetAddress(mailFrom,personalname,charset);
msg.setFrom(from);
msg.setSentDate(new Date());
for(int i=0;i<mailToS.length;i++){
to[i]=new InternetAddress(mailToS[i],"测试组",charset);
}

//附件
BodyPart bp=new MimeBodyPart();
FileDataSource fileds=new FileDataSource(filename);
bp.setDataHandler(new DataHandler(fileds));
bp.setFileName(fileds.getName());
mp.addBodyPart(bp);
//正文
BodyPart bp2=new MimeBodyPart();

bp2.setContent("<meta http-equiv=Content-Type content=text/html; charset=gb2312>"+body +"<br>"+ getStringDate(), "text/html;charset=GB2312");
mp.addBodyPart(bp2);

msg.setContent(mp);

//发送邮件
SMTPTransport t = (SMTPTransport)session.getTransport("smtp");
t.connect(host,username,password);
t.sendMessage(msg,to);
t.close();
}


public static String getStringDate() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
return dateString;
}

public static void main(String[] args) {
try {
//发邮件给wu和li
email(new String[]{"530xxx182@qq.com","1160xxxx73@qq.com"},"接口自动化测试报告 <br> 详见附件","C:\\Users\\Administrator\\Desktop\\JmeterReport.csv");
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("成功发送邮件!");
}

}


jmeter二次开发----Loadrunner或Jmeter发送邮件报告_发送邮件



Loadrunner下输出邮件内容的样例:

logPrint="-------------["+list[newlist.size()-2]+"] 多表记录数汇总 正常数:"+resultCount1+" 异常数:"+resultCount2+" -------------";
lr.output_message(logPrint);//loadrunner中输出日志
mailString+=logPrint+""+lr.eval_string(""+lr.eval_string("<p>")+"")+"";//将输出日志交由mailString变量转给email函数


Jmeter的BeanShellSampler中的输出邮件内容样例:

logPrint="-------------["+list[newlist.size()-2]+"] 多表记录数汇总 正常数:"+resultCount1+" 异常数:"+resultCount2+" -------------";
log.info(logPrint);//Jmeter中输出日志到log文件
System.out.println(logPrint);//Java在控制面板中输出日志
mailString+=logPrint+"<br>";//将输出日志交由mailString变量转给email函数


我们除了在邮件中可以将Loadrunner和Jmeter输出日志当成附件,我们也可以通过CSV 组件,生成CSV的报告文件,再当作附件通过邮件发送:
String csvFile = "DataSource/S-countETL".concat("-").concat(DateFormatUtils.format(new Date(), "yyyyMMdd")).concat(".csv");
CSVPrint print = CsvFilePrinter(csvFile,false);
print.writeln(new String[]{DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss.SSS"),TestName,""+cont1,result});

最后我们就可以调用email函数了,将以上的测试报告内容和生成的附件,通过Jmail进行邮件发送
email(new String[]{"wu****@rexen.com.cn","li****@rexen.com.cn"},mailString,csvFile);//发邮件给wu和li


以上只是我简单举例,具体应用可以由个人发挥,甚至不需要像我上面这样笨的方式去实现,
因为Loadunner完全可以通过自带的邮件协议smtp来发送测试报告,Jmeter也可以通过POP3协议发送相关邮件请求,
甚至可以和Ant或Jenkins集成(配置和集成一些邮件组件),自动发送Jmeter的html报告。


总结:

1,需要获取jmeter测试结果的数据(失败数,成功数,通过率)作为邮件正文内容

2,附件的格式需要优化(防止乱码,fail为红色,pass为绿色)