下载jdk18(最新版的jenkins后续不支持jdk8,所以下载jdk18):https://www.oracle.com/cn/java/technologies/javase/downloads/#java8,选择对应的linux版本进行下载
下载后的tar包,通过rz/scp或者ftp传输工具(xftp/FileZilla)传输到目标linux服务器,解压后移动到目标目录,我这里是保存到/usr/tools/
# 解压
tar -zxvf jdk-18_linux-x64_bin.tar.gz
# 解压后的文件移动到指定目录
mv ./jdk-18.0.1.1 /usr/tools
将jdk添加到环境变量
# 打开环境变量配置文件
vim /etc/profile
在文件末尾添加java环境变量
#java env
JAVA_HOME=/usr/tools/jdk-18.0.1.1(你的jdk目录)
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$JAVA_HOME/bin:
export JAVA_HOME
export CLASSPATH
export PATH
重新加载环境变量
source /etc/profile
验证jdk是否安装成功
java -version
下载jmeter包:https://jmeter.apache.org/download_jmeter.cgi,下载后上传到服务器、解压后移动到指定目录,步骤和jdk安装一样,这里我安装到/usr/tools
vim /etc/profile
配置环境变量
在文件末尾添加jmeter环境配置
#jmeter env
JMETER_HOME=/usr/tools/apache-jmeter-5.5
CLASSPATH=.:$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/log4j-core-2.11.0.jar
PATH=$PATH:$JAVA_HOME/bin:$JMETER_HOME/bin:$ANT_HOME/bin
export JMETER_HOME
export CLASSPATH
export PATH
重新加载环境变量
source /etc/profile
验证是否安装成功
jmeter -v
下载ant,下载地址:https://ant.apache.org/bindownload.cgi
下载包上传到服务器,解压后移动到指定目录
tar -zxvf /etc/apache-ant-1.10.9-bin.tar
mv /etc/apache-ant-1.10.9-bin.tar /usr/tools
vim /etc/profile
修改环境配置
export ANT_HOME=/home/test/apache-ant-1.10.9
export PATH=$PATH:$ANT_HOME/bin
重新加载环境变量
source /etc/profile
检查是否安装成功,输入ant -v
,成功会出现如下信息
文件配置
创建ant工作目录以及报告存放目录
创建工作目录我这里选择的/usr/jmeter_test
,在目录下创建script、result和data文件夹,其中script存放jmeter脚本文件和build.xml文件,result下新建jtl和html文件存放jmeter报告,data存放csv配置的数据文件
本地下载的jmeter插件要同步到linux上的jmeter,否则运行会失败
build文件存放在script目录中,我这里对build.xml做了点个性化配置
<project name="ant-jmeter" default="all">
<description>
Jmeter+Ant+Jenkins
description>
<property name="jmeter.home" value="/usr/tools/apache-jmeter-5.5"/>
<property name="script.dir" value="/usr/JmeterScript/wgh/Script"/>
<property name="jmeter.result.dir" value="/usr/JmeterScript/wgh/result"/>
<property name="jmeter.result.title" value="WGH_interface Test Summary Report"/>
<property name="jmeter.result.name" value="Test"/>
<property name="show-data" value="n"/>
<property name="format" value="2.1"/>
<condition property="style_version" value="_21">
<equals arg1="${format}" arg2="2.1"/>
condition>
<condition property="funcMode">
<equals arg1="${show-data}" arg2="y"/>
condition>
<condition property="funcMode" value="false">
<not>
<equals arg1="${show-data}" arg2="y"/>
not>
condition>
<path id="jmeter.classpath">
<fileset dir="${jmeter.home}\extras">
<include name="ant-jmeter*.jar"/>
fileset>
path>
<taskdef
name="jmeter"
classpathref="jmeter.classpath"
classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>
<target name="all" depends="run,report"/>
<target name="run">
<echo>funcMode = ${funcMode}echo>
<delete file="${jmeter.result.dir}/html/${jmeter.result.name}.html"/>
<delete file="${jmeter.result.dir}/jtl/${jmeter.result.name}.jtl"/>
<jmeter
jmeterhome="${jmeter.home}"
jmeterproperties="${jmeter.home}/bin/jmeter.properties"
resultlog="${jmeter.result.dir}/jtl/${jmeter.result.name}.jtl">
<testplans dir="${script.dir}" includes="*.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
<property name="jmeter.save.saveservice.response_data.on_error" value="${funcMode}"/>
jmeter>
target>
<property name="lib.dir" value="${jmeter.home}/lib"/>
<path id="xslt.classpath">
<fileset dir="${lib.dir}" includes="xalan*.jar"/>
<fileset dir="${lib.dir}" includes="serializer*.jar"/>
path>
<target name="report" depends="xslt-report,copy-images">
<echo>Report generated at ${report.datestamp}echo>
target>
<target name="xslt-report" depends="_message_xalan">
<echo>生成接口自动化测试报告echo>
<tstamp><format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/>tstamp>
<xslt
classpathref="xslt.classpath"
force="true"
in="${jmeter.result.dir}/jtl/${jmeter.result.name}.jtl"
out="${jmeter.result.dir}/html/${jmeter.result.name}.html"
style="${jmeter.home}/extras/jmeter-results-detail-report${style_version}.xsl">
<param name="showData" expression="${show-data}"/>
<param name="titleReport" expression="${report.title}"/>
<param name="dateReport" expression="${report.datestamp}"/>
xslt>
target>
<target name="copy-images" depends="verify-images" unless="samepath">
<copy file="${jmeter.home}/extras/expand.png" tofile="${jmeter.result.dir}/html/expand.png"/>
<copy file="${jmeter.home}/extras/collapse.png" tofile="${jmeter.result.dir}/html/collapse.png"/>
target>
<target name="verify-images">
<condition property="samepath">
<equals arg1="${jmeter.result.dir}" arg2="${jmeter.home}/extras/" />
condition>
target>
<condition property="xalan.present">
<and>
<available classpathref="xslt.classpath" classname="org.apache.xalan.processor.TransformerFactoryImpl"/>
<available classpathref="xslt.classpath" classname="org.apache.xml.serializer.ExtendedContentHandler"/>
and>
condition>
<target name="_message_xalan" unless="xalan.present">
<echo>Cannot find all xalan and/or serialiser jarsecho>
<echo>The XSLT formatting may not work correctly.echo>
<echo>Check you have xalan and serializer jars in ${lib.dir}echo>
target>
<path id="lib_classpath">
<fileset dir="${basedir}/">
<include name="mail*.jar" />
<include name="activation*.jar" />
<include name="commons-email*.jar" />
<include name="ant-contrib*.jar" />
fileset>
path>
<echo>jmeter.home = ${jmeter.home}echo>
project>
修改jmeter.properties文件如下部分,都改成true,让报告输出的内容更详细
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=false
# Save ResponseData for failed samples
jmeter.save.saveservice.response_data.on_error=false
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=false
jmeter.save.saveservice.responseHeaders=false
jmeter.save.saveservice.requestHeaders=false
jmeter.save.saveservice.encoding=false
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
这俩个也ctrl F找出来改下
jmeter.save.saveservice.output_format=xml
(csv改为xml)
server.rmi.ssl.disable=true
(false改为true)
测试运行
在以上步骤都完成后,进入script目录,直接运行ant
命令
提示BUILD SUCCESSFUL,即运行成功
可下载html查看html形式的测试报告,也可以通过jtl在jmeter里用查看结果树查看
jenkins有多种安装方式,我这里使用的是rpm安装
下载jenkins的rpm包
下载地址:https://jenkins.io/zh/download/或者https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/
安装rpm包及配置
安装:
rpm -ivh jenkins-2.358-1.1.noarch.rpm
配置
vim /etc/sysconfig/jenkins
修改端口号,8080有可能被占用
JENKINS_PORT=“8090”
vim /usr/lib/systemd/system/jenkins.service
同步修改里面的端口号
vi /etc/init.d/jenkins
编辑Jenkins配置文件,添加jdk的Java路径
重新配置的端口可能没有开放,这里需要开放端口
# 开启防火墙
systemctl start firewalld
# 开放指定端口
firewall-cmd --permanent --zone=public --add-port=8090/tcp
# 重启防火墙
Firewalls-cmd --reload
netstat -ntlp //查看当前所有tcp端口·
netstat -ntulp |grep 8090 //查看所有8090端口使用情况·
启动
# 重新加载配置
systemctl daemon-reload
# 启动
systemctl start jenkins
# 查看jenkins状态
systemctl status jenkins.service
安装好之后,打开浏览器,输入http://服务器IP:8090/,进入jenkins页面
点击系统管理->插件管理,在可选插件依次安装Ant Plugin
、HTML Publisher plugin
、Groovy
、Email Extension
找到Ant,添加ant的名字,和ANT_HOME路径
点击构建触发器->定时构建
* 匹配范围内所有值
M-N 匹配M~N范围内所有值
M-N/X 或者 */X 在指定M~N范围内或整个有效区间内每隔X构建一次
A,B,...,Z 匹配多个值
每隔5分钟构建一次
H/5 * * * *
每两小时构建一次
H H/2 * * *
每天中午12点定时构建一次
H 12 * * *
每天下午18点定时构建一次
H 18 * * *
在每个小时的前半个小时内的每10分钟
H(0-29)/10 * * * *
每两小时45分钟,从上午9:45开始,每天下午3:45结束
45 9-16/2 * * 1-5
每两小时一次,每个工作日上午9点到下午5点(也许是上午10:38,下午12:38,下午2:38,下午4:38)
H H(9-16)/2 * * 1-5