需要留心的地方
關於基礎部分不再贅述,參照jmeter即可。但是有一些使用過程中個人覺得應該留心的點及自己爬過的一些坑記錄一下
參數化和關聯 一起使用時
網上的例子多將參數化和關聯分開case介紹,辣么如果我想從參數化返回的結果中提取關鍵字用於下一個case的參數時,如果使用呢。
只需要在前一個測試用例中定義多個正則提取器即可,就可以做到參數化與關聯一起使用,如圖。
批量執行腳本
關於ant+jmeter接口批量執行測試用例,需要做的步驟准備依次是(以windows為例):
- jdk安裝及配置
- ant安裝及配置
- jmeter安裝及配置
- jmeter>bin目錄下,存放腳本文件xxx.jmx;jmeter目錄下創建report文件夾用於存儲測試結果報告
- 將JMeter所在目錄下extras子目錄里的ant-JMeter-1.1.1.jar復制到Ant所在目錄lib子目錄之下
- jmeter默認保存的文件是csv格式,修改jmeter.properties配置文件,jmeter.save.saveservice.output_format=xml
- 在ant的bin目錄下創建一個build.xml文件。copy代碼並做一定修正(代碼詳細參照如下網頁)
- cmd中cd到ant的bin目錄下,鼠標拖拽命令ant.bat后回車。執行后去report陸慕下即可查看報告詳情了
https://my.oschina.net/MrToStudy/blog/718602
注意:用ant.bat命令執行后,會再report目錄下生成測試報告文件。關於測試報告還有兩個問題需要解決
解決方案:修改ant>bin目錄下的build.xml文件。其中藍字部分是必須要添加的內容。文件詳細build.xml
通過如上修正,完美搞定如上兩點的報告格式問題。
關於搭建持續集成測試接口平台(jmeter+ant+jenkins)
需要特別注意的幾個地方:
- build.xml內需要修改的一些地方,其中特別強調這幾行代碼一定要加上
- bulid.xml此處操作的build.xml是指ant內的bulid.xml文件(而且這個文件是自己新建的,新建的,新建的!內容嘛,當然是網上copy的再根據實際自己改改),而不是指jmeter/extra文件下的bulild.xml
- 將此bulid.xml與.jmx文件放到一個目錄
- 關於jmeter 構建里的ant Invoke配置時,Build File處填的是如上bulid.xml的文件路徑,而不是.jmx文件。如下圖
關於環境配置詳情,這個網頁寫的比較好。並親測好用~
http://www.51testing.com/html/67/n-3723567.html
09/29為止,目前根據build.xml文件配置內容,cd到ant/bin目錄下時,執行ant.bat時輸出的是舊的報告模板。用jenkins自動構建的時候,用的是自定義后的報告模板
默認模板style:jmeter-results-detail-report_21.xsl
改了之后的模板style:jmeter-results-shanhe-me.xsl
JDBC Request
拜托各位大俠在寫博客的時候,能不能標明你用的版本號。能不能再細致一點。我能說我翻了一天才終於繞過這些個坑,把環境調通嗎,都是淚啊。。。。。。
操作步驟(因為我本機用的是mysql數據庫(而不是oracle,所以此步驟為mysql的操作。)
-
本機的mysql數據庫搭建略
-
Test Plan>Thread Group下創建JDBC Connection Configuration。詳細如下圖。此處需要注意Database URL處jdbc:mysql://localhost:3306/autotest?serverTimezone=UTC必須加上"?serverTimezone=UTC"
否則會報這個錯:Caused by: java.sql.SQLException: The server time zone value
'�й���ʱ��'
is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value
if
you want to utilize time zone support.
-
JDBC Driver class應設置為:com.mysql.cj.jdbc.Driver. 如果設置為com.mysql.jdbc.Driver,會報錯找不到這個driver。此處為新版jdbc驅動的原因
- Add>Sampler>JDBC Request。其中Variable Name必須與JDBC Connection Configuration中的Variable Name Bound to Pool中的Variable Name一致。
- 添加View Results Tree Listner即可查看結果,大功告成~~~
注意:jdbc驅動jar文件需要去mysql網站上下載合適的版本,並且放到jmeter的lib文件夾下后,重啟jmeter使其生效。
官網上下載后,解壓zip包中的mysql-connector-java-8.0.12.jar文件(解壓后還有一些其他文件,不用copy那些文件,只需要包內的.jar文件)
JDBC Request參數化:
- Test plan中設置參數並賦值
- 在jdbc request sql文中引用變量有兩種方式:一種是sql文中直接引用;另一種方式是sql穩重使用?占位符方式,parameter value中添加具體引用的參數。如下圖:
分布式測試jdbc數據庫時
windows上遠程測試linux服務器上的mysql數據庫時。除了將jdbc驅動jar文件放到lib目錄下之外。如下配置好測試參數后,會報錯
Cannot create PoolableConnectionFactory (null, message from server: "Host '10.34.163.70' is not allowed to connect to this MySQL server")
錯誤原因是因為使用遠程登錄的用戶不允許從遠程登錄。
解決方法:命令授權后,mysql配置文件接收所以ip鏈接:https://blog.csdn.net/timo1160139211/article/details/72831771
分布式環境搭建
windows與linux分布式環境(master機器在windows上,slave機器在linux上)
是的,已經在坑里趴了2天了。slave機器上執行完畢,但master機器上一直收不到slave的測試結果(view result tree一直為空)。此處暫時放一放。
當然了,還是成功跳過過一些小坑坑的,解決方法如下:
- 報no such object in table錯誤:需要更改slave機器上的server port
- 報Engine is busy - please try later:master上先remote stop all,然后重新運行slave上的jmeter-server
windows與linux分布式環境(master機器和slave機器都放到linux上)
執行思路。三台機器上都安裝jmeter環境完畢。並都可以用非GUI模式執行windows上傳過來的jmx腳本。之后再挑其中一台作為master機器,其他兩台作為slave機器來執行腳本。
問題來了。目前,CGWEBQA7501上用非GUI模式執行成功,並將結果文件夾下載到windows,查看其中的.html文件生成的報告。但是CCWEBQA1501上非GUI模式無法執行jmx腳本。
解決方法:用CGWEBQA7501的lib文件替換掉CCWEBQA1501的lib文件即可。有一些jar插件庫不同導致的。具體的需要哪些jar庫需要繼續深入研究
問題又來了:
按照如上思路進行后,在linux master機器上執行非GUI分布式測試命令,報如下錯誤
命令詳細:jmeter -n -t baiduBasicTest.jmx -r -l baidu_request_results.jtl -e -o /usr/myapp/apache-jmeter-3.2/Reports
Creating summariser <summary>
Created the tree successfully using baiduBasicTest.jmx
Configuring remote engine:
10.113
.
167.25
:
1099
Connection refused to host:
10.113
.
167.25
; nested exception is:
java.net.ConnectException: Connection refused (Connection refused)
Failed to configure
10.113
.
167.25
:
1099
Configuring remote engine:
10.113
.
185.196
:
1099
Connection refused to host:
10.113
.
185.196
; nested exception is:
java.net.ConnectException: Connection refused (Connection refused)
Failed to configure
10.113
.
185.196
:
1099
Stopping remote engines
Remote engines have been stopped
Error in NonGUIDriver java.lang.RuntimeException: Following remote engines could not be configured:[
10.113
.
167.25
:
1099
,
10.113
.
185.196
:
1099
]
|
驚不驚喜,意不意外。今天來再在linux分布式環境上執行腳本后。居然成功了。上面的問題不發生了。哇咔咔~~~~~~~~~~~~~~~~~~
快樂的記錄一下非GUI模式下執行命令后輸出的報告。
非GUI命令
命令為:jmeter -n -t xxxxxxx.jmx -r -l test_result_namexxxx.jtl -e -o /usr/myapp/....testReport
- -n: 非GUI模式執行Jmeter
- -t:執行測試文件所在的位置及文件名
- -r:遠程將所有agent啟動用在分布式測試場景下,不是分布式測試只是單點就不需要-r
- -l:指定生成測試結果的保存文件,jtl文件格式
- -e:測試結束后,生成測試報告
- -o:指定的文件及文件夾(必須事先不存在)
注意:指定生成的報告文件夾必須不存在,否則會執行失敗。如上述的路徑下testReport必須不存在
需要深入學習的地方
- Bean Shell用法(調用自己寫的或者外部的一些工具類,引用外部的一些java文件,class文件,jar包文件等
https://www.cnblogs.com/puresoul/category/736960.html - lib及lib/ext下的jar插件文件的作用,不同的功能需要用到哪些插件的庫文件。比方說,Add>Threads>jp@gc-PerfMon Metrics Collector
- jmeter html報告內參數的詳細含義
遺留問題
- ant+jmeter ant.bat執行測試用例后,沒有收到郵件通知
-
csv打開亂碼問題(目前是改用.txt方式打開)
-
csvread函數方式傳參時,讀取txt文件參數為亂碼
- windows作為master分布式執行時,linux slave機器上測試結果無法返回
- linux上啟動jmeter agent時報錯 Can't accept TCP connections(CGWEBQA7501)
關於性能測試
Jmeter只是冰山一角,性能測試涉及到很多內容。除了上述說的工具使用之外,還包括性能指標分析,性能監控,性能調優等各方面內容。