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

JMeter中,可以通过修改报告模板和配置文件来实现对HTML报告图表的自定义。JMeter使用一个预定义的模板目录来生成HTML报告,该模板目录位于`./bin/report-template`。通过修改模板文件和配置,可以调整图表的样式、内容以及展示的指标。 ### 自定义HTML报告图表的步骤 #### 1. 修改模板文件 JMeterHTML报告是基于模板生成的,模板文件包括`.fmkr`格式的页面模板文件和相关的配置文件。这些文件位于`./bin/report-template`目录下。 - **index.html.fmkr**:这是报告的主页面模板文件,可以在这里修改报告的整体布局。 - **content/pages/**:该目录下的`.fmkr`文件分别对应报告的不同页面,如响应时间图表、吞吐量图表等。可以通过修改这些文件来自定义特定图表的显示内容。 例如,如果需要将报告中的某些文本翻译为中文,可以直接编辑这些`.fmkr`文件中的文本内容。 #### 2. 修改图表数据源和样式 JMeter的图表是通过JavaScript和HTML生成的,图表数据源通常由`index.json`文件提供。可以通过修改模板中的JavaScript代码来自定义图表的样式或添加新的图表类型。 - **修改图表样式**:可以在模板文件中调整CSS样式,或者在`report-template/content/css/`目录下修改样式表文件。 - **添加自定义图表**:如果需要添加新的图表,可以在`content/pages/`目录下创建新的`.fmkr`文件,并在主页面模板`index.html.fmkr`中添加链接或直接嵌入新图表。 #### 3. 使用自定义模板生成报告 完成模板修改后,可以通过以下命令生成报告: ```bash jmeter -g <测试结果文件.jtl> -o <输出报告目录> --template <自定义模板目录> ``` - `-g`:指定测试结果文件(如`results.jtl`)。 - `-o`:指定生成报告输出目录。 - `--template`:指定自定义模板目录(如`./custom-template`)。 注意:输出报告目录必须是一个不存在的目录,JMeter会自动创建它。 #### 4. 自定义图表的示例 假设需要在报告中添加一个新的图表,例如显示每个事务的错误率,可以按照以下步骤操作: - 在`report-template/content/pages/`目录下创建一个新的`.fmkr`文件,例如`error-rate.html.fmkr`。 - 在该文件中编写HTMLJavaScript代码,使用JMeter提供的JSON数据作为数据源。 - 在`index.html.fmkr`中添加一个链接或直接嵌入该图表页面。 示例代码片段: ```html <div id="errorRateChart" style="width: 600px; height: 400px;"></div> <script> // 假设数据源为index.json中的errorRates字段 var errorRates = ${errorRates}; // 使用ECharts或其他图表库绘制图表 var chart = echarts.init(document.getElementById('errorRateChart')); chart.setOption({ title: { text: '错误率分布' }, tooltip: {}, xAxis: { data: errorRates.labels }, yAxis: {}, series: [{ type: 'line', data: errorRates.values }] }); </script> ``` #### 5. 注意事项 - **备份原始模板**:在修改模板文件之前,建议备份原始模板目录,以便在需要时恢复默认设置。 - **测试自定义模板**:生成报告后,建议在浏览器中打开报告,检查图表是否正常显示,并确保没有JavaScript错误。 - **兼容性**:确保自定义模板与当前JMeter版本兼容,避免因版本差异导致的问题。 通过上述方法,可以灵活地自定义JMeter HTML报告中的图表内容和样式,以满足特定的测试报告需求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值