天天看點

滲透分支寫腳本_性能測試腳本編寫之一

滲透分支寫腳本_性能測試腳本編寫之一

》》》推薦閱讀《《《

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、性能測試-性能調優之二

滲透分支寫腳本_性能測試腳本編寫之一