性能測試(上)

注:二八定律:80%員工在20%時間登錄;80%員工在使用20%的功能

一、什么是性能測試

概念:性能測試是模擬多種正常、峰值以及異常負(fù)載條件來對系統(tǒng)的各項性能指標(biāo)進(jìn)行測試。

說明:

? ? 1). 峰值:客戶指定指標(biāo)數(shù)值或場景需求數(shù)值,如:CPU80%以內(nèi)、登錄3秒、內(nèi)存空間40%...

? ? 2). 負(fù)載:用戶(一個、多個)向服務(wù)器發(fā)送請求...

功能測試:驗證軟件系統(tǒng)操作功能是否符合產(chǎn)品功能需求規(guī)格,主要焦點在功能(正向、逆向);

性能測試:驗證軟件系統(tǒng)是否滿足業(yè)務(wù)需求場景,主要焦點是業(yè)務(wù)場景的滿足(時間、空間);

說明:

? ? 時間(對于應(yīng)用服務(wù)器而言):軟件的響應(yīng)時間...

? ? 空間(對于硬件服務(wù)器而言):服務(wù)器的磁盤使用率、CPU使用率、內(nèi)存空閑率...

二、性能測試常用分類

提示:性能測試分類還有其他類型比如:配置測試、容量測試等

1. 負(fù)載測試? ? ?

????概念:通過逐步增加系統(tǒng)負(fù)載,測試系統(tǒng)性能的變化,并最終確定在滿足系統(tǒng)的性能指標(biāo)情況下,系統(tǒng)所能夠承受的最大負(fù)載量的測試。 (負(fù)載:向服務(wù)器發(fā)送請求)

????提示:負(fù)載測試是通過逐步加壓的方式來確定系統(tǒng)的處理能力、確定系統(tǒng)能夠承受的各項閥值。例如:逐步加壓,從而得到“響應(yīng)時間不超過3秒”、“服務(wù)器平均CPU利用率低于80%”等指標(biāo)的閥值。

2. 壓力測試? ? ? ?

????概念:通過逐步增加系統(tǒng)負(fù)載,測試系統(tǒng)性能的變化,并最終確定在什么負(fù)載條件下系統(tǒng)性能處于【失效】狀態(tài)。

提示:

? ? 1). 壓力測試:是逐步增加負(fù)載,使系統(tǒng)某些資源達(dá)到飽和甚至失效。

? ? ? (如:測試系統(tǒng)最多支持同時處理多少請求,超過此數(shù)數(shù)量系統(tǒng)癱瘓)

? ? 2). 負(fù)載測試:是逐步增加負(fù)載,確定在滿足性能指標(biāo)情況下,系統(tǒng)能承受的最大負(fù)載測試。

? ? ? (如:登錄3秒內(nèi),最多支持多少用戶同時登錄;如超出此數(shù)量,可能需要5秒鐘或更多時間才能登錄成功)

3. 并發(fā)測試? ?

????概念:并發(fā)測試就是【多用戶】同時訪問【同一個應(yīng)用】

????目的:測試應(yīng)用服務(wù)器 指定功能 的同時訪問數(shù)是否達(dá)到預(yù)期結(jié)果

????提示: 并發(fā)測試需要配合集合點來使用

4. 穩(wěn)定性測試

????概念:通過給系統(tǒng)加載一定的業(yè)務(wù)壓力(理解為不斷向系統(tǒng)發(fā)送請求)(如CPU資源在70%~90%的使用率)的情況下,運行一段時間,檢查系統(tǒng)是否穩(wěn)定

????提示:通常穩(wěn)定性測試,我們測試一段時間即可;(分階段測試如:24小時、時間充裕的時候再測3×24小時,時間還是充裕的時候再測7×24小時來模擬長時間運行)? ? ? ?

三、性能測試常用 指標(biāo)

????1. 吞吐量(Throughput)

????????說明:指的是單位時間內(nèi)處理的客戶端請求數(shù)量,直接體現(xiàn)軟件系統(tǒng)的性能承載能力。通常情況下,吞吐量用“請求數(shù)/秒”或者“頁面數(shù)/秒”來衡量。

????????提示:

? ? ????????1). 從業(yè)務(wù)角度來看,吞吐量也可以用“業(yè)務(wù)數(shù)/小時”、“業(yè)務(wù)數(shù)/天”、“訪問人數(shù)/天”、“頁面訪問量/天”來衡量。

? ? ????????2). 從網(wǎng)絡(luò)角度來看,還可以用“字節(jié)數(shù)/小時”、“字節(jié)數(shù)/天”等來衡量網(wǎng)絡(luò)的流量。

????2. 并發(fā)數(shù)(Concurrency)

????????說明:并發(fā):它最簡單的描述就是指多個同時發(fā)生的業(yè)務(wù)操作。(例如,100個用戶同時單擊登錄頁面的“登錄”按鈕操作。)

????????提示:并發(fā)性測試描述的是多個客戶端同時向服務(wù)器發(fā)出請求,考察服務(wù)器端承受能力的一種性能測試方式。

????3. 響應(yīng)時間

????????說明:響應(yīng)時間指用戶從客戶端發(fā)起一個請求開始,到客戶端接收到從服務(wù)器端返回結(jié)果(返回的是一堆代碼,正常說的響應(yīng)時間不含瀏覽器解析接收到的代碼的時間,但對客戶而言是要包含瀏覽器解析時間的)整個過程所耗費的時間

響應(yīng)時間

????4. 點擊數(shù)(只有web項目才有點擊數(shù))

????????說明:點擊數(shù)是衡量Web服務(wù)器處理能力的一個重要指標(biāo)。它的統(tǒng)計是客戶端向Web服務(wù)器發(fā)了多少次HTTP請求計算的。

????????提示:

? ? ????????1). 點擊數(shù)不是通常一般人認(rèn)為的訪問一個頁面就是1次點擊數(shù),點擊數(shù)是該頁面包含的元素(如:圖片、鏈接、框架等)向Web服務(wù)器發(fā)出的請求數(shù)數(shù)量,由服務(wù)器的響應(yīng)狀態(tài)碼(200)來統(tǒng)計。

? ? ????????2). 通常我們也用每秒點擊次數(shù)(Hits per Second)指標(biāo)來衡量Web服務(wù)器的處理能力。

????5. 資源利用率(指的是硬件資源)

????????說明:是指系統(tǒng)各種資源的使用情況,一般用“資源的使用量/總的資源可用量×100%”形成資源利用率的數(shù)據(jù)。

????????通常,沒有特殊需求的話

? ????????1). 建議CPU不高于80%;

? ????????2). 內(nèi)存不高于80±5%;可使用內(nèi)存至少20%

? ????????3). 磁盤不高于90%;

????6. 錯誤率

????????說明:錯誤率指系統(tǒng)在負(fù)載情況下,失敗交易的概率。錯誤率=(失敗交易數(shù)/交易總數(shù))*100%。

????????提示:

? ? ????????1). 不同系統(tǒng)對錯誤率要求不同,但一般不超過千分之五=0.5%;

? ? ????????2). 穩(wěn)定性較好的系統(tǒng),其錯誤率應(yīng)該由超時引起,即為超時率。

四、Jmeter and LoadRunenr

????提示:

????1. Jmeter: 接口測試及接口性能壓測首選

????????????說明:Apche公司使用Java平臺開發(fā)的一款測試工具

????????????作用:性能測試、接口測試、Web測試(無Gui)

????????????優(yōu)點:免費、開源、小巧

????2. LoadRunner: Web性能測試首選

????????????說明:HP公司使用C語言開發(fā)的一款性能負(fù)載測試工具

????????????作用:模擬高并發(fā)負(fù)載測試、測試場景搭建、運行、監(jiān)控 、結(jié)果分析

????????????優(yōu)點:支持多協(xié)議、自帶強(qiáng)大的圖表功能、可根據(jù)需求合并需要的圖表

