一、安裝JDK
1、安裝JDK1.8:yum -y install java-1.8.0-openjdk*.*,安裝成功後可以查看
2、配置環境變量:vi /etc/profile然後添加
JAVA_HOME=/usr/local/jdk1.8
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
二、安裝ant
上傳ant的包到服務器並解壓tar -xzvf apache-ant-1.10.7-bin.tar.gz
vi /etc/profile配置環境變量:
export ANT_HOME=/opt/apache-ant-1.10.7
export PATH=$ANT_HOME/bin:$PATH
三、安裝Jmeter
上傳Jmeter到服務器解壓後可直接使用:tar -xvzf apache-jmeter-5.2.1_linux.tgz
進入到Jmeter的bin目錄查看到jmeter的版本表示安裝成功:
四、安裝Jenkins
1、下載jenkins.war並上傳到服務器上,使用java -jar jenkins.war --httpPort=8080(可換成其他端口號)啓動Jenkins
2、在瀏覽器中輸入:http://192.168.231.128:8080/,出現下面說明Jenkins啓動成功了
3、瀏覽器訪問時可能會訪問失敗,可參考 https://blog.csdn.net/qq_32639315/article/details/105590564 解決。然後將/root/.jenkins/secrets/initialAdminPassword裏面的一串字符複製到管理員密碼輸入框,點擊“繼續”
4、選擇“選擇插件來安裝”,去掉所有的選項,點擊“安裝”,然後下面的界面設置用戶名密碼,我這裏設置爲用戶名:
admin,密碼:123456
五、非GUI運行Jmeter
1、爲什麼要非GUI運行Jmeter?
減少資源利用,爲後面做持續集成做準備
2、非GUI運行jmeter腳本:./jmeter.sh -n -t /opt/apache-jmeter-5.2.1/bin/jmeterRes/getBaiDu.jmx -l Test.jtl
getBaiDu.jmx腳本內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="4.0" jmeter="4.0 r1823414">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="測試計劃" enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
<boolProp name="TestPlan.functional_mode">false</boolProp>
<boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="用戶定義的變量" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="TestPlan.user_define_classpath"></stringProp>
</TestPlan>
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="線程組" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循環控制器" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">100</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">10</stringProp>
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
<hashTree>
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP信息頭管理器" enabled="true">
<collectionProp name="HeaderManager.headers"/>
</HeaderManager>
<hashTree/>
<CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie 管理器" enabled="true">
<collectionProp name="CookieManager.cookies"/>
<boolProp name="CookieManager.clearEachIteration">false</boolProp>
</CookieManager>
<hashTree/>
<ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP請求默認值" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="用戶定義的變量" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="HTTPSampler.domain"></stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.protocol"></stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path"></stringProp>
<stringProp name="HTTPSampler.concurrentPool">6</stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
</ConfigTestElement>
<hashTree/>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP請求" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="用戶定義的變量" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="HTTPSampler.domain">www.baidu.com</stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.protocol">http</stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">/</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="響應斷言" enabled="true">
<collectionProp name="Asserion.test_strings">
<stringProp name="270263191">www.baidu.com</stringProp>
</collectionProp>
<stringProp name="Assertion.custom_message"></stringProp>
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
<boolProp name="Assertion.assume_success">false</boolProp>
<intProp name="Assertion.test_type">16</intProp>
</ResponseAssertion>
<hashTree/>
</hashTree>
<ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>true</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
<sentBytes>true</sentBytes>
<threadCounts>true</threadCounts>
<idleTime>true</idleTime>
<connectTime>true</connectTime>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
<ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="察看結果樹" enabled="false">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>true</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
<sentBytes>true</sentBytes>
<threadCounts>true</threadCounts>
<idleTime>true</idleTime>
<connectTime>true</connectTime>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
</jmeterTestPlan>
3、將測試結果轉換爲HTML格式:
①jmeter -g Test.jtl -o result 或者
②./jmeter.sh -n -t /opt/apache-jmeter-5.2.1/bin/jmeterRes/getBaiDu.jmx -l Test.jtl -e -o /opt/apache-jmeter-5.2.1/bin/jmeterRes/Report
用方法②時需要將jmeter.properties裏面的jmeter.save.saveservice.output_format這行註釋掉
六、Jenkins調用Jmeter
不需要安裝任何插件,把非GUI模式運行的命令放到Jenkins裏面,創建一個Job,即可。
1、New Item -> 在Enter an item name裏面輸入“Jenkins調Jmeter” -> Freestyle project -> OK
2、在build裏面輸入要執行的命令然後點擊“保存”
cd /opt/apache-jmeter-5.2.1/bin
./jmeter.sh -n -t /opt/apache-jmeter-5.2.1/bin/jmeterRes/getBaiDu.jmx -l baidu${BUILD_NUMBER}.jtl -e -o /opt/apache-jmeter-5.2.1/bin/jmeterRes/Report${BUILD_NUMBER}
3、可以看到構建成功了,點進去看還可以看見構建成功的日誌
六、Jenkins調用Ant,Ant調用Jmeter
1、安裝插件Ant In Workspace
2、安裝Ant並配置好Ant的環境變量
3、將/opt/apache-jmeter-5.2.1/extras下的ant-jmeter-1.1.1.jar拷貝Ant的lib目錄下
4、在jmeter的extras目錄下放置配置文件:build.xml,build.xml的內容如下:
<?xml version="1.0" encoding="utf-8"?>
<project name="ant-jmeter-test" default="run" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<property name="jmeter.home" value="/opt/apache-jmeter-5.2.1" /><!-- 需要改成自己本地的 Jmeter 目錄-->
<property name="jmeter.result.jtl.dir" value="/opt/apache-jmeter-5.2.1/ant_demo/resultLog/jtl" /><!-- jmeter生成jtl格式的結果報告的路徑-->
<property name="jmeter.result.html.dir" value="/opt/apache-jmeter-5.2.1/ant_demo/resultLog/html" /><!-- jmeter生成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="run">
<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="/opt/apache-jmeter-5.2.1/ant_demo/script" includes="*.jmx" /><!-- 聲明要運行的腳本。"*.jmx"指包含此目錄下的所有jmeter腳本-->
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>
</target>
<target name="report">
<xslt in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlName}"
style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" />
<!-- 因爲上面生成報告的時候,不會將相關的圖片也一起拷貝至目標目錄,所以,需要手動拷貝 -->
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
</project>
5、在/opt/apache-jmeter-5.2.1/ant_demo/script目錄下放入要執行的腳本
運行ant run提示如下說明Ant調用Jmeter成功
6、Jenkins上Global Tool Configuration裏面配置Ant和JDK的環境參數
7、創建Jenkins調Ant(Ant調用Jmeter)的Job
8、構建,可以看見構建成功
七、Jenkins調用ANT,ANT調用Jmeter,並生成報告(包括郵件)
1、安裝插件Email Extension Plugin
2、郵件開通授權碼
3、Manage Jenkins -> Configure System -> Jenkins Location,System Admin e-mail address處配置發件人的郵箱
全部配置好後,點擊右下角的“Test configuration”看是否能夠發送成功
4、Jenkins中創建Job,並做一些配置,然後構建,可以看到郵件發送成功了