1.介面測試基礎
API:Application Programming Interface,即呼叫應用程式的通道。
介面測試遵循點
介面的功能性實現:檢查介面返回的資料與預期結果的一致性。
測試介面的容錯性:例如傳遞的資料型別是錯誤的能否處理。
測試介面引數的邊界值:例如傳遞的資料足夠大或者為負數時能否處理。
測試介面效能:響應時間牽扯到程式碼實現的優化。
測試介面的安全性:特別是第三方介面、登入的用密碼是否密文傳輸。
介面測試工具:loadrunner、jmeter、postman、soapui、RestClient。
RF和Jmeter對比
語言:RF是 python 寫的,Jmeter 是 java + JavaScript(寫 beanshell 要用到)。
程式語言能力:RF 有一些(寫些RF的關鍵字),Jmeter 基本可以沒有。
靈活度:在不做二次開發(即改動到庫函式或者框架原始碼)前提下,RF 比 Jmeter 高一些。
泛用性:RF 除了做介面,還可以做UI 自動化。Jmeter 除了做介面,還可以做後端效能。
生態圈:個人感覺 RF 相對活躍一些。
環境:jmeter、java8、第三方驅動/包、介面專案
2.Jmeter核心知識
引數化的實現方式
CSV 資料檔案:適用於引數取值範圍較大的資料檔案。
使用者引數:適用於引數取值範圍很小的時候使用。
使用者定義的變數:一般用於不需要隨請求迭代的引數設定,如:Host、Port Number。
函式:見下面函式篇。
運算元據庫
安裝驅動包mysql-jdbc、sqlite-jdbc、ojdbc;資料庫連線池配置;新增JDBC請求;新增Degbug Sampler。
關聯方式
正規表示式:"dep_ name":"(.*?)”, ()擷取區間,.表示任意字元,*表示出現任意次,?表示擷取到第一 個結束標記。模板:$$格式;$1$表示解析到的第1個值;如果匹配有2個值,第二個值$2$,以此例推匹配數字:1代表全部取值,0代表隨機取值,通常情況下填1
xpath提取器:當需要處理的頁面是HTML格式時,必須勾選Use Tidy;用法同web自動化裡的xpath。
jsonpath提取器:當響應資料為json時,用於提取json串裡面的關鍵資料。$..data.user[0].id
同步定時器
作用:阻塞執行緒,直到指定的執行緒數量到達後,再一起釋放,模擬併發。
測併發
可以用執行緒數,Ramp-Up Period設為0,立馬傳送請求,是併發,這樣很耗機器效能。非0表示在該秒內傳送這麼多請求,不是真正併發。
加個定時器:集結了指定數量的請求後,大家再一起衝!這樣給伺服器的壓力是最大的。
參1為0,等同於設定為執行緒組中的執行緒數,非0代表達到設定的使用者(執行緒)後,併發執行後續操作。
參2為0,Timer將等待執行緒數直到達到了參1設定的數值後才執行,不夠則一直等待。非0表示無論有沒有達到參1的數值,只要超過這個時間都會執行。
函式
格式:${__functionName(var1,var2,var3)}
常用函式:CSVRead、counter、Random、time、setProperty、property。
jmeter中函式助手time:yyyy-MM-dd HH:mm:ss:SSSS
可作為其他引數化方式的補充項,如:隨機數生成的函式:${Random(,,)};生成時間戳:13015${time(/1000,)}${__Random(00,99)}
3.Jmeter分散式
場景
為了測試伺服器處理批量請求能力。目前jmeter最多支援300左右的模擬請求執行緒(與電腦效能有關),再大的話就卡頓、無響應等情況,這是限於jmeter其本身的機制和硬體配置。分散式壓測,即將大量的模擬併發分配給多臺壓力機,來滿足這種大流量的併發請求場景。
Jmeter.properties配置
控制機:remote_hosts=127.0.0.1:1099,127.0.0.1:1100。 注意是英文逗號。
執行機:第一臺server_Port=1099,第二臺可設為1100。注意:那是自定義的埠號,要選擇未被佔用的埠號。也可以不用管,預設是1099,多臺執行機的ip又不一樣。
啟動/設定/注意點
執行機啟動分散式:windows執行bin目錄下jmeter-server.bat,linux或mac執行jmeter-server,執行後勿關視窗。若是執行時修改的記得重啟。
控制機:設定執行緒數,如500,然後點選遠端全部啟動。
保持高度一致:csv檔案路徑要一致;jmeter版本和外掛要一致,執行機上Jmeter也許需要配置JDK環境變數;
4.Jmeter邏輯控制器
If控制器:條件成真,則執行控制器下所有取樣器。"${name}"=="百度"。
ForEach控制器:一般和使用者定義的變數一起使用,在其中讀取一系列變數。輸入要遍歷變數字首(user);遍歷變數開始的索引,從0開始(0);遍歷變數結束的索引,不包括結束索引(4);定義要被引用的變數名稱(foruser)。
交替控制器:交替控制,該控制器包含的所有取樣器,步驟交錯執行在每個迴圈中。子節點裡放不同的請求即可。
迴圈控制器:執行迴圈控制器內取樣器指定的次數。設定迴圈次數,子節點裡放請求即可。
僅一次控制器:該控制器下取樣器只執行1次。子節點裡放請求即可。
隨機控制器:隨機執行其下的所某個請求。子節點裡放不同的請求即可。
隨機順序控制器:子節點全部執行,但順序是隨機的。
While 控制器:迴圈執行控制器內所有采樣器,直到條件為假時,停止迴圈。如${VAR}:當引數VAR的值被設定成false時退出迴圈;${__javascript(“${VAR}”==”User1”)}:當引數VAR的值不為User1時退出迴圈。
Switch Controller控制器:通過給該控制器中的switch value賦值不同的取樣器名字,來指定執行哪個請求。子節點裡放不同的請求即可。
簡單控制器:當資料夾用,子節點裡放不同的請求即可。
事務控制器:會在聚合報告中生成一個事務控制器欄位來測量其下測試元素的總體時間。子節點裡放不同的請求即可。
5.Jmeter 圖形監視器
目的:檢視伺服器(CPU、記憶體、網路、磁碟)的使用資訊。
伺服器:下載伺服器端監聽服務程式(ServerAgent-2.2.1)https://jmeter-plugins.org/wiki/PerfMonAgent/
客戶端:下載標準擴充套件外掛(JMeterPlugins-Standard-1.4.0.zip)https://jmeter-plugins.org/downloads/old/
啟動伺服器監聽器程式(ServerAgent-2.2.1.zip)
客戶端載入監聽伺服器元件圖表(jp@gc - PerfMon Metrics Collector)
配置:下載標準外掛後解壓,複製JMeterPlugins-Standard.jar檔案,貼上到Jmeter的Lib目錄下面的ext目錄,重啟Jmeter。
啟動:Windows下啟動startAgent.bat;Linux下啟動startAgent.sh。然後在對應的執行緒組下新增該元件(jp@gc - PerfMon Metrics Collector),即可看到伺服器(CPU、記憶體、網路、磁碟)的使用資訊。
6.jmeter報告
無日誌檔案生成
例1:jmeter -n -t -l -e -o
例2:jmeter -n -t /Users/edz/apache-jmeter-5.3/bin/JmeterProjects/API-autotest.jmx -JthreadNum=100 -Jcycles=10 -l /Users/edz/apache-jmeter-5.3/bin/reports/result.jtl -e -o /Users/edz/apache-jmeter-5.3/bin/reports
使用已有的jtl日誌檔案或csv日誌檔案生成:jmeter -g -o
7.其他功能點
Jmeter FTP伺服器測試
File Transfer Protocol檔案傳輸協議,可以根據FTP伺服器進行上傳和下載檔案(上傳、下載需要許可權)。
FTP請求:Remote file:上傳到FTP伺服器新的檔名+字尾;local file:為本地存放到本機上的路徑+檔名+字尾;get(RETR):為下載檔案;使用者名稱:ftp伺服器使用者名稱;密碼:ftp伺服器的密碼。
Jmeter Test Fragment(測試片段)
測試片段元素是控制器上的一個種特殊的執行緒組,它在測試樹上與執行緒組處於一個層級。
備註:它與執行緒組有所不同,因為它不被執行,除非它是一個模組控制器或者是被控制器所引用時才會被執行。
作用:把單獨功能指令碼封裝起來,待需要使用的時候,直接引用;類似於python中的函式或模組。
模組控制使用圖裡:測試片段被引用執行兩種方式; 模組控制器可以引用執行測試片段;Include Controller控制器也可以引用和執行片段。
Jmeter 工作臺-非測試元件
HTTP 映象伺服器:可以在本地臨時搭建一個HTTP伺服器,該伺服器把接收到的請求原樣返回;這樣就可以看到傳送出的請求的具體內容,以供除錯;在http請求裡,可設定它的ip和埠號。
HTTP代理伺服器:HTTP代理伺服器是監聽瀏覽器代理,記錄基於代理瀏覽器所有的請求,並以Jmeter可執行的指令碼格式儲存。
屬性顯示:以GUI圖形介面顯示Jmeter配置檔案jmeter.properties
8.後記
中文亂碼?
在jmeter.properties將default的值ISO-8859-1修改成utf-8;若還亂碼,外觀選擇mental。
壓力測試各種指標?
見效能測試篇。