????????????缺點:收費

五、性能測試步驟

????1. 性能測試需求分析

????????說明:需求分析就是把真正需求搞清楚;

????????例如:以下都不是真正的需求

? ? ????????1). 我們需要貴單位對所有的功能都進(jìn)行性能測試;

? ? ????????2). 系統(tǒng)用戶登錄響應(yīng)時間小于3秒鐘;

? ? ????????3). 系統(tǒng)支持20萬用戶并發(fā)訪問;? ?(根據(jù)二八定律來分析得出真正的需求)

????????????????80%用戶=160000

????????????????20%時間=1.6小時

????????????????每小時最高登錄100000

????????????????100000/3600=28人/秒

????2. 性能測試計劃

????????說明:

? ? ????????1). 性能測試計劃是對性能測試的重要過程。

? ? ????????2). 在對需求文檔經(jīng)過認(rèn)真分析后,作為性能測試管理人員,需要編寫的第一份文檔就是性能測試計劃;

? ? ????????3). 性能測試計劃中,需要闡述產(chǎn)品、項目的背景,將前期的需要測試性能需求明確,并落實到文檔中。還有測試進(jìn)度,測試計劃。

????3. 性能測試用例

????????說明:性能測試需求最終要體現(xiàn)在性能測試用例設(shè)計中,性能測試用例應(yīng)結(jié)合用戶應(yīng)用系統(tǒng)的場景,設(shè)計出相應(yīng)的性能測試用例,用例應(yīng)能覆蓋到測試需求。

????????提示:

? ? ????1). 明確那些業(yè)務(wù)功能使用頻繁;

? ? ????2). 明確系統(tǒng)預(yù)期的用戶規(guī)模、并發(fā)用戶數(shù)、在線用戶數(shù);

? ? ????3). 明確系統(tǒng)業(yè)務(wù)的處理能力要求,如:TPS、響應(yīng)時間、系統(tǒng)資源利用率等;
? ? ? ? ? ? ?TPS :(Transaction per second)事務(wù)數(shù)/秒

????4. 測試腳本編寫

????????說明:性能測試用例編寫完成以后,接下來就需要結(jié)合用例的需要,進(jìn)行測試腳本的編寫工作。

????????提示:

? ? ????????1). 協(xié)議的正確選用;

? ? ????????2). 腳本保證其正確性,去除冗余代碼;

? ? ????????3). 注重編碼的規(guī)范和代碼的編寫質(zhì)量;

????5. 測試場景設(shè)計

????????說明:測試場景的設(shè)計一個重要的原則就是依據(jù)測試用例,把測試用例設(shè)計的場景展現(xiàn)出來。

????????提示:

? ? ????????1). 虛擬用戶數(shù)量及啟動虛擬用戶方式

? ? ????????2). 場景的相關(guān)設(shè)置(如:集合點)

? ? ????????3). 腳本是否存在依賴關(guān)系(登錄與注冊)

????6. 測試場景運行

????????說明:測試場景運行是關(guān)系到測試結(jié)果是否準(zhǔn)確的一個重要過程。

? ? ? ? 注意事項:

????????????1). 負(fù)載的測試機(jī)不能夠運行設(shè)定的虛擬用戶數(shù);

????????????2). 不能沒有“預(yù)熱”過程;先跑一遍

????????????3). 不能沒有模擬用戶的真實環(huán)境;

????????????4). 不能性能用例運行次數(shù)過少

????7. 場景運行監(jiān)控

????????說明:場景運行監(jiān)控,可以在場景運行時決定要監(jiān)控那些數(shù)據(jù),便于后期分析性能測試結(jié)果。

????????提示:

? ? ????????1). 應(yīng)用性能測試工具的重要目的就是可以提取到本次測試關(guān)心的數(shù)據(jù)指標(biāo)內(nèi)容;

? ? ????????2). 性能測試工具利用應(yīng)用服務(wù)器取得在負(fù)載過程中相關(guān)計數(shù)器的性能指標(biāo)。

? ? ????????????(計數(shù)器:計算、統(tǒng)計性能指標(biāo)的工具)

????????注意:

? ? ? ? ? ? 1). 負(fù)載機(jī)的時鐘要一致,保證在監(jiān)控過程中的數(shù)據(jù)是同步的;

? ? ????????2). 盡量搜集與系統(tǒng)測試目標(biāo)相關(guān)信息,無關(guān)內(nèi)容不必進(jìn)行監(jiān)控;

? ? ????????3). 要以管理員的身份登錄后(指的是負(fù)載機(jī))

????8. 運行結(jié)果分析

????????說明:性能測試執(zhí)行過程中,性能測試工具搜集相關(guān)性能測試數(shù)據(jù),待執(zhí)行完成后,這些數(shù)據(jù)會存儲到數(shù)據(jù)表或者其他文件中,為了定位系統(tǒng)性能問題,我們需要系統(tǒng)分析這些性能測試結(jié)果。

????????提示:

? ? ????????1). 一般使用“拐點分析”方法,利用性能計數(shù)器曲線圖上的拐點進(jìn)行分析的方法。
????????????????(基本思想就是性能產(chǎn)生瓶頸的主要原因就是因為某個資源的使用達(dá)到了極限,此時表現(xiàn)為隨著壓力的增大,系統(tǒng)性能卻出現(xiàn)急劇下降,就產(chǎn)生了“拐點”現(xiàn)象。)

????9. 系統(tǒng)性能調(diào)優(yōu)

????????說明:性能測試分析人員經(jīng)過對結(jié)果的分析以后,有可能提出系統(tǒng)存在性能瓶頸。

????????提示:

? ? ????????1). 調(diào)優(yōu)人員(開發(fā)人員、數(shù)據(jù)庫管理員、系統(tǒng)管理員、網(wǎng)絡(luò)管理員、性能測試分析人員)相關(guān)人員對系統(tǒng)進(jìn)行調(diào)整;

? ? ????????2). 驗證-性能測試人員繼續(xù)進(jìn)行第二輪、第三輪……的測試,與以前的測試結(jié)果進(jìn)行對比,從而確定經(jīng)過調(diào)整以后系統(tǒng)的性能是否有提升。

????????注意: 系統(tǒng)調(diào)優(yōu)由易到難的先后順序如下:

? ? ????????1). 硬件問題;

????????????2). 網(wǎng)絡(luò)問題;

????????????3). 應(yīng)用服務(wù)器、數(shù)據(jù)庫等配置問題;

????????????4). 源代碼、數(shù)據(jù)庫腳本問題;

????????????5). 系統(tǒng)構(gòu)架問題。

????10. 性能測試總結(jié)

性能測試Day1

-----------------------------------------------------------------------------------------------------------------------------------

注意事項: LoadRunner VuGen錄制的瀏覽器只能選擇32位(IE)

一、LoadRunner 簡介

????說明:

? ? ????1). HP LoadRunner是一種工業(yè)級標(biāo)準(zhǔn)性能測試負(fù)載工具,可以模擬上千萬用戶實施測試,并在測試時可實時檢測應(yīng)用服務(wù)器及服務(wù)器硬件各種數(shù)據(jù),來確認(rèn)和查找存在的瓶頸;

? ? ????2). 支持多協(xié)議:Web(HTTP/HTML)、Windows Sockets(win32的協(xié)議)、FTP、ODBC(數(shù)據(jù)庫協(xié)議)、MS SQL Server等協(xié)議

????組成:

? ? ????1). Virtual User Generator(VuGen):腳本生成器-腳本錄制、編輯

? ????? 2). Controller:控制器-設(shè)計場景、運行、監(jiān)控

? ? ????3). Analysis:測試結(jié)果分析

? ? VuGen介紹:錄制客戶端和服務(wù)器之間的相關(guān)交互活動,它將自動生成相關(guān)模擬實際情況的API函數(shù)。

