【性能測試】性能測試工具LoadRunner,參數化關聯。全md文檔筆記(已分享文檔代碼)

来源:https://www.cnblogs.com/yinuo112/p/18024922
-Advertisement-
Play Games

最近看幾個老項目的SQL條件中使用了1=1,想想自己也曾經這樣寫過,略有感觸,特別拿出來說道說道。編寫SQL語句就像炒菜,每一種調料的使用都會影響菜品的最終味道,每一個SQL條件的加入也會影響查詢的執行效率。那麼 1=1 存在什麼樣的問題呢?為什麼又會使用呢? ...


本系列文章md筆記(已分享)主要討論性能測試相關知識。入門階段:認識性能測試分類-(負載測試、壓力測試、併發測試、穩定性測試),常用性能測試指標-(吞吐量、併發數、響應時間、點擊數...),性能測試工具選擇。性能腳本:1. LoadRunner介紹,2. 腳本錄製、運行、參數化,3. 關聯、檢查點、事務、集合點。性能場景:1. 場景分類、場景設計、場景運行策略,2. 資源監控、SLA、IP Wizard應用。性能分析:1. 摘要報告、事務圖表、圖表合併,2. 交叉結果、拐點分析、Web項目資源分析。

全套筆記和代碼自取移步gitee倉庫: gitee倉庫獲取完整文檔和代碼

感興趣的小伙伴可以自取哦,歡迎大家點贊轉發~


共 5 章,25 子模塊

性能測試工具-LoadRunner

學習目標

1. 理解基於VuGen的腳本錄製
2. 掌握參數化的使用方法
3. 掌握關聯的使用方法
4. 掌握檢查點的使用方法
5. 掌握事務的使用方法
6. 掌握集合點的應用

VuGen-參數化

目標

  1. 理解參數化的使用場景

  2. 掌握參數化的使用方式

一、什麼是參數化

根據需求動態的獲取數據的過程

二、為什麼要參數化?

  1. 減少重覆代碼

  2. 數據代碼進行分離,方便維護

需求1

說明:由於虛擬機運行速度原因,我們使用 lr_output_message() 函數,來學習如何使用參數化
要求:輸出 我要去北京;我要去上海;我要去廣州;我要去深圳;

三、參數化操作

3.1 打開參數化菜單

參數化

選中要參數化的文本 -> 滑鼠右鍵 -> Replace with a Parameter
或者
菜單 Insert -> New Parameter...
3.2 Replace with a Parameter 打開的視窗

參數化

1. Parameter name:參數化引用名稱(參數化時使用)
2. Parameter type:File 【推薦】
3. Properties:屬性-點擊此按鈕,可直接設置參數化引用名稱對應的值;【點擊】

提示:
    1). 點擊OK;參數化引用名稱具體的值,需要再次設置;
3.3 Properties 設置面板

參數化

1. Parameter type: 參數類型 File 【重點】
2. File:參數保存的文件類型及位置,一般為txt;【推薦】
3. Add Row:添加行,在當前表格編輯數據;【可選】
4. Edit with Notepad:在記事本內編輯數據;【推薦】
5. Select next row:運行或迭代時對行的選擇方式 
6. Update value on:運行或迭代時對值的選取方式

提示:
    1). 其中5.Select next row 與 6.Update value on為組合關係,不同組合效果不同,我們單獨來學習
需求1 解決方案
  1. 創建指定路徑及txt文本格式 如:C:\lr11\scripts\city.txt
  2. 使用 Edit with Notepad 編輯數據:北京、上海、廣州、深圳
  3. 編寫腳本
  4. 迭代次數 4

問題

lr_output_message(“str”):函數為把str字元串輸出到日誌,但它自身並不能解析讀取參數;
函數(設置參數、讀取參數)
  1. lr_save_string()
  2. lr_eval_string()
1. lr_save_string()

把字元串保存到指定的參數中

格式:lr_save_string("字元串","參數名")

示例:lr_save_string("北京","city");

