jmeter输出html报告

目录

一、windows下html报告生成

1、相关安装和下载

(1)java安装(忽略)

(2)jmeter安装(忽略)

(3)ant安装

(4)jmeter的html报告优化插件

2、ant剧本配置

​ (1)build.xml

(2)jmeter.properties修改

(3)运行

(4)发送邮件

二、jmeter压测

1、liunx安装jmeter

2、jenkins任务配置

(1)手工将脚本放入执行的机器上

(2) jenkins配置内容​

(3)问题解决 

 3、jenkins配置参数驱动jmeter压测脚本

4、curl方式执行jenkins


一、windows下html报告生成

方案:jmeter自带的html报告不展示每个请求的详细情况,使用ant工具制作工作流(执行jmeter脚本--->生成html报告--->发送邮件)

1、相关安装和下载

(1)java安装(忽略)

(2)jmeter安装(忽略)

(3)ant安装

       第一步:下载地址  http://ant.apache.org/bindownload.cgi

       第二步:下载后解压到想要安装的目录,我放入了 jmeter的根目录下

       第三步:将jmeter所在的目录下extras子目录里的ant-jmeter-1.1.1.jar复制到ant所在目录lib子                          目录之下,这样ant运行时才能找到”                                                                                                 org.programmerplanet.ant.taskdefs.jmeter.JMeterTask”这个类,从而成功触发                               JMeter脚本。

       第四步:配置环境变量

                       ANT_HOME   F:\apache-Ant

                      CLASSPATH    %ANT_HOME%\lib   (这里注意java的配置,在java后面追加)

                       Path        %ANT_HOME%\bin

                     

(4)jmeter的html报告优化插件

      作用:是用来配置jmeter报告的样式

      第一步:下载地址  http://shanhe.me/download.php?file=jmeter.results.shanhe.me.xsl

       第二步:放在jmeter的extras目录下

2、ant剧本配置

我创建了一个独立的目录jmeterAutoTest方便梳理思路

 (1)build.xml

      作用: build.xml文件是ant命令执行的文件

      内容主要修改点:所有路径的地方修改为自己的

      路径解析:testplans的路径下为需要运行的脚本---->

                        执行结果jtl文件放在jmeter.result.jtl.dir--->

                        将jtl文件解析为html结果放在jmeter.result.html.dir

      jmeter.results.shanhe.me.xsl插件使用也在里!!!!

<?xml version="1.0" encoding="utf-8"?><project name="pc" default="all" basedir="D:\Program Files\apache-jmeter-5.2.1\jmeterAutoTest">
    <tstamp>
        <format property="time" pattern="yyyyMMddhhmm" />
    </tstamp>
    
    <property name="jmeter.home" value="D:\Program Files\apache-jmeter-5.2.1" />
    
    <property name="jmeter.result.jtl.dir" value="D:\Program Files\apache-jmeter-5.2.1\jmeterAutoTest\pc\resultlog\jtl" />
       
    <property name="jmeter.result.html.dir" value="D:\Program Files\apache-jmeter-5.2.1\jmeterAutoTest\pc\resultlog\html" />
    
    <property name="ReportName" value="Jmeter的html报告" />
  
    <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />
    <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${test}${time}.jtl" />
    
     
    <target name="all">
        <antcall target="test" />
        <antcall target="report" />
    </target>
    <target name="test">
        <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
        <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
            
            <testplans dir="D:\Program Files\apache-jmeter-5.2.1\jmeterAutoTest\pc\script" />
        </jmeter>
    </target>

    <path id="xslt.classpath">
        <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
        <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
    </path>

    <target name="report">
        <xslt        classpathref="xslt.classpath"
            force="true"
        in="${jmeter.result.jtlName}" 
        out="${jmeter.result.htmlName}" 
        style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
            <param name="dateReport" expression="${time}"/>
    </xslt>
        
        <copy todir="${jmeter.result.html.dir}">
            <fileset dir="${jmeter.home}/extras">
                <include name="collapse.png" />
                <include name="expand.png" />
            </fileset>
        </copy>
    </target></project>

(2)jmeter.properties修改

jmeter.save.saveservice.output_format=xml