????????LR錄制腳本功能由于兼容性問題,非常不好使,我們平時在工作中也不使用錄制方式,在這里我們了解下它的錄制過程;由于兼容性和錄制多余操作,一般手寫腳本。

二、?VuGen錄制設(shè)置

? ??1. option選項

? ? ? ??? ? 1). HTML-based script: 所有請求放到一個函數(shù)內(nèi),每個操作放在一個函數(shù)內(nèi)

????????????2). URL-based script: 每個請求放到一個函數(shù)(一個操作可以有很多請求)

? ??? ??提示:

? ? ????????1). 基于瀏覽器的應(yīng)用程序推薦使用HTML-based Script

? ? ????????2). 不是基于瀏覽器的應(yīng)用程序推薦使用URL-based Script。

? ? ????????3). 基于瀏覽器的應(yīng)用程序中使用了HTTPS 安全協(xié)議,使用URL-based 方式錄制

????2. HTML Advanced選項

????????????1). web_submit_form: 依賴上下文才能提交

????????????2). web_submit_data:? 不依賴上下文,每個函數(shù)都指定了具體的url地址,可以直接提交成功【推薦】

三、VuGen運行(回放)設(shè)置

?Run-time Settings (菜單-Vuser->Run-time Settings) 快捷鍵F4

????1.Run-time Settings

????????????1). Run Logic 腳本運行迭代次數(shù):迭代就是腳本要執(zhí)行的次數(shù),Init與End迭代次數(shù)不生效,只會運行一次

????????????2). Think Time? ? 運行時思考時間處理方:模擬真實場景下,兩個用戶點擊間延遲;但做性能壓測的時候,一般會把這個時間忽略,因為太占時間了,在Run-time Settings——Think Time——ignore think time設(shè)置

????????????????- Ignore think time 默認(rèn)(忽略思考時間)

? ? ????????????- Replay think time (播放思考時間)

? ? ? ? ????????????1). As recorded? ? ? ? (錄制多少秒,就等待多少秒)

? ? ? ? ????????????2). MuItiply recorded think time by? ? (錄制時間的倍數(shù))

? ? ? ? ????????????3). Use random percentage of recorded think time

? ? ? ? ? ? ????????????( Min(錄制時間的最小百分比) Max(錄制時間的最大百分比))

? ? ? ? ????????????4). Limit think time to( 限制最高時間)

????2. 常用函數(shù):

????????????1). lr_output_message()? // 如:lr_output_message("hello Action"),參數(shù): 要輸出的文本信息,輸出到運行日志的函數(shù) 類似 Python print

????????????2). lr_think_time() // 思考時間函數(shù),最大可能模仿用戶真實操作 如:lr_think_time(4)

參數(shù):停頓多少秒,類似 python? sleep;

示例腳本:

Action()
{
????lr_output_message("Action被執(zhí)行");
????lr_think_time(6)
????return 0;
}

Action2()
{
????lr_output_message("Action2被執(zhí)行");
????return 0;
}

????????????提示:

????????????????1). C語言語法:必須以分號(;)作為行結(jié)束標(biāo)記

????????????????2). return 0:結(jié)束本次迭代,進(jìn)入下一迭代;如果是return -1,就不會進(jìn)入下次迭代

四、擴(kuò)展 - 編譯(compile)

????C語言是高級語言,需要編譯成匯編語言才能被計算機(jī)識別

????1. shift+F5,可以不運行直接編譯,看腳本會不會返回錯誤信息

五、腳本注釋

????1. //:單行注釋? 如://登錄

????2. /**/:多行注釋? 如:/*多行? ? 注釋*/

六、手動編寫腳本時常用函數(shù)

????1. web_url:GET請求使用時使用

????????語法:web_url("request name","URL=http://***",LAST);

? ? ? ????????1). request name:標(biāo)記請求名稱,比如:首頁

? ? ? ????????2). URL=http://***:URL=為固定格式;http://***為GET請求地址

? ? ? ????????3). LAST結(jié)束標(biāo)志;

? ? 2. web_submit_data:POST請求專用

????????語法:web_submit_data( StepName, Action=http://***, <List of Attributes>, ITEMDATA,<List of data>, LAST );?

? ? ? ????????1). StepName:標(biāo)記請求名稱, 比如:登錄

? ? ? ????????2). Action=http://***:Action=固定格式;http://***:提交地址

? ? ? ????????3). List of Attributes:其他屬性 如:"Method=POST"

? ? ? ????????4). List of data:其他參數(shù) 如:"username=jojo"

? ? ????????? 5). LAST:結(jié)束符

????????提示:

? ????????? 1). POST提交參數(shù)比較多,我們不用一個個記,使用插入函數(shù)方法,在函數(shù)對話框內(nèi)輸入;在需要插入這個函數(shù)的地方右鍵-insert-new step-搜索“submit data”-在GUI中設(shè)置

? ? ????????2). 錄制HTML頁面時,Mode推薦使用HTML;


web_submit_data函數(shù)參數(shù)設(shè)置示例

????

web_submit_data函數(shù)參數(shù)設(shè)置示例

3. web_custom_request:定制請求(GET\POST\PUT\DELETE)等,接口請求使用此函數(shù)

????????語法:web_custom_request( RequestName, <List of Attributes>,LAST );

? ? ????????1). RequestName:請求名稱

? ? ????????2). List of Attributes:屬性列表,如:"Method=POST"

? ????????? 3). LAST:結(jié)束符


web_custom_request函數(shù)參數(shù)設(shè)置示例

七、參數(shù)化

????概念:根據(jù)需求動態(tài)的獲取數(shù)據(jù)的過程

????1. 參數(shù)化操作

????????????1)打開參數(shù)化菜單:選中要參數(shù)化的文本->鼠標(biāo)右鍵->Replace with a Parameter

或者 菜單【Insert】>【New Parameter...】

????????????2)Replace with a Parameter 打開的窗口:Parameter name:參數(shù)化引用名稱(參數(shù)化時使用),Parameter type:File 【推薦-File】,Properties:屬性-點擊此按鈕,可直接設(shè)置參數(shù)化引用名稱對應(yīng)的值;【點擊】

????????????????提示:點擊OK;參數(shù)化引用名稱具體的值,需要再次設(shè)置;

????????????3)Properties 設(shè)置面板:. Parameter type: 參數(shù)類型 File 【重點】,File:參數(shù)保存的文件類型及位置,一般為txt;選定以后要點create table才能在相應(yīng)的目錄下創(chuàng)建一個對應(yīng)的txt文件;在txt文件中最后一行的數(shù)據(jù)后面要多一個回車【推薦】,Add Row:添加行,在當(dāng)前表格編輯數(shù)據(jù);【可選】, Edit with Notepad:在記事本內(nèi)編輯數(shù)據(jù);【推薦】,Select next row:運行或迭代時對行的選擇方式,Update value on:運行或迭代時對值的選取方式

Properties 設(shè)置面板

????2.?函數(shù):lr_save_string()? 和 lr_eval_string()?

? ??????lr_save_string()??

????????????說明:把字符串保存到指定的參數(shù)中

????????????格式:lr_save_string("字符串","參數(shù)名")??

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

?? ??????lr_eval_string()

????????????功能:讀取變量的值,并以Char類型返回

????????????示例:lr_eval_string("{parameter}")

????????????提示:

? ? ????????????1). 參數(shù)名稱使用花括號{}包括

? ? ????????????2). 參數(shù)使用雙引號包括

Action()
????{
????????lr_output_message("我要去%s",lr_eval_string("{NewParam}"));
????????return 0;
????}

????3. Select next row與Update value on

? ??????Select next row

????????說明:讀取參數(shù)文件行的方式

????????方式:

? ? ????????1). Sequential:順序,按照行的順序讀取數(shù)據(jù),如果迭代次數(shù)大于行數(shù),再次從第一行開始讀取

? ? ????????2). Random:隨機(jī),隨機(jī)讀取行

