jmeter+ant+jenkins性能自动化环境搭建
一、jmeter
jmeter写的脚本放入容器中当作控制机
执行机可以任意操作系统
配置助攻机器
1、在jmeter.properties中修改
#server_port=1099
server_port=1098 自定义端口
#server.rmi.port=1234
server.rmi.port=1098 修改与server_port相同的端口,意思为:是否开启认证。
#server.rmi.ssl.disable=false
server.rmi.ssl.disable=true 不开启加密认证
2、启动服务
控制机配置
修改jmeter.properties
remote_hosts=填写助攻机器ip
server.rmi.ssl.disable=true
二、jenkins
Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。
1.安装
三、jenkins的安装
1、下载war包,放到tomcat上
2、docker部署,进行目录挂载,我用的是docker部署的
2.jenkins配置
1、jenkins登录后安装插件,有测试报告插件,创建项目(百度) 2、设置全局变量:jdk路径,ant ![在这里插入图片描述](https://img-blog.csdnimg.cn/4519fe0f73674660804c60ab99188fc2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aeR5aiY5Yir56eD5aS0,size_20,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/e1716c1ce8f542c3ae5a0c307e1dc8fd.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aeR5aiY5Yir56eD5aS0,size_20,color_FFFFFF,t_70,g_se,x_16)3、 邮箱配置,在build.xml中进行配置
3.ant配置
ant是代码编译执行
1、下载ant,并解压
2、上传到jenkins的容器里面
3、配置环境变量:mv apache-ant-xxx /usr/local
在/usr/local中建立软连接 ln -s apache-ant-xxx ant,打开etc/profile文件设置环境变量。
Source /etc/profile
输入ant -version出现报错:Permission denied
解决:赋予权限
5、将jmeter下的extras里面的ant-jmeter.jar报放到ant的lib目录下 发邮件
cp ant-jmeter-1.1.1.jar /usr/local/ant/lib/
6、设置build.xml文件
project项目只有一个
Default=all 默认情况下,会执行任务名为all的任务,all的任务包含了test,report,mail.默认情况下会执行入围,生成报告,发邮件的任务。
可以在jenkins中的target设置执行的任务
设置build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="kyj-cicd" default="all" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<property name="encoding" value="UTF-8" />
<!-- 需要改成自己本地的 Jmeter 目录-->
<property name="jmeter.home" value="xxx/apache-jmeter-5.1.1" />
<property name="report.title" value="接口性能监控"/>
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="${jmeter.home}/work/resultLog/jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="${jmeter.home}/work/resultLog/html" />
<!-- 生成的报告的前缀-->
<property name="ReportName" value="TestReport" />
<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
<property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />
<target name="all">
<antcall target="test" />
<antcall target="report" />
<antcall target="mail" />
</target>
<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="${jmeter.home}/bin/lemon" includes="*.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</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">
<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-detail-report_21.xsl">
<param name="showData" expression="${show-data}"/>
<param name="dateReport" expression="${report.datestamp}"/>
<param name="titleReport" expression="${report.title}:${report.datestamp}"/>
</xslt>
<!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
<property name="mail_from" value="xxx@qq.com" />
<property name="password" value="xxx" />
<!--mail_to:发送列表,多个之间逗号间隔 -->
<property name="mail_to" value="xxx@qq.com" />
<property name="mailport" value="587" />
<!--邮箱需要开通smtp服务-->
<property name="mailhost" value="smtp.qq.com" />
<target name="mail">
<loadfile property="report" srcFile="${jmeter.result.htmlName}" encoding="${encoding}" />
<mail from="${mail_from}" tolist="${mail_to}" mailport="${mailport}" mailhost="${mailhost}" user="${mail_from}" password="${password}" subject="TestReport-${ant.project.name}" messagemimetype="text/html">
<message>
本轮构建的结果如下:
${report}
</message>
</mail>
<delete file="${jmeter.result.htmlName}" />
</target>
</project>
4.立即构建
点击立即构建
1、生成报告失败
解决:需要设置权限给输出的文件
2、解决问题1后出现 发送邮件失败的问题
3、解决
解决方案
下载commons-email.jar包:
https://commons.apache.org/proper/commons-email/download_email.cgi
下载activation-1.1.1.jar包:
http://www.java2s.com/Code/Jar/a/Downloadactivation221jar.htm
下载javax.mail.jar包:
https://github.com/javaee/javamail/releases
将三个 jar 包都放在 ant 的 \lib 目录下,再次运行即可,运行成功