軟件介紹
-
Virtual User Generator
,記錄用戶流程并創(chuàng)建一個(gè)自動(dòng)化性能測(cè)試腳本 -
Controller
,單一控制點(diǎn),輕松、有效地控制所有Vuser
,執(zhí)行期間監(jiān)控場(chǎng)景性能 -
Analysis
,生成性能測(cè)試報(bào)告,以圖表形式呈現(xiàn)。
由于教程篇幅較大,盡可能地照顧大部分學(xué)習(xí)情況,更多還是要大家多讀官方文檔,多去上手測(cè)試學(xué)習(xí)。
如果你還沒有安裝軟件,或者是用的LoadRunner 12
這樣的老版本,我在阿里云盤分享了LoadRunner 2023
的安裝包。
https://www.aliyundrive.com/s/xsMpC6FpFpY
教程源碼:LoadRunner in quick · 乾坤道長(zhǎng)/share-blog-code - 碼云 - 開源中國(guó) (gitee.com)
前置要求:
- 需要簡(jiǎn)單了解LoadRunner軟件功能有哪些
- 了解HTTP網(wǎng)絡(luò)工作方式
- 擁有C語(yǔ)言基礎(chǔ)
- 軟件測(cè)試術(shù)語(yǔ)
本次教學(xué)應(yīng)該會(huì)花費(fèi)20-30分鐘,生成測(cè)試報(bào)告也要接近半個(gè)小時(shí)
選用被測(cè)系統(tǒng)
這里選用華測(cè)教育在線商城
關(guān)于接口文檔,在他們培訓(xùn)機(jī)構(gòu)的資料領(lǐng)取里面,同時(shí)我也放在了上面鏈接里面。
VuGen的推薦配置
錄制設(shè)定
由于是模擬用戶真實(shí)行為,所以錄制應(yīng)當(dāng)是基于HTML
腳本只要有包含的URL請(qǐng)求就好了,Web用戶的界面動(dòng)作并不重要。
日志設(shè)定
也許你有參數(shù)化,但是如果次次手動(dòng)打印到
output
太麻煩了
當(dāng)然,你還可以將服務(wù)器返回的數(shù)據(jù)打印,但是沒必要,snapshot
快照就能很清楚查看。
現(xiàn)在不管是關(guān)聯(lián)的,還是預(yù)先設(shè)定好的參數(shù),都可以很清晰看到值。
錄制腳本
初始動(dòng)作 - 登錄
打開VuGen
軟件
默認(rèn)創(chuàng)建
新建后,有3個(gè)行為(Action
),代表的啟動(dòng)腳本、運(yùn)行時(shí)腳本、結(jié)束腳本。
那就開始錄制吧
進(jìn)入到了商城首頁(yè),我們需要先進(jìn)行登錄,以模擬場(chǎng)景下用戶第一次的動(dòng)作
賬號(hào) | 密碼 |
---|---|
lisi | 123456 |
huace_tester | huace_tester |
提示登錄成功后,就可以將vuser_init
切換至Action
事務(wù) - 添加購(gòu)物車
這里就點(diǎn)進(jìn)小米4手機(jī),作為要加入購(gòu)物車的商品。
進(jìn)入詳細(xì)商品頁(yè)面之后。
加入購(gòu)物車之前,先點(diǎn)擊開始事務(wù)(Start Transcation
),這里命名為add_car
然后成功加入購(gòu)物車后,一定不要忘記結(jié)束事務(wù)了
結(jié)束動(dòng)作 - 退出登錄
接下來(lái)就是模擬用戶的退出系統(tǒng)操作,切換成錄制
vuser_end
腳本
然后點(diǎn)擊系統(tǒng)的左上角退出登錄
可以結(jié)束錄制腳本了
修改腳本
回放腳本 - 程序介紹
修改腳本之前,簡(jiǎn)單的聊一下錄制后的腳本(程序)
可以看到Action
都是標(biāo)準(zhǔn)的C語(yǔ)言程序。
不過(guò),并不支持C99
語(yǔ)法,要正常寫的話,得是C89
語(yǔ)法,也就是ANSI C
。
C語(yǔ)言基礎(chǔ)很好的同學(xué),可以一眼就能理解腳本程序了。
可以說(shuō),函數(shù)名就是腳本
Action
名稱,vuser_init
和vuser_end
對(duì)應(yīng)著啟動(dòng)和結(jié)束的鉤子函數(shù)。執(zhí)行一個(gè)腳本,就相當(dāng)于調(diào)用了這個(gè)函數(shù)。
進(jìn)入Actions
的vuser_init
程序來(lái)看一下調(diào)用了哪些函數(shù)
-
web_set_sockets_option
,用于設(shè)置與網(wǎng)絡(luò)通信和套接字操作相關(guān)的選項(xiàng) -
web_add_auto_header
,自動(dòng)向請(qǐng)求頭加入信息,這個(gè)自動(dòng)的意思是“后續(xù)的請(qǐng)求,都會(huì)有這個(gè)請(qǐng)求頭信息”。 -
web_url
,實(shí)際上是發(fā)送HTTP請(qǐng)求,可以簡(jiǎn)單理解“模擬瀏覽器請(qǐng)求一個(gè)新的頁(yè)面(HTML
文件),并同時(shí)包含了其他靜態(tài)文件的請(qǐng)求(css
、js
、png
文件等等)”。 -
web_revert_auto_header
,對(duì)應(yīng)結(jié)束自動(dòng)向請(qǐng)求頭加入信息 -
web_add_header
,下一個(gè)請(qǐng)求,會(huì)加入此請(qǐng)求頭信息 -
lr_think_time
,思考時(shí)間函數(shù),也就是程序睡眠時(shí)間,等同于Windows
庫(kù)中的sleep
函數(shù) -
web_submit_data
,模擬用戶的表單提交操作,也就是HTML
的form
標(biāo)簽事件。
按F5
,或者是點(diǎn)擊下面的按鈕,先進(jìn)性回放腳本
回放腳本的意思,等同于執(zhí)行腳本
在底部的output
中,可以看到添加購(gòu)物車的事務(wù),正常執(zhí)行并結(jié)束
然后看一下快照(Snapshot
)
然后此時(shí),鼠標(biāo)點(diǎn)擊函數(shù)的地方,就可以看見整個(gè)網(wǎng)絡(luò)請(qǐng)求。
比如我這里演示的是,vuser_init.c
腳本中的登錄POST請(qǐng)求。
檢查點(diǎn) - 登錄成功
這里需要用到函數(shù)創(chuàng)建工具,在LoadRunner里叫步驟工具箱(
Steps Toolbox
)
然后要使用一個(gè)注冊(cè)類型的函數(shù),web_reg_find
可以查找下一個(gè)動(dòng)作函數(shù)中,是否符合對(duì)應(yīng)的匹配值(文本)。
再次回放腳本,可以發(fā)現(xiàn)已經(jīng)找到了這個(gè)值,如果不成功的話
關(guān)聯(lián)參數(shù)化 - 登錄賬號(hào)
這里我們的任務(wù)是,隨機(jī)抽取一個(gè)賬號(hào)密碼進(jìn)行登錄
首先必須要有一個(gè)外部參數(shù)的引入,也就是類似賬號(hào)密碼表格的文件。
文件路徑可以自己起個(gè)名字保存。
’選擇下一次‘ 一定要是 Ramdom
(隨機(jī)),才符合任務(wù)要求。(這里其實(shí)不只是下一次隨機(jī),第一次也會(huì)隨機(jī))
為什么不用
File
類型?因?yàn)樵贚oadRunner中,File
類型只能讀取行中一列數(shù)據(jù),而賬戶密碼是與之相對(duì)應(yīng)的行數(shù)據(jù),如果需要隨機(jī)賬戶密碼登錄,就必須讓行完整。
這樣,拿到的參數(shù)值,為 賬號(hào),密碼
形式,接下來(lái)就是分割字符串,要用到string.h
庫(kù)的strtok
。
#include <string.h>
vuser_init()
{
????char?*?tableResultString?=?lr_eval_string("{account}");
????// 分割符
????const?char?*?delim?=?",";
????// 賬號(hào)
????char?*?account?=?strtok(tableResultString,delim);
????// 密碼????
????char?*?pwd?=?strtok(NULL,delim);
????// 注冊(cè)關(guān)聯(lián)參數(shù)
????lr_save_string(account,?"acc");
????lr_save_string(pwd,?"pwd");
????// --- 輸出變量的值
????lr_log_message("account變量 %s",account);
????lr_log_message("pwd變量 %s",pwd);
????// --- 輸出關(guān)聯(lián)參數(shù)的值
????lr_log_message("關(guān)聯(lián)參數(shù)的賬號(hào)為 %s",lr_eval_string("{acc}"));
????lr_log_message("關(guān)聯(lián)參數(shù)的密碼為 %s",lr_eval_string("{pwd}"));
...
return 0;
}
lr_eval_string
的意思是,將LoadRunner
可以執(zhí)行的參數(shù),轉(zhuǎn)換成C語(yǔ)言的字符串。lr_save_string
的意思是,將C語(yǔ)言的字符串值,保存到LoadRunner
參數(shù)。lr_log_message
則是在LoadRunner
的輸出中打印信息。
可以看到,實(shí)現(xiàn)了隨機(jī)抽取用戶。
接著就是,在網(wǎng)絡(luò)提交的時(shí)候,使用這個(gè)值。
找到唯一的POST
請(qǐng)求,在請(qǐng)求體字符串中,參數(shù)值替換成{參數(shù)名}
形式。
外部參數(shù)化 - 不同商品加入購(gòu)物車
來(lái)看看錄制的時(shí)候,網(wǎng)絡(luò)請(qǐng)求和Web
頁(yè)面有哪些關(guān)系
這是小米4的,那其他的呢?
可以看到,2、3、4、5對(duì)應(yīng)著蘋果、三星、華為、魅族手機(jī)。
這個(gè)數(shù)字,就是商品id,現(xiàn)在我們的任務(wù)是:將商品id為1-10的,按每次迭代順序添加到購(gòu)物車
打開參數(shù)列表,開始創(chuàng)建一個(gè)外部參數(shù)吧,參數(shù)類型為File
。
參數(shù)值手動(dòng)錄入進(jìn)去,或者是用工具生成。
然后,將代碼中所有的網(wǎng)絡(luò)請(qǐng)求,引用商品id為1的字段,換成LoadRunner
參數(shù)goods
有一個(gè)便攜的辦法,那就是通過(guò)
action
腳本中,搜索全部id/1
的地方。因?yàn)檫@里只引用了商品id。
這樣我們就完成了本任務(wù),但是會(huì)發(fā)現(xiàn)output,只引用了goods = 1,因?yàn)楸灸_本只運(yùn)行一次,后面我們需要加入迭代次數(shù)。
集合點(diǎn) - 加入購(gòu)物車
本任務(wù):為加入購(gòu)物車業(yè)務(wù)設(shè)置一個(gè)集合點(diǎn)
在設(shè)計(jì)中,或者是右擊腳本,可以找到 插入(Insert
) - 集合點(diǎn)(Rendezvous
),然后命名為add_car_r
。
集合點(diǎn)不應(yīng)該被包含在事務(wù)里面,否則集合點(diǎn)等待時(shí)間,會(huì)被算在事務(wù)時(shí)間。
這樣就完成了,集合點(diǎn)的目的是,某個(gè)業(yè)務(wù)功能的壓力測(cè)試,也就是一群用戶做相同功能。
回放腳本
迭代次數(shù)
這一次任務(wù),將把1-10商品ID都用到,那么需要加入迭代次數(shù)
進(jìn)入 運(yùn)行時(shí)設(shè)定(Runtime Settings
) - 運(yùn)行邏輯(Run Logic
) - 迭代次數(shù)(Number of iterations
)
這里設(shè)置為15吧,意味著run
生命周期的Action
(腳本)重復(fù)15次。
然后開始點(diǎn)擊回放
看見goods
已經(jīng)取向不同的值了,和預(yù)期的結(jié)果相同
思考時(shí)間
任務(wù):由于用戶添加購(gòu)物車時(shí)間,每次是不相同的,需要對(duì)添加購(gòu)物車前等待3-9秒。
也許你眼睛比較細(xì),剛剛就發(fā)現(xiàn)了 思考時(shí)間(Think Time
)。
這里就用一個(gè)隨機(jī)區(qū)間,意思是思考時(shí)間的百分比。然后還要在Action
加入思考時(shí)間函數(shù)。
然后函數(shù)調(diào)用在事務(wù)開始之前、集合點(diǎn)開始之前
然后還需要在初始腳本(
vuser_init
),刪掉思考時(shí)間。因?yàn)槟J(rèn)運(yùn)行時(shí)配置是忽略思考時(shí)間,當(dāng)設(shè)置了思考時(shí)間之后,登錄的思考時(shí)間其實(shí)是沒什么用的。
現(xiàn)在腳本編寫的過(guò)程結(jié)束啦。
場(chǎng)景運(yùn)行
打開Controller
然后直接創(chuàng)建場(chǎng)景,添加剛剛編寫好的腳本。用戶數(shù)為數(shù)值就好了,百分比這里不討論。
任務(wù):在每個(gè)虛擬用戶運(yùn)行前將其初始化。啟動(dòng)2個(gè)用戶(立即全部啟動(dòng)),執(zhí)行10分鐘,執(zhí)行完成后再啟動(dòng)1個(gè)用戶(立即開始)執(zhí)行12分鐘,執(zhí)行完成后停止所有用戶(每15秒停止2個(gè))
Schedule by
這里不用管,因?yàn)橹挥幸粋€(gè)腳本。
真實(shí)場(chǎng)景模式和經(jīng)典模式的區(qū)別,經(jīng)典模式無(wú)法增加場(chǎng)景Action
先添加一個(gè)Action
(場(chǎng)景),這里有兩種方式。
最終的Global Schedule
效果
然后這個(gè)場(chǎng)景怎么運(yùn)行呢?
需要什么評(píng)估報(bào)告圖,根據(jù)自己的需要就行了,這里就默認(rèn)的就行了。
這里跑場(chǎng)景運(yùn)行,要等20分鐘多。
場(chǎng)景下用戶可以增加多一些。但注意,可以減少腳本迭代次數(shù)、腳本思考時(shí)間、腳本HTML請(qǐng)求。
LoadRunner
的web_url
函數(shù),模擬的是瀏覽器整個(gè)頁(yè)面。這樣讓頁(yè)面上凡是有依賴,都會(huì)去拉取,所有都拉取成功了,才進(jìn)行下一步。如果測(cè)試應(yīng)用開發(fā)為SSR
框架,同時(shí)框架里含有ISR
(客戶端渲染)優(yōu)化,那么性能測(cè)試并不能真正反映實(shí)際負(fù)載。
一個(gè)用戶的多次業(yè)務(wù)操作、多個(gè)用戶的少量業(yè)務(wù)操作、腳本運(yùn)行時(shí)間、本地機(jī)器的資源利用情況、HTML頁(yè)面請(qǐng)求是否有意義。都需要仔細(xì)去思考,來(lái)確定具體場(chǎng)景情況。
看到了所有Schedule
都停止了,代表性能測(cè)試結(jié)束了,最后就是性能測(cè)試報(bào)告。
在Controller
可以直接打開Analysis
像每秒點(diǎn)擊次數(shù)、事務(wù)摘要等等,都可以很清晰看到
LoadRunner
還有很多非常強(qiáng)大的功能實(shí)戰(zhàn),由于教程篇幅,需要各位自行探索啦。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-710989.html
最后,本性能測(cè)試結(jié)束。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-710989.html
到了這里,關(guān)于軟件測(cè)試 - 商城性能測(cè)試LoadRunner快速上手教學(xué)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!