? ? ????????3). Unique:唯一,每次讀取唯一行,不重復(fù);如果行數(shù)讀完,立即停止迭代;

????????????4).Same line as:取參數(shù)同行(需要兩個以上參數(shù),才能顯示和使用)

? ??????Update value on

????????說明:參數(shù)值更新的方式

????????方式:

? ? ????????1). Each iteration:每次迭代以后更新

? ? ????????2). Each occurrence:每次出現(xiàn)參數(shù)時更新

? ? ????????3). Once:每出現(xiàn)一個虛擬用戶(線程)更新一次

? ??????組合

????????????1). 行順序+每次迭代更新值? ? Sequential + Each iteration

????????????2). 行順序+每次參數(shù)出現(xiàn)更新值? ? Sequential + Each occurrence

????????????3). 行順序+更新一次(單用戶)? ? Sequential + Once

????????說明:

? ? ????????1). 組合我們在這里就不窮舉了,以行的順序配合值的3種更新方式做演示

? ? ????????2). 因為組合內(nèi)含occurrence,所以必須要兩個Action,我們新增兩個(Action、Action2)兩個代碼相同

代碼
Action()
{
????lr_output_message("我要去%s",lr_eval_string("{NewParam}"));
????return 0;
}

Action2()
{
????lr_output_message("我要去%s",lr_eval_string("{NewParam}"));
????return 0;
}

? ??????Sequential + Each iteration

????????說明:行為順序,值為迭代更新一次;

????????預(yù)期:

? ? ????????1). 第一次迭代:Action:北京;Action2:北京

? ? ????????2). 第二次迭代:Action:上海;Action2:上海

? ? ????????3). 第三次迭代:Action:廣州;Action2:廣州

? ? ????????4). 第四次迭代:Action:深圳;Action2:深圳

????????Sequential + Each occurrence

????????說明:行為順序,值為出現(xiàn)一次更新一次

????????預(yù)期:

? ? ????????1). 第一次迭代:Action:北京;Action2:上海

? ? ????????2). 第二次迭代:Action:廣州;Action2:深圳

? ? ????????3). 第三次迭代:Action:北京;Action2:上海

? ? ????????4). 第四次迭代:Action:廣州;Action2:深圳

? ??????Sequential + Once

????????說明:行為順序,值為單用戶只更新一次

????????預(yù)期:

? ? ????????1). 第一次迭代:Action:北京;Action2:北京

? ? ????????2). 第二次迭代:Action:北京;Action2:北京

? ? ????????3). 第三次迭代:Action:北京;Action2:北京

? ? ????????4). 第四次迭代:Action:北京;Action2:北京

????4. 擴(kuò)展 批量獲取參數(shù)時,如果保證參數(shù)不重復(fù)?

????????思路:添加時間戳

????????說明:web_save_timestamp_param("time_stamp",LAST) 為時間戳函數(shù),返回:1970到現(xiàn)在的毫秒數(shù);(time_stamp:參數(shù)為獲取值后保存的參數(shù)名稱,被引用時使用)

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

????5. 其他常用參數(shù)類型parameter type

????????????parameter type:Date/Time,Random Number,Unique Number

????????????提示:Unique需要配合Controller的虛擬用戶使用

性能測試Day2

-----------------------------------------------------------------------------------------------------------------------------------

一、關(guān)聯(lián)

1.1 什么是關(guān)聯(lián)(correlation)?

說明:動態(tài)獲取指定的數(shù)據(jù),把獲取的數(shù)據(jù)通過參數(shù)化方式在另一處引用

1.2 為什么要學(xué)習(xí)關(guān)聯(lián)?

????1. 獲取動態(tài)加載的數(shù)據(jù),Session ID

????2. 測試的時候需要獲取頁面上指定的數(shù)據(jù),注意是獲取,而不是查找;

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

關(guān)聯(lián)

1.3 關(guān)聯(lián)方式:

????1. 自動關(guān)聯(lián) 【不推薦】

????????說明:LoadRunner11.0的VuGen利用自帶的一些關(guān)聯(lián)規(guī)則,使用關(guān)聯(lián)函數(shù)對需要進(jìn)行的關(guān)聯(lián)數(shù)據(jù)進(jìn)行數(shù)據(jù)關(guān)聯(lián);啟用

????????提示:

? ????????? 1. 自動關(guān)聯(lián)LoadRunner提供兩種方式:

? ? ? ? ????????1). 啟用錄制腳本能自動關(guān)聯(lián)-在錄制的時候如果有符合關(guān)聯(lián)規(guī)則的就直接進(jìn)行關(guān)聯(lián); (注意:此種方式依賴于LR自帶的規(guī)則或新建的規(guī)則)

? ? ? ? ? ? ? ? ? ? ?啟動自動關(guān)聯(lián)位置:工具菜單(Tool)->Recording Option

? ? ? ? ????????2). 腳本錄制完成并且運行完一次后,打開掃描工具,進(jìn)行掃描需要關(guān)聯(lián)的數(shù)據(jù);(注意:利用工具必須先運行一遍腳本)

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

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

? ? ????????????????-. 關(guān)聯(lián):圖中個第二步Correlation Results內(nèi)進(jìn)行關(guān)聯(lián)

? ????????? 2. 自動關(guān)聯(lián)調(diào)用的是關(guān)聯(lián)函數(shù) web_reg_save_param_ex();
????????????????(web_reg_save_param_ex與web_reg_save_param功能大致相同,它可以使用正則表達(dá)式和過濾器)

????總結(jié):
????????自動關(guān)聯(lián)-啟用自動關(guān)聯(lián)設(shè)置:采用自帶或設(shè)定的規(guī)則在錄制腳本的時候自動關(guān)聯(lián)
????????自動關(guān)聯(lián)-掃描工具:前后運行兩次,搜索兩次不同之處為需要關(guān)聯(lián)的數(shù)據(jù),進(jìn)行確認(rèn)關(guān)聯(lián)
????????自動關(guān)聯(lián)無論那種方式,都是采用調(diào)用關(guān)聯(lián)函數(shù)的方法,工具智能人更智能建議掌握接下來關(guān)聯(lián)函數(shù)的使用

????2. 手動關(guān)聯(lián)-函數(shù) 【推薦】

? ??????手動關(guān)聯(lián)就是直接調(diào)用關(guān)聯(lián)函數(shù)

1.4 關(guān)聯(lián)函數(shù) web_reg_save_param()

????說明:

????1). 執(zhí)行順序:LR中函數(shù)內(nèi)含reg為注冊函數(shù),注冊函數(shù)是在下一個Action Function完成時執(zhí)行。

????2). 函數(shù)位置:注冊函數(shù)【必須】放到下一個Action Function(要進(jìn)行關(guān)聯(lián)數(shù)據(jù)所在的函數(shù))函數(shù)之前;

????3). 如果關(guān)聯(lián)的參數(shù)值超過256個字符,需要調(diào)用? ? web_set_max_html_param_len("1024")改變參數(shù)長度;

案例示范:
使用web_reg_save_param()函數(shù)把WebTours首頁部分內(nèi)容關(guān)聯(lián)給Welcome參數(shù)

操作分析
1. 在Web_url函數(shù)之前插入關(guān)聯(lián)函數(shù) web_reg_save_param()
2. 調(diào)用lr_eval_string()來讀取關(guān)聯(lián)函數(shù)的參數(shù)引用名稱,并通過lr_output_message()函數(shù)輸出到日志