# The below properties are true when field should be saved; false otherwise
#
# assertion_results_failure_message only affects CSV output
jmeter.save.saveservice.assertion_results_failure_message=true
#
# legitimate values: none, first, all
jmeter.save.saveservice.assertion_results=none
#
jmeter.save.saveservice.data_type=true
jmeter.save.saveservice.label=true
jmeter.save.saveservice.response_code=true
# response_data is not currently supported for CSV output
jmeter.save.saveservice.response_data=true
# Save ResponseData for failed samples
jmeter.save.saveservice.response_data.on_error=true
jmeter.save.saveservice.response_message=true
jmeter.save.saveservice.successful=true
jmeter.save.saveservice.thread_name=true
jmeter.save.saveservice.time=true
jmeter.save.saveservice.subresults=true
jmeter.save.saveservice.assertions=true
jmeter.save.saveservice.latency=true
# Only available with HttpClient4
#jmeter.save.saveservice.connect_time=true
jmeter.save.saveservice.samplerData=true
jmeter.save.saveservice.responseHeaders=true
jmeter.save.saveservice.requestHeaders=true
jmeter.save.saveservice.encoding=true
jmeter.save.saveservice.bytes=true
# Only available with HttpClient4
#jmeter.save.saveservice.sent_bytes=true
jmeter.save.saveservice.url=true
jmeter.save.saveservice.filename=false
jmeter.save.saveservice.hostname=false
jmeter.save.saveservice.thread_counts=true
jmeter.save.saveservice.sample_count=false
jmeter.save.saveservice.idle_time=true

(3)运行

将调试好的脚本放入build.xml中testplans指向的路径

在build.xml文件所在的目录下(ant默认会找当前目录下的build.xml文件)

如果 style="${jmeter.home}/extras/jmeter-results-report_21.xsl"> 

结果样式为:(没有请求的详细内容)

(4)发送邮件

第一步:下载插件

commons-email.jar :http://www.xwood.net/_site_domain_/_root/5870/5930/5932/9330/9352/t_c46454.html

activation-1.1.1.jar:https://maven.ityuan.com/maven2/javax/activation/activation/1.1.1

javax.mail.jar:https://maven.java.net/content/repositories/releases/com/sun/mail/javax.mail/1.6.0/

三个插件都放入ant的lib目录下

第二步:修改build.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<project name="ant-jmeter-test" default="run" basedir="D:\Program Files\apache-jmeter-5.2.1\jmeterAutoTest">
    <tstamp>
        <format property="time" pattern="yyyyMMddHHmm" />
    </tstamp>
    <!-- 需要改成自己本地的 Jmeter 目录-->
    <property name="jmeter.home" value="D:\Program Files\apache-jmeter-5.2.1" />
    <property name="report.title" value="jmeter接口测试报告"/>

    <!-- 163邮箱配置参数-->
    <property name="mail_host" value="smtp.163.com"/>
    <property name="mail_port" value="465"/>
    <property name="username" value="邮箱用户名"/>
    <property name="password" value="登录邮箱的授权码,这里是163的邮箱不同邮箱在网页版设置"/>
    <property name="mail_from" value="谁发邮件"/>
    <property name="mail_to" value="谁收邮件"/>
    <property name="mailsubject" value="jmeter的html报告"/>
    <property name="message" value="附件为测试报告"/>

    <!-- jmeter生成jtl格式的结果报告的路径-->
    <property name="jmeter.result.jtl.dir" value="D:\Program Files\apache-jmeter-5.2.1\jmeterAutoTest\pc\resultlog\jtl" />
    <!-- jmeter生成html格式的结果报告的路径-->
    <property name="jmeter.result.html.dir" value="D:\Program Files\apache-jmeter-5.2.1\jmeterAutoTest\pc\resultlog\html" />
    <!-- 生成的报告的前缀-->
    <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${report.title}${time}.jtl" />
    <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${report.title}${time}.html" />
    <!-- 输出生成的报告名称和存放路径-->
    <echo message="${jmeter.result.jtlName}"/>
    <echo message="${jmeter.result.htmlName}"/>
    <echo message="${jmeter.result.html.dir}"/>

    <target name="run">
        <antcall target="test"/>
        <antcall target="report"/>
        <antcall target="mail"/>
    </target>

    <target name="mail">
        <echo>发送测试报告</echo>
            <mail mailhost="${mail_host}"
                  ssl="true"
                  user="${username}"
                  password="${password}"
                  mailport="${mail_port}"
                  subject="${mailsubject}"
                  messagemimetype="text/html"
                  tolist="${mail_to}"  >
            <from address="${mail_from}" />

                <attachments>
                    <fileset dir="${jmeter.result.html.dir}">
                        <include name="${report.title}${time}.html" />
                    </fileset>
                </attachments>

                <message>
                ${message}
                </message>
            </mail>

    </target>

    <!--加载jar包,解决显示时间问题-->
    <path id="xslt.classpath">
        <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
        <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
    </path>

    <target name="test">
        <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
        <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
            <!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本-->
            <testplans dir="D:\Program Files\apache-jmeter-5.2.1\jmeterAutoTest\pc\script" includes="*.jmx" />

            <property name="jmeter.save.saveservice.output_format" value="xml"/>
        </jmeter>
    </target>

    <target name="report">
    <tstamp> <format property="report.datestamp" pattern="yyyy-MM-dd HH:mm" /></tstamp>
     <xslt
              classpathref="xslt.classpath"
              force="true"
              in="${jmeter.result.jtlName}"
              out="${jmeter.result.htmlName}"
              style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
              <param name="dateReport" expression="${report.datestamp}"/>
              <param name="titleReport" expression="${report.title}"/>

       </xslt>

    </target>