2. lr_eval_string()

讀取變數的值,並以Char類型返回;

格式:lr_eval_string("{參數名}");

示例:lr_eval_string("{city}");

提示:
    1). 參數名稱使用花括弧{}包括
    2). 參數使用雙引號包括
需求1 代碼示例
Action()
{
    lr_output_message("我要去%s",lr_eval_string("{NewParam}"));
    return 0;
}
3.4 Select next row 與 Update value on
Select next row

讀取參數文件行的方式

方式:

1. Sequential:順序,按照行的順序讀取數據,如果迭代次數大於行數,再次從第一行開始讀取
2. Random:隨機,隨機讀取行
3. Unique:唯一,每次讀取唯一行,不重覆;
4. Same line as xxx  取參數同行(需要兩個以上參數,才能顯示和使用)

註意:

使用 Unique 選項時會激活 When out of values:
1) Abort Vuser:中止虛擬用戶
2) Continue in a cyclic manner:以迴圈的方式繼續
3) Continue with last value:繼續使用最後一個值
Update value on

參數值更新的方式

方式:

1. Each iteration:每次迭代以後更新
2. Each occurrence:每次出現參數時更新
3. Once:每出現一個虛擬用戶(線程)更新一次
組合
  1. 行順序 + 每次迭代更新值 Sequential + Each iteration
  2. 行順序 + 每次參數出現更新值 Sequential + Each occurrence
  3. 行順序 + 更新一次(單用戶) Sequential + Once

說明:

1. 組合我們在這裡就不窮舉了,以行的順序配合值的3種更新方式做演示
    2. 因為組合內含occurrence,所以必須要兩個Action,我們新增兩個(Action1、Action2)兩個代碼相同
代碼
Action1()
{
    lr_output_message("我要去%s",lr_eval_string("{NewParam}"));
    return 0;
}

Action2()
{
    lr_output_message("我要去%s",lr_eval_string("{NewParam}"));
    return 0;
}
Sequential + Each iteration

行為順序,值為迭代更新一次;

預期:

1. 第一次迭代:Action1:北京;Action2:北京
2. 第二次迭代:Action1:上海;Action2:上海
3. 第三次迭代:Action1:廣州;Action2:廣州
4. 第四次迭代:Action1:深圳;Action2:深圳
Sequential + Each occurrence

行為順序,值為出現一次更新一次

預期:

1. 第一次迭代:Action1:北京;Action2:上海
2. 第二次迭代:Action1:廣州;Action2:深圳
3. 第三次迭代:Action1:北京;Action2:上海
4. 第四次迭代:Action1:廣州;Action2:深圳
Sequential + Once

行為順序,值為單用戶只更新一次

預期:

1. 第一次迭代:Action1:北京;Action2:北京
2. 第二次迭代:Action1:北京;Action2:北京
3. 第三次迭代:Action1:北京;Action2:北京
4. 第四次迭代:Action1:北京;Action2:北京

批量獲取參數時,如果保證參數不重覆?(擴展)

思路:添加時間戳
說明:web_save_timestamp_param("time_stamp",LAST) 為時間戳函數,返回:1970到現在的毫秒數;
(time_stamp:參數為獲取值後保存的參數名稱,被引用時使用)

示例:

Action()
{
    web_save_timestamp_param("time_stamp",LAST);
    lr_output_message("我要去%s",lr_eval_string("{NewParam}_{time_stamp}"));
    return 0;
}

其他常用參數類型(瞭解)

parameter type:
    1. Date/Time
    2. Random Number

VuGen-關聯

目標

  1. 理解關聯的概念

  2. 掌握關聯函數的使用

  3. 瞭解LR自動關聯的使用

一、為什麼要學習關聯?

關聯

1. 獲取動態載入的數據,例如:Session ID(會話ID)
2. 測試的時候需要獲取頁面上指定的數據,註意是獲取,而不是查找