函數(shù)參數(shù)設(shè)置
????1). Parameter Name:參數(shù)名稱(被引用時使用)
????2). Left Boundary(LB):左邊界
????3). Right Boundary(RB):右邊界
????4). Not Found:關(guān)聯(lián)失敗時,處理方式
????5). Search in:匹配搜索響應(yīng)代碼范圍
????注意:單引號(')、雙引號(")、反斜杠(\)、回車換行等需要轉(zhuǎn)譯字符,加上轉(zhuǎn)移字符[\]

函數(shù)參數(shù)設(shè)置

如何查看頁面元素響應(yīng)代碼?
????1. 通過lr查看響應(yīng)代碼
????????結(jié)構(gòu)為Tree
????????url:為WebTours
????????頁面為/WebTours/home.html

通過lr查看響應(yīng)代碼

????2. 通過頁面查看源代碼:地址:http://127.0.0.1:1080/WebTours/home.html

通過頁面查看源代碼

最終代碼:

? ? Action2()
????{
????????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;
????}

二、檢查點

????說明:檢查點是在回放腳本期間搜索指定的文本或圖片,從而驗證服務(wù)器響應(yīng)數(shù)據(jù)的正確性;

????提示:

? ? ????1). LR中的檢查點推薦使用web_reg_find()函數(shù),注冊函數(shù)從緩存中查找

? ? ????2). 在LR中使用檢查點的時候必須開啟 Enable Image and text check(啟用圖片和文本檢查),Run-Time Settings - Preferences -??Enable Image and text check

? ? ????3). 要使用檢查點錄制模式必須是HTML-based mode 且為 web_submit_form模式

????1. web_reg_find()? ? ? ? 查找文本? ? 【掌握】

????????說明:web_reg_find為LR檢查點函數(shù);

????????參數(shù):

? ? ????????1. Text:要檢查的文本內(nèi)容【必填】

? ? ????????2. Search:搜索響應(yīng)數(shù)據(jù)范圍- ALL、Body、Header【選填】

? ? ????????3. Fail:失敗條件-NotFound/Found 【選填】

? ? ????????4. SaveCount:匹配結(jié)果數(shù)量且返回到參數(shù)中【選填】

????????注意:

? ? ????????1. 函數(shù)包含reg為注冊函數(shù),注冊函數(shù)必須放到依賴執(zhí)行函數(shù)之前(依賴:函數(shù)運行后的數(shù)據(jù)給注冊函數(shù)使用)

????????參數(shù):

? ? ????????1. Search for specific Text:搜索特定文本

? ? ????????2. Search in:搜范范圍

? ? ? ? ? ? ? ? 1). All :搜索Body+Headers

? ? ? ? ? ? ? ? 2). Body:只搜索Body

? ? ? ? ? ? ? ? 3). Headers:只搜索Headers

? ? ????????3. Save count:搜索滿足條件的數(shù)量,并保存在指定的參數(shù)名中

? ? ????????4. Fail if:檢查失敗的條件

? ? ? ? ? ? ? ? 1). NotFound 沒有找到檢查失敗 -推薦

? ? ? ? ? ? ? ? 2). Found 找到了檢查失敗

參數(shù)設(shè)置

? ? 2. web_find()? ? ? ? ? ? 查找文本? ? 【了解】

?????????web_find() 普通查找函數(shù)(在當(dāng)前頁面查找指定內(nèi)容),所以一般放在action函數(shù)后面,等頁面加載出來了之后才能去查找

? ? 3. web_image_check()? ? 查找圖片? ? 【了解】

? ? ? ? 也是一般放在action函數(shù)后面,等頁面加載出來了之后才能去查找,使用src屬性+相對路徑去查找(這些信息可以在網(wǎng)頁的源碼中找到),也可以使用alt屬性查找

三、事務(wù)(Transaction)

????3.1 什么是事務(wù)?

????????概念:事務(wù)(Transaction)是用戶在應(yīng)用軟件上操作的一個業(yè)務(wù)或多種業(yè)務(wù)集合(actions)的統(tǒng)稱;

????????作用:

? ? ????????1). 通過事務(wù)可標(biāo)記業(yè)務(wù)開始和結(jié)束,并且可統(tǒng)計相應(yīng)業(yè)務(wù)的操作時間(事務(wù)時間)【重點】

? ? ????????2). 通過事務(wù)狀態(tài)機(jī)制,可判斷相應(yīng)業(yè)務(wù)執(zhí)行的成功與失??;【了解】

? ? ????????3). 通過事務(wù)來衡量服務(wù)器性能;

????3.2 添加事務(wù)的方式

????????說明:LR添加事務(wù)有兩種方式:

? ? ????????1). 錄制腳本的時候添加【了解】

錄制腳本的時候添加事務(wù)

? ? ????????2). 運行腳本的時候添加【推薦】

運行腳本的時候添加事務(wù)

????????提示:

????????????1. 插入事務(wù)開始 lr_start_transaction("Name")

? ? ? ? ????????1. 插入方式:

? ? ? ? ? ? ????????1). Ctrl+T

? ? ? ? ? ? ????????2). 鼠標(biāo)右鍵Insert->Start Transaction

? ? ? ? ? ? ????????3). 工具欄菜單(Insert)->Start Transaction

? ? ? ? ????????2. 參數(shù):Name:事務(wù)名稱

????????????2. 插入事務(wù)結(jié)束 lr_end_transaction("Name", "status")

? ? ? ? ????????1. 插入方式:Ctril+D,參考插入事務(wù)開始

? ? ? ? ????????2. 參數(shù)

? ? ? ? ? ? ????????Name:事務(wù)名稱和開始事務(wù)名相同;

? ? ? ? ? ? ????????status:標(biāo)志事務(wù)狀態(tài)

? ? ? ? ? ? ? ? ????????1). LR_AUTO: 自動-由LR判斷 【推薦】

? ? ? ? ? ? ? ? ????????2). LR_PASS:通過

? ? ? ? ? ? ? ? ????????3). LR_FAIL: 失敗

? ? ? ? ? ? ? ? ????????4). LR_STOP: 停止

????????注意:

? ? ????????1. 插入事務(wù)時,不要包含lr_think_time()函數(shù)

? ? ????????2. 事務(wù)名稱(中文、英文),建議英文;

? ? ????????3. 事務(wù)名稱開始和結(jié)束必須相同 如:登錄(Login)

? ? ????????4. 事務(wù)必須成對出現(xiàn) lr_start_transaction("登錄"); ... lr_end_transaction("登錄", LR_AUTO);

????3.3.事務(wù)時間:

????????1). 一個事務(wù)的時間是指事務(wù)持續(xù)時間(Duration Time)從事務(wù)的開始到結(jié)束;

事務(wù)時間組成

????????2). 事務(wù)時間包含:

????????????1). 響應(yīng)時間:客戶端瀏覽器解析渲染響應(yīng)數(shù)據(jù)不算響應(yīng)時間

響應(yīng)時間組成

????????????2). 浪費時間(Wasted Time):LR自動會把一些函數(shù)執(zhí)行的時間統(tǒng)計為浪費時間,比如(關(guān)聯(lián)、檢查點)等函數(shù)

????????????3). 思考時間(Think Time):lr_think_time()函數(shù)

????????????4). 事務(wù)自身執(zhí)行時間:lr_start_transaction("")和lr_end_transaction("", LR_FAIL)這兩句代碼執(zhí)行的時間;

????????3). 在運行腳本后,運行日志內(nèi)有事務(wù)時間、Wasted Time時間,單位為秒;

總結(jié):

1. 站在代碼角度,事務(wù)的開始與結(jié)束,其實就是指定一段代碼為一個事務(wù);

2. 而代碼段內(nèi)可以包含思考時間、業(yè)務(wù)代碼、事務(wù)函數(shù),所以說事務(wù)時間包含響應(yīng)(業(yè)務(wù)),時間、思考時間、事務(wù)自身、其他函數(shù)(浪費時間)

3. 事務(wù)時間=響應(yīng)時間+浪費時間+思考時間+事務(wù)自身執(zhí)行時間

????3.4 補(bǔ)充:strcmp函數(shù)

????????說明:比較兩個字符串(匹配大小寫)是否相等,并返回int型數(shù)值;

????????用法:result = strcmp( string1, string2);

? ? ? ????????????result:

