前言:之前扩展的ant—jmeter支持邮件附件形式上传以及邮件内容的html文件格式。

如图:

由于邮件的内容格式是详情信息,也就是说直观的显示的是case,但由于case的增加,邮件内容越来越大!

最主要的是领导们看的不是每条case的执行是否通过,关注度而是每个模块也就是每个module(涉及的所有interface的场景)整体通过率。

开发和测试同学们可以通过附件看出具体失败的case以及原因~

因此需要修改MailTask类和JavaMail类!!!

MailTask类主要做的是对于满足一定条件的(也就是case)进行归类和划分

MailTask类相对之前动核心代码如下:

case的命名规范目前我要求有2条:

也就是含有module关键字即可——>这样才会接受该case并进行统计!!!

module的名称不能为空且module名称在前module关键字前面!!!如 Login Module

具体是否符合命名规范代码如下:

if(fullTitile.toLowerCase().contains("module")==true){
  Module = fullTitile.substring(0,fullTitile.toLowerCase().indexOf("module")).trim();

统计规则:

根据module值分类并统计

代码如下:

if(fullTitile.toLowerCase().contains("module")==true){
Module = fullTitile.substring(0,fullTitile.toLowerCase().indexOf("module")).trim();
if(data.get(Module) == null){
count = count +1;
color = (count%2<1)?color1:color2;
//记录耗时
time = Integer.parseInt(line.split("\"")[1]);
Entity entity = new Entity();
if (line.indexOf(" s=\"true\"") !=-1) {
entity.successNum =x 1;
}else{
entity.failNum = 1;
}
data.put(Module, entity);
}else{
//记录耗时
time += Integer.parseInt(line.split("\"")[1]);
Entity entity = data.get(Module);
if (line.indexOf(" s=\"true\"") !=-1) {
entity.successNum += 1;
}else{
entity.failNum += 1;
}
data.put(Module, entity); }
}
}
}
br.close();
isr.close();
fis.close();
Iterator iterator = data.keySet().iterator();
while(iterator.hasNext()){
Module = (String)iterator.next();
Entity entity = data.get(Module);
allSuccess+=entity.successNum;
allFailure+=entity.failNum;
CaseTotalNum =entity.successNum+entity.failNum;

之后重写编辑html格式:

代码如下:

String htmlString = "<tr valign=\"top\">"
+ "<th>Module</th>"
+ "<th>TotalNum</th>"
+ "<th>PassNum</th>"
+ "<th>FaliNum</th>"
+ "<th>PassRate</th>"
+ "</tr>";
if(CaseTotalNum == 0){
rate = "0";
htmlString = htmlString +"<tr valign=\"middle\" style=\"background:"+color+";line-height:2em;\">"
+ "<td align=\"center\">"+Module+"</td>"
+ "<td align=\"center\">"+CaseTotalNum+"</td>"
+ "<td align=\"center\">"+entity.successNum+"</td>"
+ "<td align=\"center\">"+entity.failNum+"</td>"
+ "<td align=\"center\">"+rate+"</td>"
+ "</tr>"; } else {
DecimalFormat df = new DecimalFormat("0.00");
rate = df.format((float)entity.successNum/(float)CaseTotalNum*100);
htmlString = htmlString +"<tr valign=\"middle\" style=\"background:"+color+";line-height:2em;\">"
+ "<td align=\"center\">"+Module+"</td>"
+ "<td align=\"center\">"+CaseTotalNum+"</td>"
+ "<td align=\"center\">"+entity.successNum+"</td>"
+ "<td align=\"center\">"+entity.failNum+"</td>"
+ "<td align=\"center\">"+rate+"%</td>"
+ "</tr>"; }

JavaMail类代码如下:

JavaMail类代码修改较少,只是修改了邮件的html报告模板,相对增加和删除了一些关键字

html代码如下:

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:14px;width:300px;height:auto;border:1px;margin: auto; }"
+ "body { width: 20%; margin: 0 auto; text-align:center; font-size:10%;}"
+ "table { font-size:14px;font-weight:normal ;border-collapse: collapse; table-layout: fixed;word-wrap:break-word;word-break:break-all;}"
+ "th{border:2px solid black;color: #FFFFFF;font-weight:normal;text-align:center;background:#527F76;}"
+ "td {border:2px solid black;font-weight:normal;}"
+ "</style></head></head><body>"
+ "<h2>Interface Test Report Summary</h2>"
+ "<h2 style=\"color:#5F9F9F\" >Check Attachment For Detail</h2>"
+ "<table width=\"85%\"class=\"details\" align=\"center\">"
+ "<tr style=\"line-height:2em;\" valign=\"middle\">"
+ "<th>Build Version</th>"
+ "<th>Total Statistics</th>"
+ "<th>Fail Statistics</th>"
+ "<th>Run Pass Rate</th>"
+ "<th>Elapsed Time</th>"
+ "</tr>"
+ "<tr style=\"line-height:2em;\" valign=\"middle\">"
+ "<td align=\"center\">"+bulidnum+"</td>"
+ "<td align=\"center\">"+all+"</td>"
+ "<td align=\"center\">"+failnum+"</td>"
+ "<td align=\"center\">"+s+"%</td>"
+ "<td align=\"center\">"+time+"</td>"
+ "</tr>"
+htmlstring
+ "</table></body></html>", "text/html;charset=utf-8");
mp.addBodyPart(bp);