說明:
    Session ID:客戶端與伺服器交互時,伺服器生成的一個唯一標識碼;
    (通過標識碼伺服器可以區分多次交互對象是否同一客戶端,瀏覽器只要不關閉標識碼就不變)

二、什麼是關聯(correlation)?

動態獲取指定的數據,並把獲取的數據通過參數化的方式在另一處引用

三、LoadRunner 常用的關聯方式

  1. 手動關聯【推薦】

  2. 自動關聯【瞭解】

3.1 手動關聯【重點】

手動關聯就是直接調用關聯函數;

關聯函數 web_reg_save_param()
1). 執行順序:LR中函數內含reg為註冊函數,註冊函數是在下一個Action Function完成時執行。
2). 函數位置:註冊函數【必須】放到下一個Action Function(要進行關聯數據所在的函數)函數之前;
3). 如果關聯的參數值超過256個字元,需要先調用 web_set_max_html_param_len("1024") 改變參數長度;

案例 1

關聯

使用 web_reg_save_param() 函數把紅框選中內容關聯給Welcome參數

案例 1 腳本

Action()
{
    web_url("WebTours",
        "URL=http://127.0.0.1:1080/WebTours/",
        "TargetFrame=",
        "Resource=0",
        "RecContentType=text/html",
        "Referer=",
        "Snapshot=t1.inf",
        "Mode=HTML",
        LAST);
    return 0;
}

案例1 操作分析

1. 在web_url函數之前插入關聯函數 web_reg_save_param()
2. 調用 lr_eval_string() 來讀取關聯函數的參數引用名稱,並通過 lr_output_message() 函數輸出到日誌

案例1 操作實施

1) 插入 web_reg_save_param()方法

關聯

1. 在web_url函數之前空白行,點擊滑鼠右鍵
2. 選擇Insert菜單 -> New Step
2) 輸入要查找的函數:

關聯

1). 圖1:輸入要查找函數的關鍵詞或全稱
2). 圖2:找到匹配出的函數,雙擊或點擊圖3
3). 圖3:選中圖2,點擊圖3進行選中函數參數設置
3) 設置函數參數

關聯

參數:

1). Parameter Name:參數名稱(被引用時使用)
2). Left Boundary(LB):左邊界
3). Right Boundary(RB):右邊界
4). Not Found:關聯失敗時,處理方式
5). Search in:匹配搜索響應代碼範圍

註意:

單引號(')、雙引號(")、反斜杠(\)、回車換行等需要轉義字元,加上轉義字元[\]
4) 如何查看頁面元素響應代碼?
  1. 通過LR查看響應代碼

  2. 通過頁面查看源代碼
1). 通過LR查看 【註意:必須是錄製腳本-手動編寫腳本沒有快照】

關聯

提示:

1. 結構為Tree
2. url:為WebTours
3. 頁面為/WebTours/home.html
2). 通過頁面源代碼查看 關聯

地址:http://127.0.0.1:1080/WebTours/home.html 參數化並輸出到日誌

關聯

代碼:

Action()
{
    web_reg_save_param("Webcome",
        "LB=</H1>\n",
        "RB=\n"
        "<br>",
        "NotFound=ERROR",
        "Search=All",
        LAST);

    web_url("WebTours",
        "URL=http://127.0.0.1:1080/WebTours/",
        "TargetFrame=",
        "Resource=0",
        "RecContentType=text/html",
        "Referer=",
        "Snapshot=t1.inf",
        "Mode=HTML",
        LAST);

    lr_output_message("Webcome值為:%s",lr_eval_string("{Webcome}"));

    return 0;
}
3.2 自動關聯 【瞭解】
1. 自動關聯LoadRunner提供兩種方式:
    1). 錄製時關聯-在錄製腳本的時候如果有符合關聯規則的就自動進行關聯;
    註意:此種方式依賴於LR自帶的規則或新建的自定義規則
    2). 錄製後關聯-腳本錄製完成並且運行完一次後,打開掃描工具,進掃描需要關聯的數據進行關聯;
    註意:
        ① 利用掃描工具必須要先運行一遍腳本
        ② 掃描關聯:很多時候LR掃描不到需要關聯的信息(比如手寫的腳本),所以一般不推薦使用;