? ? ? ? ? ? ????????????1). <0 string1小于string2;

? ? ? ? ? ? ????????????2). 0? string等于string2;

? ? ? ? ? ? ????????????3). >0 strring大于string2;

????????提示:如果要忽略大小寫請使用 stricmp函數(shù),用法參考strcmp

案例示范:
1. 在登錄函數(shù)之前插入開始事務(wù)
2. 獲取登錄后的用戶名
3. 判斷登錄用戶名是否為jojo,如果是
????????插入結(jié)束事務(wù)并且事務(wù)狀態(tài)為:LR_PASS,
????否則
????????插入結(jié)束事務(wù),事務(wù)狀態(tài)為:LR_FAIL;
問題:如何判斷登錄名是否為jojo?

代碼:
Action2()
????{
????????# 定義int變量 ,接受字符串對比結(jié)果值
????????# C語言中,定義變量必須要在開頭
????????int result;? ?
????????web_url("WebTours",
????????????"URL=http://127.0.0.1:1080/WebTours/",
? ? ? ? ? ? "Resource=0",
????????????"RecContentType=text/html",
????????????"Referer=",
????????????"Snapshot=t1.inf",
????????????"Mode=HTML",
????????????LAST);

????????lr_think_time(8);

? ? ? ? # 登錄事務(wù)開始...
????????lr_start_transaction("Login");

? ? ? ? # 使用關(guān)聯(lián)函數(shù)獲取登錄信息
?????????web_reg_save_param("username",
????????????"LB=Welcome, <b>",
????????????"RB=</b>, to",
????????????"NotFound=ERROR",
????????????"Search=All",
????????????LAST);

? ? ? ? web_submit_form("login.pl",
????????????"Snapshot=t2.inf",
????????????ITEMDATA,
????????????"Name=username", "Value=jojo", ENDITEM,
????????????"Name=password", "Value=bean", ENDITEM,
????????????"Name=login.x", "Value=68", ENDITEM,
????????????"Name=login.y", "Value=12", ENDITEM,
????????????LAST);

? ? ? ? # 調(diào)用字符串對比函數(shù)判斷獲取登錄用戶是否為jojo
????????result = strcmp(lr_eval_string("{username}"),"jojo");

? ? ? ? /*以下兩行為測試調(diào)試代碼 */
????????# 查看對比結(jié)果是否相等,相等為0
????????lr_output_message("result參數(shù)值為:%d",result);

? ? ? ? # 查看關(guān)聯(lián)獲去的參數(shù)值
????????lr_output_message("username值為:%s",lr_eval_string("{username}"));

? ? ? ? # 判斷對比結(jié)果是否相等
????????if (result==0) {
????????????# 相等插入通過狀態(tài)事務(wù)
????????????lr_end_transaction("Login", LR_PASS);
????????????lr_output_message("事務(wù)通過!");
????????}else{
????????????# 不相等插入失敗狀態(tài)事務(wù)
????????????lr_end_transaction("Login", LR_FAIL);
????????????lr_output_message("事務(wù)失?。?);
????????}

? ? ? ? lr_think_time(19);

? ? ? ? web_image("SignOff Button",
????????????"Alt=SignOff Button",
????????????"Snapshot=t3.inf",
????????????LAST);

? ? return 0;

? ? }

四、集合點(rendezvous)

概念:集合點(rendezvous),在指定的地點集合指定虛擬用戶(Vuser),條件滿足時集合的虛擬用戶,同時去操作同一事務(wù);

????4.1 集合點 創(chuàng)建

????????方式:

? ? ????????1. 指定插入位置,鼠標(biāo)右鍵->Insert->Rendezvous 【推薦】

? ? ????????2. 工具欄菜單(Insert)->Rendezvous

????????參數(shù):lr_rendezvous("Name")--->Name:集合點名稱;在Controller場景運行時使用 如:Login

????????提示:

? ? ????????1. 集合點創(chuàng)建,相當(dāng)于找好集合的地方,那么到底應(yīng)該那些用戶及集合多少用戶需要單獨設(shè)置

? ????? ????2. 集合點要設(shè)置和運行,必須在Controller工具內(nèi)完成;

????4.2 集合點設(shè)置

? ??????1). 基于當(dāng)前腳本 創(chuàng)建Controller場景

????????????菜單工具(Tools)->Create Controller Scenario(基于當(dāng)前腳本直接創(chuàng)建場景)

? ??????2). 選擇場景模式及虛擬用戶數(shù)

????????????1. 場景模式:Manual Scenario(手工場景)

? ? ????????2. Numberof Vusers:虛擬用戶數(shù)

????????????提示:

? ? ????????????場景模式:我們還沒了解,在這里暫時使用下手工場景

? ? ????????????虛擬用戶數(shù):為并發(fā)用戶數(shù),我們這里以需求10個并發(fā)登錄為例

? ??????3) Controller工具內(nèi)設(shè)置集合策略

????????????Controller工具-菜單(Scenario)->Rendezvous

????????????說明:

? ? ????????????1. 創(chuàng)建場景時10個用戶,默認(rèn)10個用戶都參與集合點

? ? ????????????2. 可指定用戶不參與集合點 選擇用戶-單擊Disable VUser按鈕

? ? ????????????3. Policy:設(shè)置集合用戶策略

????????????集合策略:

? ? ????????????1). 當(dāng)所有虛擬用戶中的x % 到達(dá)集合點進(jìn)釋放;

? ? ????????????2). 當(dāng)所有正在運行的虛擬用戶中的x %到達(dá)集合點時釋放;

? ? ????????????3). 當(dāng)x 個虛擬用戶到達(dá)集合點時釋放; 【推薦】

????????????時間:

????????????????Timeout between Vusers:默認(rèn)30秒-當(dāng)指定時間內(nèi)還未達(dá)到以上集合策略用戶數(shù)量時,釋放已集合用戶去執(zhí)行;

? ??????4). 集合點設(shè)置 注意事項

????????????????1). 集合點只能在手工場景模式內(nèi)使用

????????????????2). 多個腳本需要同步并發(fā),可以在不同腳本內(nèi)設(shè)置相同集合點,在一個場景內(nèi)搭建這些腳本;

????????????????3). 如果腳本內(nèi)沒有設(shè)置集合點,在Controller內(nèi)集合點策略設(shè)置功能不生效

????????????????4). 集合點只能在Action部分添加,init、end無法添加

性能測試Day03

-----------------------------------------------------------------------------------------------------------------------------------

一、Controller 簡介

????1.1 為什么要學(xué)習(xí) Controller?

????????集合點需要在Controller場景中運行;
????????性能測試就是模擬應(yīng)用程序在【真實環(huán)境】中運行的情況;(真實環(huán)境:就是需要模擬搭建各種業(yè)務(wù)場景,各種應(yīng)用場景的搭建就需要Controller工具)

????1.2 Controller運行方式

????????1. 從VuGen腳本直接啟動Controller【已講解】

????????2. 直接運行Controller 【推薦】:開始菜單->HP LoadRunner->Applications->Controller 【建議發(fā)送桌面快捷方式】

????????3. 通過LR工具管理器運行: 開始程序->HP LoadRunner->LoadRunner,點擊 Run Load Tests

二、運行Controller后,提示先選擇場景 ,什么是場景?

說明:一個應(yīng)用程序,有不同的操作功能且支持多用戶同時應(yīng)用,【模擬不同的用戶進(jìn)行不同的操作】,就是場景;(比如:機(jī)票網(wǎng)站,5個用戶在進(jìn)行注冊業(yè)務(wù),20個用戶在進(jìn)行訂票操作,5個注冊+20訂票=場景)

三、Controller場景模式

模式:

? ? 1. Goal-Oriented Scenario(目標(biāo)場景)【了解】

? ? 2. Manual Scenario(手工場景)【重點】

三、Goal-Oriented Scenario(目標(biāo)場景)