sendMail 增加了总耗时参数属性

打包完成,发邮件报告如下:

另说明:

由于之前只对http请求进行统计,现增加了jdbc请求,所以也要想把http请求统计进去的话,

由于jdbc请求在jtl文件生成的格式如下

<sample t="646" it="0" lt="633" ct="0" ts="1497606686753" s="true" lb="Jdbc Module Request table configuration precondition ContentType=19" rc="200" rm="OK" dt="text" de="UTF-8" by="404" sc="1" ec="0" ng="1" na="1" hn="nj-zoe-yang4">

http请求在jtl文件生成的格式如下:

<httpSample t="614" it="0" lt="614" ct="180" ts="1497606687694" s="true" lb="Login Module login Interface get cookie correct parameter" rc="200" rm="OK" dt="text" de="utf-8" by="509" sc="1" ec="0" ng="1" na="1" hn="nj-zoe-yang4">

代码修改如下

    while ((line = br.readLine()) != null) {
                if (line.indexOf("<httpSample") !=-1||line.indexOf("<sample t=") !=-1) {
                    fullTitile = line.split("\"")[13];

有更好的html模板大家可以跟我沟通下,本人html很菜~也不愿意去接触~

修改错误:

 count = count +1;
color = (count%2<1)?color1:color2;

由于这个判断是无法实现奇数色值为#FFFFFF,偶数色值为#E1F3FE

因此,提取到外面计算如下:

while(iterator.hasNext()){
Module = iterator.next();
Entity entity = data.get(Module);
allSuccess+=entity.successNum;
allFailure+=entity.failNum;
CaseTotalNum =entity.successNum+entity.failNum;
lineNum += 1;
// System.out.println("行数:"+lineNum); if(CaseTotalNum == ){
rate = "";
}else {
rate = df.format((float)entity.successNum/(float)CaseTotalNum*);
}
//区分每隔颜色
color = (lineNum%2!=0)?color1:color2;

后续又把总耗时单位ms改为s,如下:

alltime = df.format((float)time/)+"s";

报告样式为:

javamail 邮件格式再优化(由详情——>改为统计)的更多相关文章

  1. jmeter javamail 邮件格式再优化(由详情——>改为统计)

    前言:之前扩展的ant—jmeter支持邮件附件形式上传以及邮件内容的html文件格式. 如图: 由于邮件的内容格式是详情信息,也就是说直观的显示的是case,但由于case的增加,邮件内容越来越大! ...

  2. 19、文件上传与下载/JavaMail邮件开发

    回顾: 一. 监听器 生命周期监听器 ServletRequestListener HttpSessionListener ServletContextListener 属性监听器 ServletRe ...

  3. javamail邮件Multipart支持同时发text和html混合消息,alternative纯文本与超文本共存

    javamail邮件Multipart支持同时发text和html混合消息alternative纯文本与超文本共存 multipart/mixed:附件. multipart/related:内嵌资源 ...

  4. javaMail 邮件发送和接收示例,支持正文图片、html、附件(转)

    转自:https://blog.csdn.net/star_fly4/article/details/52037587 一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文 ...

  5. EasyPlayer Android安卓RTSP服务器低延时再优化策略

    EasyPlayer低延迟再优化策略 EasyPlayer是一款专门针对RTSP协议进行过优化的播放器.其中两个我们引以为傲的的优点就是起播快和低延迟.最近我们遇到一些需求,其对延迟要求非常苛刻,于是 ...

  6. EasyPlayer Android RTSP播放器延迟再优化策略

    EasyPlayer延迟再优化策略 EasyPlayer是一款专门针对RTSP协议进行过优化的播放器.其中两个我们引以为傲的的优点就是起播快和低延迟.最近我们遇到一些需求,其对延迟要求非常苛刻,于是我 ...

  7. WPF编游戏系列 之九 物品清单再优化

    原文:WPF编游戏系列 之九 物品清单再优化        在"第三篇"和"第四篇"中通过用户控件和数据绑定功能对物品清单进行一些优化减少了部分C#代码,但感觉 ...

  8. MIME协议(一) -- RFC822邮件格式

    MIME协议(一) -- RFC822邮件格式 .   如同其他各种电子文档一样,电子邮件内容也必须遵循一定的格式要求,各种邮件处理程序才能从中分析和提取出发件人.收件人.主题和附件等信息.邮件内容的 ...

  9. 邮件格式(HTML/TXT),TXT为文本邮件

    <?phpclass smtp{/* Public Variables */var $smtp_port;var $time_out;var $host_name;var $log_file;v ...

随机推荐

  1. RHive

    R + Hive = RHive 支持原创:http://blog.fens.me/nosql-r-hive/ R利剑NoSQL系列文章 之 Hive Hive介绍 Hive安装 RHive安装 RH ...

  2. 解决初次使用webpack+antd-mobile时css不生效的问题

    前端这块,最火的是angular.react.vue.根据你具体的业务场景,选择合适的框架或者类库.以react为例,新建一个项目时, css组件按钮,图片轮播等组件,最好不要重复造轮子,选择业内规范 ...

  3. 实现sticky footer的五种方法

    2017-04-19 16:24:48 什么是sticky footer 如果页面内容不够长的时候,页脚块粘贴在视窗底部:如果内容足够长时,页脚块会被内容向下推送. 用position实现? 如果是用 ...

  4. jquery通过ajax向后台发送(checkbox)数组,并在后台接收,(发送的数据是checkedbox)

    版权声明:本文为博主原创文章,未经博主允许不得转载. $(document).ready(function(){ var flag = 1; $("#delBtn").click( ...

  5. ObjectARX自定义实体的最近点和垂点捕捉算法

    最近点用pickPoint来计算,垂点用lastPoint计算. 一般AcDbCurve类可以用AcGe类的 getClosestPointTo 来实现计算需要的点值. 下面是代码示例: case A ...

  6. C#基础知识-编写第一个程序(二)

    通过上一篇数据类型已经介绍了C#中最基本的15种预定义数据类型,了解每一种类型代表的数据以及每种类型的取值范围,这是很重要也是最基本.下面我们通过实例来了解每个类型如何去使用.编写C#程序时我们需要用 ...

  7. Docker - 终端交互

    进入容器交互终端 使用docker attach命令进入容器交互终端. 注意:如果多个窗口同时attach到同一个容器,那么所有窗口都会同步显示.如果某个窗口因命令阻塞时,那么其他窗口将无法执行操作. ...

  8. java局部/成员/静态/实例变量

    局部变量和成员变量主要是他们作用域的区别成员变量个是类内部:局部变量是定义其的方法体内部(或者方法体内部的某一程序块内——大括号,主要看定义的位置).另外,成员变量可以不显式初始化,它们可以由系统设定 ...

  9. 使用java API操作hdfs--读取hdfs文件并打印

    在myclass之中创建类文件,这个myclass目录是自己创建的. 编译的时候会报如下的错误: 很明显就是没有导入包的结果 见这个API网站,则可以找到响应的包,当然还有java的api文档 htt ...

  10. 第二章 基本图像处理(Image Processing)

    主要内容: 图像的表示----介绍图像是如何表示的,以及所有基本操作的作用对象 高斯滤波-----滤波操作的原理与应用 图像金字塔-----高斯和拉普拉斯 边缘检测-----Sobel算子和Lapla ...