</project>

执行命令:

说说 我163邮箱的授权码哪里得来的

二、jmeter压测

目的:将jmeter压测脚本放置在liunx机器上运行,并使用jenkins触发、展示结果、发送邮件

1、liunx安装jmeter

java安装:https://blog.youkuaiyun.com/qq_42815754/article/details/82968464

jmeter安装:wget https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-5.4.1.tgz(解压就行了)

2、jenkins任务配置

(1)手工将脚本放入执行的机器上

后期可以使用git管理脚本(jenkins如何拉去git代码自行脑补吧)

(2) jenkins配置内容

 构建后加上两个插件解析报告

 邮件配置

邮件内容

<!DOCTYPE html>
<head>
<meta charset="UTF-8"  >
(本邮件是Jenkins自动发送,请勿回复!)
<br>hi, 韩芳jmeter-jenkins测试报告:<br>

<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>
 
<body text-align:center leftmargin="8" marginwidth="40" topmargin="8" marginheight="4" offset="1">

    <table width="90%" cellpadding="0" cellspacing="0"
        style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
        <div>
        <tr>
            <td><br />
            <b><font color="#0B610B">构建信息</font></b>
            <hr size="2" width="100%" align="center" /></td>
        </tr>
        <tr>
            <td>
                <ul>
                    <li>项目名称: ${PROJECT_NAME}</li>
                    <li>构建编号: 第${BUILD_NUMBER}次构建</li>
                    <li>构建状态:${BUILD_STATUS}</li>
                    <li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
                    <li>构建地址: <a href="${BUILD_URL}">${BUILD_URL}</a></li>
                    <li>项目地址: <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
                </ul>
            </td>
        </tr>
       </div>
    </table>
</body>
<html>
 <b><font color="#0B610B">测试报告:</font></b>
           <br>附件解压查看<br>

 执行后jenkins的结果展示(dashboard报告和jtl的报告)

 邮件展示

(3)问题解决 

 第一个问题:

一个变量只能使用两次,4次http的请求中前两次没有问题第三个请求失败,在liunx环境执行报错这个,但是windows却没有这个问题,我也是头疼(怀疑bat和sh执行文件不同,有机会可以研究下)

 解决办法:https://www.cnblogs.com/glumer/p/11363156.html

 第二个问题:jenkins不展示js的问题,导致jmeter的dashboard展示不了

 解决:https://testerhome.com/topics/9476

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", ""

 3、jenkins配置参数驱动jmeter压测脚本

 jenkins中的执行shell

#清除历史数据
rm -rf /home/guobin1/jmeter/log/*
rm -rf /home/guobin1/jmeter/*.jtl
rm -rf /home/guobin1/jmeter/result/*
rm -rf /home/guobin1/jmeter/result-*.tar.gz

#jmeter的命令行模式执行脚本
# -n -t 已命令行方式执行后面的jmx脚本
# -l 指定jtl的结果
# -j 指定输出日志
# -e -o 指定dashboard的报告输出路径,一定要保证是空的
# -J 对jmeter脚本动态传入参数化值
/home/guobin1/jmeter/apache-jmeter-5.4.1/bin/jmeter.sh  -n -t /home/guobin1/jmeter/script/one.jmx -l /home/guobin1/jmeter/jmeter-${BUILD_NUMBER}-${BUILD_ID}.jtl -j  /home/guobin1/jmeter/log/jmeter-${BUILD_NUMBER}-${BUILD_ID}.log -e -o /home/guobin1/jmeter/result -JthreadNum=${threadNum} -JloopNum=${loopNum} -JrampupTime=${rampupTime} -Jip=${ip}

# 打包结果做邮件附件
tar -zcf result-${BUILD_NUMBER}.tar.gz result

4、curl方式执行jenkins

方便运维,研发使用

#不带参数方式
curl -v -X GET "http://(jenkins的ip):8080/jenkins/job/hf-test-allure/build?token=123456" --user 用户名:密码

# 带参数方式
curl -v -X GET "http://(jenkins的ip):8080/jenkins/job/hf-test-allure/buildWithParameters?token=123456&loopNum=100&rampupTime=10" --user 用户名:密码

不想使用自己的账户密码,可以创建一个公共的账号

参考文章:https://www.cnblogs.com/nzg-noway/p/6909821.html

https://www.cnblogs.com/yifeixu/p/11742452.html

https://www.cnblogs.com/poloyy/p/13280899.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值