????????說明:目標(biāo)場景設(shè)計就是定義要實現(xiàn)的【測試目標(biāo)】,LR會根據(jù)根據(jù)這些目標(biāo)自動構(gòu)建場景。

? ? ? (測試目標(biāo):LR提供了5種目標(biāo)-虛擬用戶數(shù)、每秒單擊次數(shù)、每秒事務(wù)數(shù)、每分鐘頁面數(shù)、事務(wù)響應(yīng)時間)? 提示:每秒單擊次數(shù)、每分鐘頁面數(shù)只適合Web項目;

????3.1?如何選擇啟動 目標(biāo)場景

? ??????1) 創(chuàng)建目標(biāo)場景

????????????1. 啟動Controller

????????????2. Select Scenario Type:選擇Goal-Oriented Scenario

????????????3. 根據(jù)測試用例給目標(biāo)場景添加相應(yīng)業(yè)務(wù)(單一業(yè)務(wù)或混合業(yè)務(wù)),雙擊(Available)有效腳本,或選中點擊Add ==>>按鈕

? ???????????? 注:

? ? ? ???????????? 1). 單一業(yè)務(wù):單個業(yè)務(wù)腳本

? ? ? ???????????? 2). 混合業(yè)務(wù):多個業(yè)務(wù)腳本【重點】

????3.2 目標(biāo)場景 計劃與編輯

? ??????1) 啟動編輯場景

? ??????????1. 場景默認(rèn)數(shù)據(jù):為Controller默認(rèn)創(chuàng)建目標(biāo)場景時設(shè)計的數(shù)據(jù)

????????????2. Edit Scenario Goal:編輯目標(biāo)場景-修改目標(biāo)場景數(shù)據(jù)

啟動編輯場景

? ??2)編輯場景

????????標(biāo)注1:新建場景、修改現(xiàn)有場景名稱、設(shè)置場景啟動時間

標(biāo)注1

????????????1. Scenario Start Time:設(shè)計完場景后,場景啟動時間;一般默認(rèn)即可

? ? ? ???????? 1). Without delay:立即運行場景 (默認(rèn))

? ? ????? ???? 2). With a delay of HH:MM:SS:等待指定時間運行場景

? ? ? ???? ????3). At HH:MM:SS on Y/M/D:指定X年X月X日X時X分X秒運行場景

????????????2. New:創(chuàng)建一個新的計劃場景

????????標(biāo)注2:設(shè)置目標(biāo)場景的測試目標(biāo)類型及目標(biāo)范圍【相對目標(biāo)場景 重點】

標(biāo)注2

????????????Goal Type:本次性能測試的測試目標(biāo)????????

? ??????標(biāo)注3:場景運行時間及策略設(shè)計

標(biāo)注3

????????說明:

? ? ????????1. 標(biāo)示1(Run time):場景達(dá)到目標(biāo)后,繼續(xù)運行多長時間;一般10-30分鐘

? ? ????????2. 標(biāo)示2(If target cannot be reached): 如果達(dá)不到設(shè)定目標(biāo)時處理方式

? ? ? ???????????? 1). Stop scenario and save results 停止并保存運行結(jié)果【推薦】

? ? ? ???????????? 2). Continue Scenario without reaching 繼續(xù)執(zhí)行場景直到達(dá)到目標(biāo)為止 【默認(rèn)】

? ? ? ? 提示:以上選項如沒有特殊業(yè)務(wù)需求,默認(rèn)即可;

????????標(biāo)注4:虛擬用戶加載策略

?標(biāo)注4

????????1. Automatic:系統(tǒng)自動加載虛擬用戶 【默認(rèn)】

????????2. Reach target number of virtual users after 00:02:00 設(shè)定10分鐘后達(dá)到指定的目標(biāo)虛擬用戶數(shù)

????????3. Step up by 20 virtual users every 00:02:00 表示以每2分鐘加載20個虛擬用戶的方式加載虛擬用戶

????????提示:以上選項根據(jù)實際業(yè)務(wù)場景來選擇和設(shè)定

????3.3?目標(biāo)場景5種 測試目標(biāo)(每秒點擊率&每秒事務(wù)數(shù) 在性能測試中用得比較多,直接體現(xiàn)服務(wù)器的負(fù)載能力)

????????1. Virtual users (虛擬用戶):測試應(yīng)用程序(選定的腳本)是否可以同時運行指定數(shù)量的虛擬用戶數(shù);

????????2. Hits per Second(每秒點擊率):

? ? ? ? ? ? -. Hits per Second目標(biāo):測試服務(wù)器每秒點擊率(每秒點擊數(shù))(指定每秒點擊數(shù)目標(biāo)以及達(dá)到這一目標(biāo)的最小用戶數(shù)和最大用戶數(shù),如果最小用戶數(shù)沒有達(dá)到這個目標(biāo)會自動加載用戶)

????????????-. 虛擬用戶加載策略(Load Behavior)應(yīng)選擇 自動加載(Automatic)

????????????-. Hits per Second只適合Web項目【注意】

????????3. Transactions per Second(每秒事務(wù)數(shù))

? ??????????-. Transactions per Second目標(biāo):測試服務(wù)器每秒事務(wù)數(shù)(指定事務(wù))?(指定每秒完成事務(wù)數(shù)目標(biāo)以及達(dá)到這一目標(biāo)的最小用戶數(shù)和最大用戶數(shù))

????????????-. 在VuGen必須插入相應(yīng)事務(wù)

????????4. Transaction Response time(事務(wù)響應(yīng)時間)

???????????-. Transaction Response Time目標(biāo):測試在不超過預(yù)期事務(wù)響應(yīng)時間(目標(biāo))的情況下可以運行多少個用戶,必須指定預(yù)期時間、最少用戶、最大用戶 (例如:需求100個人使用支付軟件付款,在3秒鐘內(nèi)完成;預(yù)期目標(biāo)時間為3秒,最少用戶80,最多用戶180)

????????5. Pages per Minute(每分鐘頁面數(shù))

? ? ? ? -. Pages per Minute目標(biāo):測試服務(wù)器每分鐘頁面數(shù) (指定每分鐘完成頁面數(shù)目標(biāo)以及達(dá)到這一目標(biāo)的最小用戶數(shù)和最大用戶數(shù))

? ? ? ? -. Pages per Minute只適合Web項目【注意】

????????提示:

????????????1. 目標(biāo)場景主要采用內(nèi)在工具來最大限度完成測試目標(biāo),工具很智能,人更智能。

? 在實際工作場景中使用最多的還是手工場景;

????????????2. 目標(biāo)場景和手工場景都只是測試場景的搭建模式,場景的運行和監(jiān)控都是一樣;

四、Manual Scenario(手工場景)

????4.1 為什么要學(xué)習(xí)手工場景?

????????說明:在手工場景模式內(nèi)可以最大程度模擬業(yè)務(wù)場景(虛擬用戶的增加、減少、虛擬用戶對混合場景的應(yīng)用)

????4.2??手工場景的創(chuàng)建

????????1) 啟動 選擇手工場景

????????????1. 啟動:

? ? ????????????1). 啟動Controller工具

? ? ????????????2). Select Scenario Type:Manual Scenario(手工場景)

????????????2. 說明:

? ? ? ???????? 1). Use the Percentage Mode...選項:為(百分比模式)暫不用理會

? ? ? ? ? ? ? ?2). 場景添加腳本參考-目標(biāo)場景添加腳本

? ??????2) 手工場景界面

手工場景界面

????說明:

? ? ????1. 標(biāo)1:手工場景的基礎(chǔ)計劃(腳本名稱為Group Name(一個組就是一個腳本,一個業(yè)務(wù))、虛擬用戶數(shù)量默認(rèn)為10);

? ? ????2. 標(biāo)2:標(biāo)1基礎(chǔ)計劃的默認(rèn)計劃選項(計劃方式:場景模式、運行模式:實際計劃)

