51Testing软件测试论坛

标题: 如何让Loadrunner或Jmeter发送邮件报告 [打印本页]

作者: 雨中漫步_012    时间: 2019-3-6 16:41
标题: 如何让Loadrunner或Jmeter发送邮件报告
Loadrunner支持Java Vuser,而Jmeter本身就是基于Java开发的,所以两者都可以通过JMail组件实现邮件发送。

发送邮件除了需要在Loadrunner或Jmeter做好以上Jar包的引用,还需要注意在测试脚本中(Loadrunner为Java Vuser,Jmeter可以是BeanShell)引用以下包:
  1. //发送邮件
  2. import java.util.Properties;
  3. import javax.mail.BodyPart;
  4. import javax.mail.internet.MimeBodyPart;
  5. import javax.mail.internet.MimeMessage;
  6. import javax.mail.internet.MimeMultipart;
  7. import javax.mail.Session;
  8. import javax.mail.internet.InternetAddress;
  9. import com.sun.mail.smtp.SMTPTransport;
  10. import javax.activation.FileDataSource;
  11. import javax.activation.DataHandler;
复制代码
我们可以对基于Jmail发送邮件的函数进行修改,方便在Loadrunner和Jmeter中调用
  1. /**
  2. mailToS  邮件接收方(数组)
  3. mailBody 邮件内容
  4. mailFileName 邮件附件(最好是基于相对路径)
  5. **/
  6. public void email(String[] mailToS,String mailBody,String mailFileName) throws Exception {
  7.         Properties props; //系统属性
  8.         MimeMessage msg; //mime邮件对象
  9.         MimeMultipart mp ; // Multipart对象,邮件内容,标题,附件等内容均添加到其后再生成minmemessage对象
  10.         Session session; //邮件会话
  11.         String filename=mailFileName;//设置文件名,如Loadrunner的output.txt
  12.         String host="smtp.exmail.qq.com"; //smtp地址
  13.         String username="zheng******@rexen.com.cn"; //smtp认证用户名
  14.         String password="******"; //smtp认证用户密码
  15.         String subject="ETL数据统计结果报告"+DateFormatUtils.format(new Date(), "-yyyyMMdd HH:mm:ss"); //邮件主题
  16.         String personalname="锐迅测试组"; //邮件发送人姓名
  17.         String body=mailBody; //邮件正文
  18.         String charset="UTF-8"; //邮件字符集
  19.         String mailFrom="zheng******@rexen.com.cn"; //发件人地址

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

  23.         //设置邮件总体信息
  24.         session=Session.getInstance(props,null);
  25.         msg=new MimeMessage(session);
  26.         mp=new MimeMultipart();
  27.                
  28.         //邮件头
  29.         msg.setSubject(subject,charset);
  30.         InternetAddress[] to = new InternetAddress[mailToS.length];
  31.         InternetAddress from = new InternetAddress(mailFrom,personalname,charset);
  32.         msg.setFrom(from);
  33.         msg.setSentDate(new Date());
  34.         for(int i=0;i<mailToS.length;i++){
  35.                 to[i]=new InternetAddress(mailToS[i],"测试组",charset);
  36.         }

  37.         //附件               
  38.         BodyPart bp=new MimeBodyPart();         
  39.         FileDataSource fileds=new FileDataSource(filename);
  40.         bp.setDataHandler(new DataHandler(fileds));                 
  41.         bp.setFileName(fileds.getName());
  42.         mp.addBodyPart(bp);
  43.         //正文
  44.         BodyPart bp2=new MimeBodyPart();
  45.         bp2.setContent("<meta http-equiv=Content-Type content=text/html; charset=gb2312>"+body, "text/html;charset=GB2312");                        
  46.         mp.addBodyPart(bp2);

  47.         msg.setContent(mp);
  48.                
  49.         //发送邮件
  50.         SMTPTransport t = (SMTPTransport)session.getTransport("smtp");
  51.         t.connect(host,username,password);
  52.         t.sendMessage(msg,to);
  53.         t.close();
  54. }
复制代码
Loadrunner下输出邮件内容的样例:
  1. logPrint="-------------["+list[newlist.size()-2]+"] 多表记录数汇总   正常数:"+resultCount1+" 异常数:"+resultCount2+" -------------";
  2. lr.output_message(logPrint);//loadrunner中输出日志                                    
  3. mailString+=logPrint+""+lr.eval_string(""+lr.eval_string("<p>")+"")+"";//将输出日志交由mailString变量转给email函数
复制代码
Jmeter的BeanShellSampler中的输出邮件内容样例:
  1. logPrint="-------------["+list[newlist.size()-2]+"] 多表记录数汇总   正常数:"+resultCount1+" 异常数:"+resultCount2+" -------------";
  2. log.info(logPrint);//Jmeter中输出日志到log文件
  3. System.out.println(logPrint);//Java在控制面板中输出日志
  4. mailString+=logPrint+"<br>";//将输出日志交由mailString变量转给email函数
复制代码
我们除了在邮件中可以将Loadrunner和Jmeter输出日志当成附件,我们也可以通过CSV 组件,生成CSV的报告文件,再当作附件通过邮件发送:
  1. String csvFile = "DataSource/S-countETL".concat("-").concat(DateFormatUtils.format(new Date(), "yyyyMMdd")).concat(".csv");
  2. CSVPrint print = CsvFilePrinter(csvFile,false);
  3. print.writeln(new String[]{DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss.SSS"),TestName,""+cont1,result});
复制代码
最后我们就可以调用email函数了,将以上的测试报告内容和生成的附件,通过Jmail进行邮件发送
  1. email(new String[]{"wu****@rexen.com.cn","li****@rexen.com.cn"},mailString,csvFile);//发邮件给wu和li
复制代码
以上只是我简单举例,具体应用可以由个人发挥,甚至不需要像我上面这样笨的方式去实现,因为Loadunner完全可以通过自带的邮件协议smtp来发送测试报告,Jmeter也可以通过POP3协议发送相关邮件请求,甚至可以和Ant或Jenkins集成(配置和集成一些邮件组件),自动发送Jmeter的html报告。


作者: qqq911    时间: 2019-4-16 11:03
感谢分享
作者: Miss_love    时间: 2020-12-25 16:11
感谢分享




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2