Linux环境下搭建jenkins+jmeter+ant持续集成测试平台
文章目录
一、JDK安装
-
下载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
-
下载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
-
下载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
,成功会出现如下信息
四、Jmeter+Ant配置
-
文件配置
- jmeter需要生成报告,就需要下载jmeter.results.shanhe.me.xsl,下载地址为:New XSL stylesheet for JMeter command line results report | shanhe.me
- “jmeter.results.shanhe.me.xsl” 文件放到jmeter安装目录的 extras 目录下
- 将jmeter的extras目录下的ant-jmeter-1.1.1.jar文件,拷贝到Ant安装目录的lib目录下
- 将jmeter的lib目录下,把serializer-2.7.2.jar、xalan-2.7.2.jar文件复制到ant的lib目录下
-
创建ant工作目录以及报告存放目录
创建工作目录我这里选择的
/usr/jmeter_test
,在目录下创建script、result和data文件夹,其中script存放jmeter脚本文件和build.xml文件,result下新建jtl和html文件存放jmeter报告,data存放csv配置的数据文件 -
本地下载的jmeter插件要同步到linux上的jmeter,否则运行会失败
-
build文件存放在script目录中,我这里对build.xml做了点个性化配置
<?xml version="1.0" encoding="utf-8"?> <project name="ant-jmeter" default="all"> <description> Jmeter+Ant+Jenkins <!--文件描述,可选择项--> </description> <!--定义变量并赋值,能够减少配置工作量,后面会用到--> <!--定义JMeter的工作目录,与%JMETER_HOME%指向同一个目录--> <property name="jmeter.home" value="/usr/tools/apache-jmeter-5.5"/> <!--定义JMeter脚本存放目录--> <property name="script.dir" value="/usr/JmeterScript/wgh/Script"/> <!--定义JMeter的测试结果存放目录--> <property name="jmeter.result.dir" value="/usr/JmeterScript/wgh/result"/> <!--定义测试报告Title--> <property name="jmeter.result.title" value="WGH_interface Test Summary Report"/> <!--定义测试结果名称--> <property name="jmeter.result.name" value="Test"/> <!--测试报告中是否显示失败事务,n为不显示--> <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> <!--定义任务,即测试活动,依赖于ant-jmeter.jar包--> <taskdef name="jmeter" classpathref="jmeter.classpath" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/> <!--定义任务,一个是run,即运行脚本,一个是report,即生成报告--> <target name="all" depends="run,report"/> <!--定义run任务--> <target name="run"> <!--显示上面定义的${show-data}取值--> <echo>funcMode = ${funcMode}</echo> <!--删除前一次的测试报告,Html格式的,上面有定义${jmeter.result.name}变量的值--> <delete file="${jmeter.result.dir}/html/${jmeter.result.name}.html"/> <!--删除前一次的测试报告,Html格式的,上面有定义${jmeter.result.name}变量的值--> <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"> <!-- 指定测试脚本。"*.jmx"指包含此目录下的所有jmeter脚本 --> <testplans dir="${script.dir}" includes="*.jmx" /> <!--指定测试结果输出格式,在此指定的是xml,也可以指定成文本格式及CSV格式--> <!--先暂时指定成xml格式,后续会变换成文本格式--> <property name="jmeter.save.saveservice.output_format" value="xml"/> <!--是否记录错误信息,上面已经定义了${funcMode}=n--> <property name="jmeter.save.saveservice.response_data.on_error" value="${funcMode}"/> </jmeter> </target> <!--定义依赖包目录--> <property name="lib.dir" value="${jmeter.home}/lib"/> <!-- Use xalan copy from JMeter lib directory to ensure consistent processing with Java 1.4+ --> <path id="xslt.classpath"> <fileset dir="${lib.dir}" includes="xalan*.jar"/> <fileset dir="${lib.dir}" includes="serializer*.jar"/> </path> <!--定义report任务,此任务依赖于xslt-report,copy-images这2个任务--> <target name="report" depends="xslt-report,copy-images"> <echo>Report generated at ${report.datestamp}</echo> </target> <!--xslt-report是使用xslt来把xml文件转换成Html格式来显示--> <!--_message_xalan 被xslt-report依赖,由它生成报告--> <target name="xslt-report" depends="_message_xalan"> <echo>生成接口自动化测试报告</echo> <tstamp><format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/></tstamp> <!--in:将测试结果作为输入--> <!--style:xslt定义的模板文件地址--> <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"> <!-- style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl --> <param name="showData" expression="${show-data}"/> <param name="titleReport" expression="${report.title}"/> <param name="dateReport" expression="${report.datestamp}"/> </xslt> </target> <!--copy-images用来cpoy图片,xslt模板中的图片由copy-images任务copy到报告目录--> <target name="copy-images" depends="verify-images" unless="samepath"> <!--生成Html报告时需要Copy图标到报告目录,expand.png展开图标,collapse.png收起图标--> <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> <!-- No need to check all jars; just check a few --> <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 jars</echo> <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> <!--仅仅打印前面定义的变量的值,检查是否如你所愿,在定义变量时做调试用,可以去掉--> <!--target name="mail"> <for list="hanxm@thunisoft.com" param="tmp" > <sequential> <echo>message @{tmp}</echo> <mail mailhost="smtp.thunisoft.com" mailport="25" ssl="false" subject="ant mail" messagemimetype="text/html" user="zhangjn" password="xxxx" tolist="@{tmp}"> <from address="zhangjn@thunisoft.com" /> <fileset dir="${jmeter.result.html.dir}"> <include name="*.html" /> <include name="*.png" /> </fileset> <message>支持多人同时发邮件!!<br /><br /></message> </mail> </sequential> </for> </target--> <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安装与配置
1.Jenkins安装
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页面
2.Jenkins配置
插件安装:
点击系统管理->插件管理,在可选插件依次安装Ant Plugin
、HTML Publisher plugin
、Groovy
、Email Extension
系统设置
-
点击系统管理->系统设置,进入到这个页面,编辑全局属性
添加环境变量
ANT_HOME
和JAVA_HOME
全局工具配置
找到Ant,添加ant的名字,和ANT_HOME路径
3.项目配置
-
点击新建任务,选择构建一个自由风格的软件项目
-
添加构建操作
-
增加构建操作,选择
Execute system Groovy script
在在命令行输入System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "script-src 'unsafe-inline'")
这个命令是用于处理测试报告样式无法加载问题的
-
再增加加构建操作,
Invoke Ant
选择ant版本,需要运行的节点填写你build.xml文件中的节点,BuildFile就选择脚本目录下面的build.xml的路径
-
-
构建后操作
-
增加构建后操作,选择
Publish HTML reports
-
HTML directory to archive
,填写包含存放路径 -
Index page[s]
,填写报告名字,如果有多个报告,可以填写*.html
-
-
构建定时任务
点击构建触发器->定时构建
定时任务构建规则:
* 匹配范围内所有值
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