? ? ????3. 標(biāo)3:標(biāo)1計劃運行模式(虛擬用戶初始化方式、虛擬用戶啟動加載方式、計劃持續(xù)運行時間方式、計劃完成用戶退出方式)

? ? ????4. 標(biāo)4:標(biāo)3計劃運行策略直觀圖

????4.3 案例示范(場景中的用戶組都是同時進(jìn)行的)

????說明:
????????1. 我們知道場景搭建是模擬真實應(yīng)用場景,而真實場景一般都為混合模式(多個業(yè)務(wù))
????????2. 我們結(jié)合LR自帶機(jī)票網(wǎng)站,模擬真實場景來學(xué)習(xí)混合場景的搭建

????場景:
????????1. 根據(jù)需求分析WebTours訂票網(wǎng)站高峰期時25人訪問,其中80%用戶在使用訂票業(yè)務(wù),20%用戶使用注冊業(yè)務(wù),統(tǒng)計事務(wù)響應(yīng)時間
????????2. 混合場景=注冊業(yè)務(wù)(5)+訂票業(yè)務(wù)(20)

????需求:在Controller的場景中,運行完腳本以后查看事務(wù)時間
????????1. 登錄業(yè)務(wù)時間小于5秒? ?
????????2.訂票業(yè)務(wù)小于10秒??

????提示:
????????1. 注冊業(yè)務(wù):錄制/手寫注冊腳本,腳本內(nèi)記得插入注冊事務(wù)
????????2. 訂票業(yè)務(wù):錄制/手寫注冊腳本,腳本內(nèi)記得插入訂票事務(wù)

????難點分析:????????
????????1. 注冊20個賬戶,使用20個新注冊賬戶訂票? ? ? ??
????????2. 訂票腳本依賴注冊腳本(Schedule by:Group)
????????3. 注冊腳本參數(shù)化 行的選擇和更新值方式(Unique + Each iteration + Abort Vuser)(Abort Vuser :當(dāng)沒有唯一行時處理方式,終止用戶)
????????4. 購票腳本參數(shù)化,行的選擇和更新值方式(Squential + Once)

? ??1、案例1 需求操作
????????- 注冊業(yè)務(wù)、訂票業(yè)務(wù)腳本
????????-. 創(chuàng)建手工場景,添加(注冊業(yè)務(wù)、訂票業(yè)務(wù))腳本
????????-. 修改腳本虛擬用戶數(shù)(注冊5、訂票20)-計劃設(shè)計
????????????說明:? ? 1. LR默認(rèn)手工場景虛擬用戶為10,我們需要修改虛擬用戶數(shù)(注冊20%、訂票80%)? ? 2. LR手工場景中默認(rèn)把每個腳本作為一個用戶組;?
????????????問題:虛擬用戶數(shù)不能直接修改;解決:在編輯/創(chuàng)建計劃內(nèi) 更換運行模式:Basic schedule就可以直接編輯
????????????編輯/創(chuàng)建計劃:1. Schedule by-計劃方式2. Run Mode-運行模式
????????????????a) Schedule by(計劃方式)
????????????????????說明:
?????????????????????1. Scenario(場景):以場景計劃為單位,Controller同時運行所有參與場景的Vuser組;(定義的場景運行計劃同時會應(yīng)用于所有Vuser組) 【常用】
?????????????????????2. Group(組):以Vuser組為單位,參與場景計劃的Vuser組,每個組都按其自己的單獨計劃運行; (每個Vuer組(腳本)都要設(shè)置單獨的運行計劃策略)
????????????????????提示:
?????????????????????1. 計劃方式一般情況下選擇Scenario(場景),這樣面對混合場景時,計劃運行策略只需要設(shè)置一次;
?????????????????????2. Group(組):場景中如果存在業(yè)務(wù)依賴關(guān)系時,必須使用Group組,詳情請看Group(組)應(yīng)用圖
????????????????????依賴關(guān)系:兩個業(yè)務(wù)腳本有先后執(zhí)行之序; (假設(shè)模擬訂票業(yè)務(wù)20并發(fā),前提必須先注冊20個用戶(注冊業(yè)務(wù))執(zhí)行20次,再使用新注冊用戶去訂票);?
? ??????????????b) Run Mode-模式
????????????????????說明:
?????????????????????1. Real-world schedule(實際計劃):場景根據(jù)模擬用戶實際計劃操作來運行【推薦】 (可以通過添加用戶組的Action來改變組的虛擬用戶策略)
?????????????????????2. Basic schedule(基本計劃):和實際計劃相同,不同之處,基本計劃只能設(shè)置虛擬用戶在場景一次的啟動和停止策略?

????????-. 設(shè)計全局計劃運行策略
????????說明: 1. 計劃運行策略是根據(jù)Schedule by(計劃方式)與Run Mode-模式的組合而產(chǎn)生不同的策略 2. 全局計劃策略、計劃改變模式改變、都會影響計劃圖的改變
????????1) 全局計劃 場景+真實計劃(Scenario + Real-world schedule)
????????????-. Initialize(虛擬用戶初始化策略)? ?
????????????????1.數(shù)字:
?????????????????????1). 1:Controller運行Vuser之前對所有Vuser同時進(jìn)行初始化
?????????????????????2). 2:Controller在運行指定數(shù)目的Vuser之前,根據(jù)指定時間間隔對Vuser逐漸進(jìn)行初始化
?????????????????????3). 3:Controller在每個Vuser開始運行之前對其進(jìn)行初始化【推薦默認(rèn)】
????????????????2. 提示:
?????????????????????1). Controller運行虛擬用戶(線程)之前必須初始化
?????????????????????2). 一般采取默認(rèn),運行每個Vuser之前對其初始化
????????????-. Start Vusers(虛擬用戶啟動策略) 【重點】
????????????????1. 說明:
?????????????????????1). 1:要啟動的虛擬用戶數(shù);默認(rèn)為場景內(nèi)各個Vuser組的Vuser用戶總和;
?????????????????????2). 2:同步啟動1設(shè)定的虛擬用戶數(shù);
?????????????????????3). 3:逐漸運行1設(shè)定的虛擬用戶數(shù);默認(rèn)15秒啟動給個虛擬用戶;【推薦】
????????????-. Duration(持續(xù)運行) 【重點】
????????????????1. 說明:
?????????????????????1). Run until Completion:腳本執(zhí)行一次,如果有迭代,那么執(zhí)行到迭代次數(shù)完成
?????????????????????2). 2:當(dāng)前場景運行指定時長 (注意:如果選擇此項,那么腳本內(nèi)如果設(shè)置有迭代次數(shù),迭代次數(shù)設(shè)置將失去作用)
????????????????2. 提示:
?????????????????????1). 持續(xù)運行策略需要根據(jù)場景需求來選擇,如:持續(xù)壓測5分鐘,就選第二條? ? ? ? ? ? ? ? ?????????2). 如果腳本有迭代次數(shù),需要迭代完畢就停止場景的話,就選擇第一條
? ??????????-. Stop Vuser(虛擬用戶停止策略)
????????????????1. 說明:
?????????????????????1). 1:停止的虛擬用戶數(shù),默認(rèn)All(所有用戶),或指定用戶數(shù);
?????????????????????2). 2:同步停止1設(shè)定的用戶數(shù)
?????????????????????3). 3:逐漸停止1設(shè)定的用戶數(shù),默認(rèn):30秒停止5個虛擬用戶;
????????2) 全局計劃 用戶組+真實計劃(Group + Real-world schedule)
????????????????1. 說明:
?????????????????????1). Start when group ...... finishes:指定某一用戶組(腳本)執(zhí)行完畢后,執(zhí)行當(dāng)前組(腳本); (腳本有依賴關(guān)系時使用,比如:必須先注冊在登錄)
?????????????????????2). 其他選項參考(Scenario + Real-world schedule)說明

Group(組)應(yīng)用圖?
性能測試Day04
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容