【性能測試】性能測試工具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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...