2. 自動關聯調用的是關聯函數 web_reg_save_param_ex();
(web_reg_save_param_ex與web_reg_save_param功能大致相同,它也可以使用正則表達式和過濾器)
1) 自動關聯-啟用自動關聯設置

關聯

啟動自動關聯位置:工具菜單(Tool) -> Recording Option

2) 自動關聯-掃描工具

關聯

  1. 啟動:打開掃描工具-Ctrl+F8 或者菜單欄(Vuser) -> Scan Script for Correlations

  2. 掃描:掃描之前先運行一遍腳本

  3. 關聯:圖中個第二步Correlation Results內進行關聯;

自動關聯總結

1. 自動關聯-錄製時關聯:採用自帶或設定的規則在錄製腳本的時候自動關聯
2. 自動關聯-錄製後關聯:前後運行兩次,搜索兩次不同之處為需要關聯的數據,進行確認關聯
3. 自動關聯無論哪種方式,都是採用調用關聯函數的方法,所以工具智能人更智能,因此推薦優先使用手動關聯

未完待續, 同學們請等待下一期

全套筆記和代碼自取移步gitee倉庫: gitee倉庫獲取完整文檔和代碼

感興趣的小伙伴可以自取哦,歡迎大家點贊轉發~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 序言 在數字時代,圖像生成技術正日益成為人工智慧領域的熱點。 本討論將重點聚焦於兩個備受矚目的模型:DALL-E和其他主流AI繪圖方法。 我們將探討它們的優勢、局限性以及未來的發展方向。通過比較分析,我們期望能夠更全面地瞭解這些技術,為未來的研究和應用提供啟示。 Q: 介紹一下 dall-e Ope ...
  • 簡介 git-commit-id-maven-plugin 是一個maven 插件,用來在打包的時候將git-commit 信息打進jar中。 這樣做的好處是可以將發佈的某版本和對應的代碼關聯起來,方便查閱和線上項目的維護。至於它的作用,用官方說法,這個功能對於大型分散式項目來說是無價的。 功能 你 ...
  • 1、下載安裝包首先、進入官網下載安裝包網址:https://www.python.org/downloads/windows/下載步驟:進入下載地址,根據自己的電腦系統選擇相應的python版本 選擇適配64位操作系統的版本(查看自己的電腦操作系統版本), 點擊下載安裝包 也可以下載我百度雲分享的安 ...
  • 在上篇文章中,我們介紹到在多線程環境下,如果編程不當,可能會出現程式運行結果混亂的問題。出現這個原因主要是,JMM 中主記憶體和線程工作記憶體的數據不一致,以及多個線程執行時無序,共同導致的結果。 ...
  • 本文分享自華為雲社區《Go併發範式 流水線和優雅退出 Pipeline 與 Cancellation》,作者:張儉。 介紹 Go 的併發原語可以輕鬆構建流數據管道,從而高效利用 I/O 和多個 CPU。 本文展示了此類pipelines的示例,強調了操作失敗時出現的細微之處,並介紹了乾凈地處理失敗的 ...
  • 自己製作的一個基於Entity Framework Core 的資料庫操作攔截器,可以列印資料庫執行sql,方便開發調試,代碼如下: /// <summary> /// EF Core 的資料庫操作攔截器,用於在資料庫操作過程中進行日誌記錄和監視。 /// </summary> /// <remar ...
  • 一:背景 1. 講故事 過年喝了不少酒,腦子不靈光了,停了將近一個月沒寫博客,今天就當新年開工寫一篇吧。 去年年初有位朋友找到我,說他們的系統會偶發性崩潰,在網上也發了不少帖子求助,沒找到自己滿意的答案,讓我看看有沒有什麼線索,看樣子這是一個牛皮蘚的問題,既然對方有了dump,那就分析起來吧。 二: ...
  • 好久不見,我又回來了。 給大家分享一個我最近使用c#代碼操作ftp伺服器的代碼示例: 1 public abstract class FtpOperation 2 { 3 /// <summary> 4 /// FTP伺服器地址 5 /// </summary> 6 private string f ...
