【讀書筆記】《深入性能測試-LoadRunner性能測試》【第6章 腳本編寫】

文/秋之川

【目錄】

【上一章】

6.1 檢查點(diǎn)

6.1.1 插入檢查點(diǎn)的原因

以登錄場景為例挚冤,當(dāng)?shù)卿浭r,接口其實(shí)已經(jīng)返回了相應(yīng)的error code赞庶,可是因?yàn)槲覀冊?Vuser -> Run-Time Settings里的 Error Handling 里選中了 Continue on error训挡,所以雖然出錯了,但是登錄事務(wù)卻仍然執(zhí)行完成了歧强,再加上我們的事務(wù)結(jié)束函數(shù)里一般設(shè)置的是AUTO澜薄,如下:
lr_end_transaction("用戶登錄", LR_AUTO),因此系統(tǒng)仍然判定該事務(wù) PASS摊册。

所以我們需要手工增加返回值檢查肤京,否則場景運(yùn)行時的統(tǒng)計(jì)分析結(jié)果就完全錯了。

6.1.2 插入檢查點(diǎn)

我們可以把腳本視圖切為“Tree View”模式茅特,然后右鍵單擊需要插入檢查點(diǎn)的位置忘分,在右鍵菜單里選擇 Insert After... 或者 Insert Before...,但是我們在實(shí)際應(yīng)用中白修,都不是錄制腳本妒峦,而是直接寫,所以參見下節(jié)兵睛;

6.1.3 檢查點(diǎn)函數(shù)

web_find() 和 web_reg_find():
(1)前者是普通函數(shù)肯骇,后者是注冊函數(shù)窥浪;
(2)前者需要在 Run-Time Settings -> Internet Protocol -> Peferences 窗口勾選上 Enable image and text check 才可用,后者沒有這個限制笛丙;
(3)前者錄制時只能基于 HTML 模式錄制的腳本中漾脂,而后者沒有這個限制;
(4)前者是在返回頁面內(nèi)容顯示出來以后才能查找胚鸯,后者在緩存中查找骨稿;
(5)后者執(zhí)行效率比前者高;

6.1.4 通過檢查點(diǎn)判斷事務(wù)結(jié)束狀態(tài)

web_reg_find("Text=LR_Test", //設(shè)置需要查找的 String
? ?"SaveCount=apptype_count", ? //將查找到的次數(shù)存入該變量
LAST)

//lr_eval_string 函數(shù)讀取 apptype_count 的值是字符型姜钳,通過 atoi 轉(zhuǎn)換為整型啊终,才能跟 1 比較
if (atoi(lr_eval_string("{apptype_count}")) >= 1) {
? ? ? ?lr_end_transaction("myMerchantList",LR_PASS);
? ?}
else{
? ? ? ?lr_end_transaction("myMerchantList",LR_FAIL);
? ?}

6.2 Block(塊)技術(shù)

LoadRunner 如何在一個腳本中實(shí)現(xiàn)不同事務(wù)、不同次數(shù)的循環(huán)或不同百分比的循環(huán)呢傲须?


General: Run Logic

在某些復(fù)雜場景里蓝牲,你也許需要用到這樣的設(shè)置√┓恚可以在上面的對話框里設(shè)置例衍。你也能選中 Block,點(diǎn)擊 Properties 對話框已卸,去設(shè)置 Sequential 的次數(shù)或者 Random 的百分比佛玄。

目前,我在實(shí)際應(yīng)用中還未應(yīng)用到累澡。

6.3 參數(shù)化技術(shù)

腳本參數(shù)化梦抢,就是用參數(shù)去取代腳本里的常量。參數(shù)的來源可以是文本文件愧哟,也可以是數(shù)據(jù)庫奥吩。參數(shù)化的過程體現(xiàn)了數(shù)據(jù)驅(qū)動的思想,即將測試腳本與測試數(shù)據(jù)剝離開蕊梧。

6.3.1 參數(shù)化的原因及條件

原因:

(1)減小腳本的數(shù)量霞赫,如果寫死常量的話,那必須得復(fù)制并修改大量的腳本肥矢;
(2)模擬真實(shí)場景端衰,每個 Vuser 使用不同的參數(shù)值來模擬;

需要進(jìn)行參數(shù)化的一些情況:

(1)日期時間類的常量甘改;
(2)唯一性約束旅东。比如 User ID,Order ID 等在數(shù)據(jù)庫里被作為主鍵的十艾;
(3)數(shù)據(jù)約束抵代。指在測試過程中要求提交的業(yè)務(wù)數(shù)據(jù)必須是每次都不同,比如動態(tài) token疟羹;
(4)緩存數(shù)據(jù)約束主守。如果不參數(shù)化,每次查詢條件都用一樣的榄融,從數(shù)據(jù)庫里查詢到的結(jié)果也就是一致的参淫,所以系統(tǒng)就直接從緩存讀取了,而不需要從硬盤將數(shù)據(jù)讀到緩存愧杯。導(dǎo)致這樣測出來的時間不是真實(shí)的響應(yīng)時間涎才。

6.3.2 創(chuàng)建參數(shù)

選中需要被參數(shù)化的常量并右鍵單擊,選擇“Replace with a parameter”力九,打開“Select or Create Parameter”對話框


Select or Create Parameter

在上述對話框里設(shè)置成功一個參數(shù)后耍铜,會在腳本保存的根目錄下自動生成一個參數(shù)化文件(.dat)

這里需要注意兩點(diǎn):

(1)參數(shù)化文件可以與腳本分離,單獨(dú)保存在一個參數(shù)文件夾跌前,同一套腳本可以共用棕兼;
(2)如果多個參數(shù)是成組使用的話,可以合并成一個參數(shù)化文件抵乓;

6.3.3 參數(shù)類型屬性

常用的:

Date/Time / Random Number / File

注意:隨機(jī)數(shù)設(shè)置項(xiàng)里伴挚,顯示的格式也可以自定義,比如設(shè)成:%03lu灾炭,則表示不管隨機(jī)數(shù)為多少茎芋,都用3位來表示,如隨機(jī)數(shù)為3蜈出,那么顯示的結(jié)果為003田弥。

不常用的:
Group Name /?Iteration Number /?Load Generator Name / Unique Number / Vuser ID

6.3.4 數(shù)據(jù)文件


Parameter Properties

? ? 1. File path:Browser 設(shè)置
? ? 用來選擇參數(shù)文件的路徑,需要注意的是铡原,默認(rèn)參數(shù)化時文件是保存在腳本根目錄下的偷厦,但如果單獨(dú)放到參數(shù)化文件夾下了,就需要選擇參數(shù)的路徑燕刻。不過在實(shí)際應(yīng)用中沪哺,建議將 File path 設(shè)置為相對路徑,將腳本的根目錄用“.”來代替酌儒。

? ? 2. Edit with Notepad 設(shè)置
? ? 記事本打開后辜妓,內(nèi)容中第一行是參數(shù)名稱,第二行是參數(shù)的初始值忌怎。參數(shù)之間用逗號隔開籍滴。你也可以直接用 UltraEdit 或 Notepad++ 打開.dat文件編輯。

? ? 3. Select column 設(shè)置
? ? 指明參數(shù)選擇的列榴啸,實(shí)際應(yīng)用中建議用 By name孽惰,直觀不易選錯。

? ? 4.File Format - Column 設(shè)置
? ? 參數(shù)列一般用默認(rèn)的逗號作為分隔符鸥印,也可以選擇 Tab 或 空格分隔勋功。

? ? 5.File Format - First data 設(shè)置
? ? 設(shè)置成N坦报,就從列標(biāo)題后的第 N 行開始執(zhí)行。

? ? 6. Select next row 設(shè)置
? ? 針對 Controller 運(yùn)行時的 Vuser狂鞋,決定 Vuser 選擇參數(shù)的過程片择。
? ? ? ? (1)順序 Sequential。如果參數(shù)化文件中的數(shù)據(jù)都執(zhí)行了一遍骚揍,則返回到第一行繼續(xù)執(zhí)行字管。
? ? ? ? (2)隨機(jī) Random。隨機(jī)讀取參數(shù)數(shù)據(jù)信不。
? ? ? ? (3)唯一 Unique嘲叔。分配一個唯一的有順序的值給每個 Vuser 作為參數(shù)。
? ? ? ? ? ? 當(dāng)選中了 Unique 時抽活,下面兩個選項(xiàng)變?yōu)榭捎脿顟B(tài):
? ? ? ? ? ? ? ?3.1 ?When out of values:表示當(dāng)參數(shù)不夠時的3種處理方式:
? ? ? ? ? ? ? ? ? ?3.1.1 Abort Vuser:忽略剩下的所有 Vuser 不再運(yùn)行
? ? ? ? ? ? ? ? ? ?3.1.2 Continue in a cyclic manner:將參數(shù)繼續(xù)循環(huán)一次硫戈,Vuser 按順序參數(shù)進(jìn)行迭代
? ? ? ? ? ? ? ? ? ?3.1.3 Continue with last value:一直使用最后一個數(shù)據(jù)進(jìn)行后面的迭代
? ? ? ? ? ? ? ? 3.2 Allocate Vuser values in the Controller:指在 Controller 運(yùn)行時,2種分配參數(shù)的方式:
? ? ? ? ? ? ? ? ? ? 3.2.1 Automatically allocate block size:由 LoadRunner 自動分配每個 Vuser 使用的參數(shù)情況
? ? ? ? ? ? ? ? ? ? 3.2.2 Allocate XXX values for each Vuser:為每個 Vuser 分析所設(shè)置的虛擬用戶下硕。

? ? ? ? (4)Same link as ***:與某個已定義好的參數(shù)取同一行值掏愁。要求至少其中的一個參數(shù)必須是 Sequential、Random 或 Unique卵牍。
? ? ? ? (5)Update value on 設(shè)置:設(shè)置腳本迭代過程中取值的策略果港,可以在調(diào)試腳本的日志中查看表現(xiàn)。
? ? ? ? ? ? ? 5.1 Each iteration:在同一個迭代過程中糊昙,不管同一個參數(shù)出現(xiàn)多少次辛掠,都只使用同一個值。實(shí)際應(yīng)用中要注意释牺,經(jīng)常會沒選這個值萝衩,導(dǎo)致同一個 Action 里上下午接口出錯;
? ? ? ? ? ? ? 5.2 Each occurrence:每次迭代的過程中没咙,參數(shù)的值都會更新猩谊;
? ? ? ? ? ? ? 5.3 Once:同一個 Vuser 中一直取同一個值,表中其他的數(shù)據(jù)不參與迭代過程祭刚。

6.3.5 導(dǎo)入數(shù)據(jù)

LoadRunner 允許利用參數(shù)化從數(shù)據(jù)庫里導(dǎo)入數(shù)據(jù)牌捷,提供了兩種方式:Microsoft Query 和 指定數(shù)據(jù)庫連接字符串和 SQL 語句,后者在我的實(shí)際應(yīng)用中較多涡驮。

(1)在 Parameter Properties 對話框點(diǎn)擊 Data Wizard 按鈕暗甥,則會打開下面的對話框;

Database Query Wizard

(2)打開創(chuàng)建新數(shù)據(jù)源對話框:


創(chuàng)建新數(shù)據(jù)源

(3)現(xiàn)在本機(jī)安裝 mysql-connector-odbc-3.51.20-win32捉捅,在下面的驅(qū)動程序列表里就能看到對應(yīng)的 MySQL ODBC 3.51 Driver撤防。


MySQL ODBC 3.5.1 Driver

(4)輸入相應(yīng)的 DB server IP,正確的用戶名和密碼棒口,就能在 Database 下拉列表里看到相應(yīng)的數(shù)據(jù)庫寄月。


DB Information

(5)數(shù)據(jù)源建立成功后辜膝,可以在選擇數(shù)據(jù)源對話框選擇你創(chuàng)建的數(shù)據(jù)源,然后在下面對話框里的“SQL statement” 編輯框里輸入你要查詢數(shù)據(jù)的 SQL漾肮,點(diǎn)擊 Finish厂抖。再稍等片刻(取決于你查詢數(shù)據(jù)量的大小)初橘,就能在參數(shù)化文件里看到相應(yīng)的數(shù)據(jù)了。


Specify SQL statement

6.4 關(guān)聯(lián)技術(shù)

LoadRunner 中的關(guān)聯(lián)技術(shù)一直以來是我不太理解充岛,為什么要跟參數(shù)化分開來看保檐。按我個人的理解:“關(guān)聯(lián)”其實(shí)可以看做參數(shù)化的動態(tài)賦值方法。上一節(jié)中說的是在腳本執(zhí)行前給某個參數(shù)預(yù)先賦值崔梗,而“關(guān)聯(lián)”可以說就是在腳本執(zhí)行時夜只,動態(tài)從服務(wù)端獲取到值,再賦予某個參數(shù)蒜魄。

好了扔亥,以上是我個人的疑惑和不解。我們還是先回到書上吧谈为。

6.4.1 關(guān)聯(lián)的原理

關(guān)聯(lián)(Correlation)是把腳本中某些寫死的數(shù)據(jù)(hard-coded)轉(zhuǎn)變成取自服務(wù)器返回的旅挤、動態(tài)的、每次都不一樣的數(shù)據(jù)伞鲫。常用關(guān)聯(lián)技術(shù):錄制中關(guān)聯(lián)粘茄、錄制后關(guān)聯(lián)和手動關(guān)聯(lián)。

LoadRunner 關(guān)聯(lián)是通過左右邊界值來查找服務(wù)器返回給客戶端的值秕脓。

6.4.2 手動關(guān)聯(lián)

我在應(yīng)用中只使用手動關(guān)聯(lián)柒瓣,因?yàn)楸容^靈活快捷。常用的關(guān)聯(lián)函數(shù):

? ? web_reg_save_param("userid",? //創(chuàng)建變量名稱吠架。將
? ? ? ? "LB=\"userId\":\"",? //需要獲取到的動態(tài)值的左邊界值
? ? ? ? "RB=\",", //需要獲取到的動態(tài)值的右邊界值
? ? ? ? "Search=Body", //指定在Body 緩沖區(qū)中查找
? ? ? ? "ORD=ALL", //不填及默認(rèn)值為1芙贫,指查找待匹配的內(nèi)容第一次出現(xiàn)時,就保存到變量里傍药。設(shè)為All 時磺平,是將所有符合條件的值保存在一個數(shù)組里。
? ? LAST); //結(jié)束參數(shù)的標(biāo)志



正則表達(dá)式

理論上關(guān)聯(lián)與參數(shù)化的區(qū)別:

(1)數(shù)據(jù)處理方式不同拐辽,參數(shù)化的數(shù)據(jù)是由客戶端向服務(wù)器提交的褪秀,而關(guān)聯(lián)是需要獲取服務(wù)器返回客戶端的數(shù)據(jù)。
(2)處理的數(shù)據(jù)是否確定薛训,參數(shù)化數(shù)據(jù)是測試工程師知道的媒吗,而關(guān)聯(lián)數(shù)據(jù)的內(nèi)容是不清楚的。

【下一章】

【目錄】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乙埃,一起剝皮案震驚了整個濱河市闸英,隨后出現(xiàn)的幾起案子锯岖,更是在濱河造成了極大的恐慌,老刑警劉巖甫何,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件出吹,死亡現(xiàn)場離奇詭異,居然都是意外死亡辙喂,警方通過查閱死者的電腦和手機(jī)捶牢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巍耗,“玉大人秋麸,你說我怎么就攤上這事【嫣” “怎么了灸蟆?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長亲族。 經(jīng)常有香客問我炒考,道長,這世上最難降的妖魔是什么霎迫? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任斋枢,我火速辦了婚禮,結(jié)果婚禮上知给,老公的妹妹穿的比我還像新娘杏慰。我一直安慰自己,他們只是感情好炼鞠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布缘滥。 她就那樣靜靜地躺著,像睡著了一般谒主。 火紅的嫁衣襯著肌膚如雪朝扼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天霎肯,我揣著相機(jī)與錄音擎颖,去河邊找鬼。 笑死观游,一個胖子當(dāng)著我的面吹牛搂捧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播懂缕,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼允跑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起聋丝,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤索烹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后弱睦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體莽使,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衔憨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了明也。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汪榔。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡悦荒,死狀恐怖春锋,靈堂內(nèi)的尸體忽然破棺而出睬涧,到底是詐尸還是另有隱情,我是刑警寧澤矗晃,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布仑嗅,位于F島的核電站宴倍,受9級特大地震影響张症,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鸵贬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一俗他、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧阔逼,春花似錦兆衅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至危融,卻和暖如春畏铆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吉殃。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工辞居, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛋勺。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓瓦灶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親抱完。 傳聞我的和親對象是個殘疾皇子贼陶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一:LoadRunner常見問題整理1.LR 腳本為空的解決方法:1.去掉ie設(shè)置中的第三方支持取消掉2.在系統(tǒng)屬...
    0100閱讀 4,128評論 0 11
  • VU——用戶行為的模擬器2 LoadRunner之所以強(qiáng)大,很大原因是VU的功能強(qiáng)大。VU幾乎支持模擬當(dāng)今所有主流...
    WinterM9閱讀 964評論 0 1
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 10,984評論 6 13
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理每界,服務(wù)發(fā)現(xiàn)捅僵,斷路器,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • 一 白衣 王母的瑤池邊上眨层,飛來一只仙鶴庙楚,那仙鶴將近池面,...
    市井清流閱讀 368評論 0 0