Linux環境下搭建Jenkins+Jmeter+Ant持續集成測試平臺
一、JDK安裝
- 下載jdk18(最新版的jenkins后續不支持jdk8,所以下載jdk18):https://www.oracle.com/cn/java/technologies/javase/downloads/#java8,選擇對應的linux版本進行下載
image-20220725095747308.png
-
下載后的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
命令[圖片上傳失敗...(image-43ba7f-1658731744869)]
提示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路徑
[圖片上傳失敗...(image-f9622f-1658731744869)]
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