LoadRunner手寫腳本、檢查點、集合點、事務、思考時間


手寫腳本

什么時候要手寫?

  可以有條件手寫腳本的場景有兩類:

  • 有接口說明文檔
  • 沒有借口說明文檔,要去錄制,錄制不了,抓包手寫

所需函數

  我們這里講的例子是基於 http 協議的,也是常見的兩種請求類型:get+post,主要有以下 3 個函數

  • web_url
  • web_custom_request
  • web_submit_data

   我們用開源的接口去試試這幾個函數:https://www.apiopen.top/api.html

用法

  那么,這三個函數的用法是怎樣的的?什么請求最好用什么函數呢?

1、web_url

  web_url 最好用於 get 請求

 

2、web_custom_request

  可用於 GET和POST,且 json 形式的請求只能寫在這函數內

附:Encording Type

  1. text/html——文本方式的網頁文件,默認是此方式。
  2. text/plain——窗體數據以純文本形式進行編碼,其中不含任何控件或格式字符。空格轉換為 “+” 加號,但不對特殊字符編碼
  3. application/x-www-form-urlencoded——默認地,表單數據會編碼為 “application/x-www-form-urlencoded”。就是說,在發送到服務器之前,所有字符都會進行編碼,空格轉換為 “+” 加號,特殊符號轉換為 ASCII HEX 值。 窗體數據被編碼為:名稱/值對,這是標准的編碼格式。
  4. multipart/form-data——窗體數據被編碼為一條消息,頁上的每個控件對應消息中的一個部分,上傳附件用到。在使用包含文件上傳控件的表單時,必須使用該值。
  5. application/json——數據以json形式進行編碼。
  6. application/xml——數據以xml形式進行編碼,application/xml會根據xml頭指定的編碼格式來編碼。
  7. text/xml——文本方式的xml文件,text/xml忽略xml頭所指定編碼格式而默認采用US-ASCII編碼。

 3、web_submit_data

  可用於 GET和POST,POST 請求的 key - value 只能寫進 body 里面

 

手寫的方式

  • 瀏覽器 f12 大法
  • fiddler 抓包

fiddler 抓包設置一下過濾:

寫一條正則,把 js、css等過濾掉

REGEX:\.(js|css|js|png|gif|ico|gif\?.*|css\?.*|js\?.*|png\?.*)$

 

檢查點

概念

  檢查點的實質是從請求的response里判斷有沒有返回某個字符串,從而判斷請求有沒有成功。壓測要保證請求的成功率,檢查點會影響請求成功率,通常與金錢相關的要求成功率為100%,其他的為99%99.9%99.99%,視具體項目而定。

什么情況加檢查點

 

問題1:腳本中一定要加檢查點嗎?

 

  檢查點影響性能,不必要的檢查點不加。

 

問題2:如何確定是否要加檢查點?

 

● 數據庫的 addupdatedelete 操作不用檢查點(跑完數據庫查);

 

● 數據庫的查詢操作一定要有檢查點;

 

問題3:檢查點的位置要放在哪?

  當然是要檢查的請求的前面,函數是哪一個呢:web_reg_find

 

用法:

Search for specific Text 中填入要查找的內容

Search in :可以選擇要查找的內容:ALL表全部,Body 為響應的消息體,Header就是響應頭了

Save Count :表示匹配出來的字段出現的次數

Fail if :表示沒找到或者找到了就報錯

 

補充:還有個函數是 web_find

  1. 這兩個函數函數類型不同,WEB_FIND是普通函數,WEB_REG_FIND是注冊函數
  2. WEB_FIND使用時必須開啟內容檢查選項,而WEB_REG_FIND則不沒有此限制
  3. WEB_FIND只能只用在基於HTML模式錄制的腳本中,而WEB_REG_FIND沒有此限制
  4. WEB_FIND是在返回的頁面中進行內容查找,WEB_REG_FIND是在緩存中進行查找
  5. WEB_FIND在執行效率上不如WEB_REG_FIND
說白了,用 web_reg_find 的優先級要遠遠高於 web_find ,所以 web_find 已經屬於向后兼容的功能,不在推薦使用了。
 

事物

概念