一周排行
    -Advertisement-
    Play Games
  • 隨著Aspire發佈preview5的發佈,Microsoft.Extensions.ServiceDiscovery隨之更新, 服務註冊發現這個屬於老掉牙的話題解決什麼問題就不贅述了,這裡主要講講Microsoft.Extensions.ServiceDiscovery(preview5)以及如何 ...
  • 概述:通過使用`SemaphoreSlim`,可以簡單而有效地限制非同步HTTP請求的併發量,確保在任何給定時間內不超過20個網頁同時下載。`ParallelOptions`不適用於非同步操作,但可考慮使用`Parallel.ForEach`,儘管在非同步場景中謹慎使用。 對於併發非同步 I/O 操作的數量 ...
  • 1.Linux上安裝Docken 伺服器系統版本以及內核版本:cat /etc/redhat-release 查看伺服器內核版本:uname -r 安裝依賴包:yum install -y yum-utils device-mapper-persistent-data lvm2 設置阿裡雲鏡像源:y ...
  • 概述:WPF界面綁定和渲染大量數據可能導致性能問題。通過啟用UI虛擬化、非同步載入和數據分頁,可以有效提高界面響應性能。以下是簡單示例演示這些優化方法。 在WPF中,當你嘗試綁定和渲染大量的數據項時,性能問題可能出現。以下是一些可能導致性能慢的原因以及優化方法: UI 虛擬化: WPF提供了虛擬化技術 ...
  • 引言 上一章節介紹了 TDD 的三大法則,今天我們講一下在單元測試中模擬對象的使用。 Fake Fake - Fake 是一個通用術語,可用於描述 stub或 mock 對象。 它是 stub 還是 mock 取決於使用它的上下文。 也就是說,Fake 可以是 stub 或 mock Mock - ...
  • 為.net6在CentOS7上面做準備,先在vmware虛擬機安裝CentOS 7.9 新建CentOS764位的系統 因為CentOS8不更新了,所以安裝7;簡單就一筆帶過了 選擇下載好的操作系統的iso文件,下載地址https://mirrors.aliyun.com/centos/7.9.20 ...
  • 經過前面幾篇的學習,我們瞭解到指令的大概分類,如:參數載入指令,該載入指令以 Ld 開頭,將參數載入到棧中,以便於後續執行操作命令。參數存儲指令,其指令以 St 開頭,將棧中的數據,存儲到指定的變數中,以方便後續使用。創建實例指令,其指令以 New 開頭,用於在運行時動態生成並初始化對象。方法調用指... ...
  • LiteDB 是一個輕量級的嵌入式 NoSQL 資料庫,其設計理念與 MongoDB 類似,但它是完全使用 C# 開發的,因此與 C# 應用程式的集成非常順暢。與 SQLite 相比,LiteDB 提供了 NoSQL(即鍵值對)的數據存儲方式,並且是一個開源且免費的項目。它適用於桌面、移動以及 We ...
  • 1 開源解析和拆分文檔 第三方的工具去對文件解析拆分,去將我們的文件內容給提取出來,並將我們的文檔內容去拆分成一個小的chunk。常見的PDF word mark down, JSON、HTML。都可以有很好的一些模塊去把這些文件去進行一個東西去提取。 優勢 支持豐富的文檔類型 每種文檔多樣化選擇 ...
  • OOM是什麼?英文全稱為 OutOfMemoryError(記憶體溢出錯誤)。當程式發生OOM時,如何去定位導致異常的代碼還是挺麻煩的。 要檢查OOM發生的原因,首先需要瞭解各種OOM情況下會報的異常信息。這樣能縮小排查範圍,再結合異常堆棧、heapDump文件、JVM分析工具和業務代碼來判斷具體是哪 ...