》》》推薦閱讀《《《
1、性能測試學習筆記-場景設計
2、性能測試的重要意義
3、性能分析流程及方法
4、應用系統性能調優之性能分析
性能測試工程師要懂代碼麼?答案是必須的。好多測試員認為在loadrunner中編寫腳本很難很牛X ,主要是大多測試人員并未做過開發工作,大學的那點程式基礎也忘記的差不多了。還有非計算機專業出身的測試員,是以對代碼都比較望而生畏。
好多人認為loadrunner隻支援C語言(包括我之前也一直這麼認為),因為loadrunner預設的腳本是C語言的,其實它支援目前所有主流的語言,如:Java User、VB User、VB script User 、Javascript User、Mmicrosoft .NET等,總有一款适合你的吧,最起碼C語言是必修課吧。
對于編寫loadrunner腳本的态度
現在有一輛自行車放在你的面前,你為顯示自己體力很好,每天走路去上班。我騎車隻要半小時,而你走路卻要2小時,我們的目的是一樣的,你是為了讓人說你牛呢,還是讓人說你傻呢?當然自行車不是萬能的,比如,上班的地點在山上,自行車根本上不去,自然走路就是唯一的選擇了。
是以,對于loadrunner腳本,能錄制的部分就錄制改,不能錄制的就手寫,但前提是我們要會寫腳本。
認識loadrunner腳本
Loadrunner自帶了一個小飛機訂票系統
我們先啟動 Start Web server 服務,如果啟動成功,桌面右下角會有一個綠色的X ,然後打開浏覽器通路
http://127.0.0.1:1080/WebTours/ 下面是我們loadrunner錄制一個登入過程。
Action()
{
web_url("WebTours",
"URL=http://127.0.0.1:1080/WebTours/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
lr_rendezvous("集合點");
lr_start_transaction("登陸時間");
web_submit_form("login.pl",
"Snapshot=t2.inf",
ITEMDATA,
"Name=username", "Value=test1", ENDITEM,
"Name=password", "Value=123456", ENDITEM,
"Name=login.x", "Value=59", ENDITEM,
"Name=login.y", "Value=5", ENDITEM,
LAST);
lr_end_sub_transaction("登陸時間",LR_ABORT);
return 0;
}
上面的代碼中有大括号“{}”,傳回函數“ return ”,如果你有程式設計基礎的不會說對于上面的代碼一點都看不懂。隻是上面的腳本沒有使用我們平時用到的東西,如定義常量、變量,分支(if....else if....)、循環語句(for...)
下面我們動手寫個小程式,一個乘法運算,求員工工資的總合。
#define COUNT 100
#define SALARY 4000
Action()
{
int total;
total = COUNT * SALARY;
lr_output_message("100人合計薪資支出為:%d",total);
return 0 ;
}
#define COUNT 100
#define SALARY 4000 定義一個全局常量。
lr_output_message 輸出語句,這個和我們所學的C 語言不一樣,在C中我們會用println 來輸入結果。
運作結果:
..........
Starting iteration 1.
Starting action Action.
Action.c(9): 100人合計薪資支出為:400000 ----這裡将運作結果列印輸出
Ending action Action.
Ending iteration 1.
..........
一個有意思的小程式
當然了,上面的程式太雞肋了,我隻是想表達,loadrunner 也可以運作我們上學時學的那些普通的小程式。他們是一樣一樣的。
下面看個比較有意思的小程式,通過随機數和分支(選擇)語句switch來完成
Action()
{
int randomnumber;
randomnumber = rand() % 3+1;
switch (randomnumber) {
case 1:
{
lr_rendezvous("通路百度集合點");
web_url("www.baidu.com",
"URL=http://www.baidu.com/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t12.inf",
"Mode=HTML",
EXTRARES,
"Url=http://s1.bdstatic.com/r/www/img/i-1.0.0.png", ENDITEM,
"Url=/favicon.ico", "Referer=", ENDITEM,
"Url=http://s1.bdstatic.com/r/www/img/bg-1.0.0.gif", ENDITEM,
LAST);
return 0;
}
case 2:
{
lr_rendezvous("通路谷歌集合點");
web_url("www.google.com.hk",
"URL=http://www.google.com.hk/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t10.inf",
"Mode=HTML",
EXTRARES,
"Url=http://ssl.gstatic.com/gb/images/b_8d5afc09.png", ENDITEM,
"Url=/images/srpr/logo3w.png", ENDITEM,
"Url=/extern_chrome/749e1ce3c3e5f171.js", ENDITEM,
"Url=/images/swxa.gif", ENDITEM,
"Url=/favicon.ico", "Referer=", ENDITEM,
"Url=http://ssl.gstatic.com/gb/js/sem_0e1289051da7e9e3697c2025d9490acd.js", ENDITEM,
"Url=http://www.google.com/textinputassistant/tia.png", ENDITEM,
LAST);
return 0;
}
case 3:
{
lr_rendezvous("通路有道集合點");
web_url("www.youdao.com",
"URL=http://www.youdao.com/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t7.inf",
"Mode=HTML",
EXTRARES,
"Url=http://shared.ydstatic.com/oxo/p/pic.gif", ENDITEM,
"Url=http://shared.ydstatic.com/oxo/p/logo.png?1", ENDITEM,
"Url=http://shared.ydstatic.com/oxo/p/nv_line.gif", ENDITEM,
"Url=http://shared.ydstatic.com/r/2.0/p/pic.gif", ENDITEM,
LAST);
return 0;
}
}
}
上面的程式,我分别錄制了百度、谷歌、有道通路三個網的首頁的代碼,我想在運作腳本時,随機的去通路其中一個網站,如何做呢?我們通過随機函數,随機出1~3之間的整數,根據随機來的結果,然後執行switch語句中的代碼。
下面來看我的結果
為了檢視腳本結果更清晰,我在每一段腳本前面加了一個集合點“lr_rendezvous”函數。
Starting iteration 1.
Starting action Action.
Action.c(57): Rendezvous 通路有道集合點
Action.c(59): Downloading resource "http://shared.ydstatic.com/oxo/p/pic.gif" (specified by argument number 9) [MsgId: MMSG-26577]
Action.c(59): Downloading resource "http://shared.ydstatic.com/oxo/p/logo.png?1" (specified by argument number 11) [MsgId: MMSG-26577]
Action.c(59): Downloading resource "http://shared.ydstatic.com/oxo/p/nv_line.gif" (specified by argument number 13) [MsgId: MMSG-26577]
Action.c(59): Downloading resource "http://shared.ydstatic.com/r/2.0/p/pic.gif" (specified by argument number 15) [MsgId: MMSG-26577]
Action.c(59): Found resource "http://shared.ydstatic.com/dao/search/outweb/js/yd.js?201207131" in HTML "http://www.youdao.com/" [MsgId: MMSG-26659]
Action.c(59): Found resource "http://shared.ydstatic.com/dao/search/outweb/js/nav.js?201207131" in HTML "http://www.youdao.com/" [MsgId: MMSG-26659]
Action.c(59): Found resource "http://shared.ydstatic.com/dao/search/outweb/js/suggest.js?201207131" in HTML "http://www.youdao.com/" [MsgId: MMSG-26659]
Action.c(59): web_url("www.youdao.com") was successful, 30006 body bytes, 3347 header bytes, 39 chunking overhead bytes [MsgId: MMSG-26385]
Ending action Action.
Ending iteration 1.
通過腳本讀取檔案
為了增加語言的強大,進階語言不可以把一個程式的實作從頭到尾寫到檔案裡,這樣可讀性和維護很差,也無法實作團隊發,肯定會互相調用接口函數庫等。當然,讀取檔案也是常用的操作,下面我們來看一個讀取檔案的例子。
我們事先準備一個檔案test.txt ,裡面随便你輸入些什麼内容吧!
Action()
{
int count,total=0;
char buffer [50];
long file_stream;
char * filename = "C:\\test.txt"; //讀取檔案的存放位置
//判斷是否可以讀取檔案
if((file_stream =fopen(filename,"r"))==NULL)
{
lr_error_message("不能打開%s檔案!",filename);
return -1;
}
while(!feof(file_stream))
{
count=fread(buffer,sizeof(char),50,file_stream); //從檔案中讀取50個字元
total=total+count; //字元個數計數
if(total>=50)
{
fclose(file_stream); //關閉檔案
lr_output_message("檔案的前50字元:%s",buffer);
break; //退出循環
}
}
return 0;
}
上面的代碼中我加了注釋,這裡沒必須再做解釋。
下面來看我的運作結果:
Starting iteration 1.
Starting action Action.
Action.c(24): 檔案的前50字元:01234567890123456789012345678901234567890123456789
Ending action Action.
Ending iteration 1.
loadrunner難麼?我們所要做的就是熟悉loadrunner的常用函數。
》》》推薦閱讀《《《
1、性能測試學習筆記-場景設計
2、Web站點性能調優完全攻略
3、應用系統性能調優之性能分析
4、Windows監控——性能名額詳解
6、性能測試的重要意義
7、軟體性能測試的本質_緻命版
8、性能分析流程及方法
9、性能測試流程
10、性能測試從需求分析開始
11、性能測試名額
12、雙活資料中心揭秘之—DB2 PureScale
13、循序漸進學習oracle
14、軟體項目管理中的十個誤區
15、功能測試方法總結及常見面試問題
16、MQ來賬通道及隊列配置
17、Linux指令大全整理
18、JMeter工具簡單介紹
19、性能瓶頸分析方法
20、性能測試-LoadRunner操作流程之一
22、性能測試-LoadRunner操作流程之二
23、性能測試-LoadRunner操作流程之三
24、性能測試-腳本編寫之一
25、性能測試-腳本編寫之二
26、性能測試-腳本編寫之三
27、性能測試-性能調優之一
28、性能測試-性能調優之二