loadrunner里響應時間指的是事物的響應時間、TPS指的是每秒通過的事物數,因此事物是loadrunner跑腳本的基礎。事物是用來計時用的,把一個或多個請求圈起來放在一起,統計這一個或多個請求的時間。

定義事物時保證事物的准確性(干凈)

● 一個事物里就放一個被測請求,這樣事物響應時間就是請求響應時間;

● 除了被測試請求外,事物中不放任何其他東西,檢查點、集合點全放在事物外面;

● 錄制時用純的URL,這樣一個URL就是一個請求;

● 修改錄制腳本中Mode=“HTTP”;

 

單場景壓測與混合場景壓測

● 單場景測試:先測單個接口是否滿足要求,不用考慮其他依賴

● 多場景測試:對多個接口共同進行壓測

問題1:對於用戶來說,用戶要注冊必須得先進入首頁,要壓測注冊請求是不是要模擬用戶的實際操作來壓接口?

要壓注冊不用腳本中不用加首頁,單場景壓測腳本的干凈性會影響響應時間和TPS,如同樣是壓注冊,小A的腳本里有首頁和注冊兩個請求,小B的腳本里只有注冊。同樣運行5分鍾小A的注冊TPS肯定會小於小B的注冊TPS。

問題2:單個場景壓測,用戶操作注冊動作,除了注冊單個API,還有js、css等請求也會對服務器有壓力,怎么處理?

Js、圖片、css樣式都不用管,一方面有專門的前端性能測試會去測試,另一方面現在都是采用緩存技術,訪問一次這些圖片等靜態資源資源全部緩存下來了,后面發的都是純的接口請求。

添加事物

LoadRunner 一定要添加事務,壓測過程是以事務為單位來計算的,除非設置每個請求作為事務,否則 pass 的事務為 0

● 可錄制時加事物也可錄制完成后再添加事物,錄制時添加事物,容易有冗余,不干凈;

● 錄制完后加事物,可ctrl+T,也可點擊下圖圖標

● 錄制時加事物,點擊如下圖標

 

集合點

概念

  當通過controller虛擬多個用戶執行該腳本時,用戶的啟動或運行步驟不一定都是同步的。集合點是在腳本的某處設置一個標記,當有虛擬用戶運行到這個標記處時,停下等待,直到所有的用戶都達到這個標記處時,再一同進行下面的步驟。這樣能夠用最大的用戶並發去做下面的操作,就像集合再前進一樣。集合點是為加大瞬時並發的概率,通常搶購、秒殺會用到。

插入集合點

 

 思考時間

概念

控制單位時間段內向服務器發起請求的數量,以達到控制服務器壓力的目的,從而影響測試的響應時間以及tps

Run-time setting中開啟think time

思考時間如何影響響應時間

例1:已知注冊TPS=1,RT=1s,分別以1個vu和兩個vu跑,RT分別為多少?

1個並發時,RT=1

2個並發:

vu1_1 RT=1s----vu2_1 RT=2s(1s等待+1s處理)

vu1_2 RT=2s(1s等待+1s處理)----vu2_2 RT=2s(1s等待+1s處理)

vu1_3 RT=2s(1s等待+1s處理)----vu2_3 RT=2s(1s等待+1s處理)

......

可以看出當時間足夠長時,2個並發RT=2

例2:已知注冊TPS=1,RT=1s,腳本中注冊前加思考時間1s,分別以1個vu和兩個vu跑,RT分別為多少?

1個並發時,RT=1

2個並發:

vu1_1 RT=1s----vu2_1 RT=1(思考時間1s,剛好把等待時間耗完)

vu1_2 RT=1s(思考時間1s)----vu2_2 RT=1s(思考時間1s)

vu1_3 RT=1s(思考時間1s)----vu2_3 RT=1s(思考時間1s)

......

可以看出當時間足夠長時,2個並發RT=1s

思考時間如何影響TPS

假如TPS很大,單位時間內發的請求越多,TPS就越大。那么加思考時間會讓單位時間內發送的請求數變少,從而使TPS減少。

例:服務器tps=100,每次處理時間為0.1s

1個vu,1s能發10個請求,則tps=10

1個vu,思考時間1s,處理1s,則tps=1

TPS 簡單說明

* 1s是按過去的上一秒算的,過去1s內處理的事物數,

* tps忽略思考時間,只算處理時間

添加思考時間

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM