【性能測試】性能測試工具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
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...