目录
一、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
874

被折叠的 条评论
为什么被折叠?



