1. 程式人生 > >loadrunner指令碼編寫二

loadrunner指令碼編寫二

 今天有朋友問我,關於loadrunner指令碼編第二篇什麼時候寫,我告訴他都沒什麼東西了。要學習一門語言,基本的語法和思想很重要。現在每個人都識字,那是不是每個識字的人都可以當作家。不可能,因為大多數人沒有作家的思想。程式設計是一門藝術,我們可以把程式碼寫得很優美,而中國的程式設計師為什麼叫程式碼工人呢?國為國外的程式設計師在寫一篇優美的“散文”,中國的程式設計師在寫“說明文”。中國的程式設計師只是根據需求把一個產品通過語言描述清楚。

  扯遠了,最近變囉嗦了,呵呵!我想表達的意思就是行程式設計基本語法必須要記牢。程式的思想也很重要。因為我在程式設計上面也是個半調子。所以看我的文章也只能算回味一下語法了。

下面來回顧一下巢狀迴圈例子。

複製程式碼
Action()
{
    int  i,j;   //生命兩個變數
    for (i=1;i<=5;i++)   //第一重迴圈,迴圈5次
    {
        if (i==3)    
            break;   //當i等於3時,跳出本重迴圈
        else
             lr_output_message("i=%d",i);  //否則,輸入i的值

        for (j=1;j<=5;j++)  //第二重迴圈,迴圈5次
        {
            if (j==2)   
                
break; //當j等於2時,跳出本重迴圈 else lr_output_message("j=%d",j); //否則,輸入j的值 } } }
複製程式碼

上面的程式碼中我加了註釋,這裡就不用再解釋。

執行結果:

複製程式碼
Starting iteration 1.
Starting action Action.
Action.c(9): i=1
Action.c(16): j=1
Action.c(9): i=2
Action.c(16): j=1
Ending action Action.
Ending iteration 
1.
複製程式碼

函式                                                                                 

  函式,通常 一小段C語言程式僅有一個main()函式組成。然而,在實際編寫應用程式中,需要開發人員編寫大量的使用者自定交函式,不僅要在程式中定義函式本身,而且在主調函式模組中還必須對該被調函式進行型別說明,然後才能使用,與使用者自定義函式相對應的是函式庫,C語言整合開發環境(IDE)提供,我們只要呼叫就是行了。就就所謂前人種樹,後人乘涼,不然看似一個簡單的東西,尋其源頭來做,都是一個相當複雜的過程。

複製程式碼
void SsyHello()  //打招呼函式
{
    lr_output_message("hello %s",lr_get_host_name());
}

int GetBigger(int x,int y)  //得到最大值函式
{
    if (x>y) {
        return x;
    }
    else{
        return y;
    }

}

Action(){
    int x=10,y=20, result;   //宣告變數

    SsyHello();  //無形參,無返回值函式
    result = GetBigger(x,y);
    lr_output_message("GetBigger(%d,%d)=%d",x,y,result);  //帶形參,帶返回值函式

    return 0;
}
複製程式碼

上面的程式加註解了,簡單來說就是前面定義了兩個函式SsyHello() 和 GetBigger(),主函式Action()對前面兩個函式進行呼叫。

執行結果:

Starting iteration 1.
Starting action Action.
Action.c(4): hello 2011-20120624YO
Action.c(23): GetBigger(10,20)=20
Ending action Action.
Ending iteration 1.

動態儲存方式與靜態儲存方式                                               

  我們在定義變數是,根據定義的位置不同,分為全域性變數與區域性變數。我出生在一個叫“舞陽”的小縣城,在這個縣城中也有人名“舞陽”,前一個作用於整個縣城,後一個只作用於他個人。那麼從變數值的存在生存期角度,又可分為靜態儲存方式和動態儲存方式兩類。

靜態儲存方式:是指在程式執行期間分配固定的儲存空間方式。

動態儲存方式:是在程式執行期間根據需要進行動態的分配儲存空間的方式。

使用者儲存空間可分三部分:

1、程式區

2、靜態儲存區

3、動態儲存區

  全域性變數全部存放在靜態儲存區,在程式開始執行時給全域性變數分配儲存區,程式執行完畢就釋放,在程式執行過程中它們佔據固定的儲存單元,而不動態地進行分配和釋放。

   動態儲存區存放以下資料

(1)函式形式引數

(2)自動變數(未加static宣告的區域性變數)

(3)函式呼叫時的現場保護和返回地址

上面這些資料,在函式開始呼叫時分配動態空間,函式結果時釋放這些空間。

C語言中,每個變數和函式有兩個屬性:資料型別和資料的儲存類別

自動(auto)變數

函式中的區域性變數,如不專門的宣告為static儲存類別,都是動態地分配儲存空間的。

靜態(static)宣告區域性變數

有時希望函式中的區域性變數的值在函式呼叫結束後不消失而保留,這時就應該指定區域性變數為“靜態區域性變數”,用static關鍵字。

*  暫存器(register)變數

為了提高效率,C語言允許把區域性變數的值放在CPU中的暫存器中,這種變數叫“暫存器變數”,用關鍵字register變數。

複製程式碼
static int c;

int prime(register int number)   //判斷是否為素數
{
    register int flag=1;
    auto int n;
    for (n=2;n<number/2 && flag==1;n++) {
        if (number % n==0) flag=0;
    return(flag);    
        
    }
}

demo(int a)    //static、auto變數的演示函式
{
    auto int b=0;
    int d;
    static c=3;
    b=b+1;
    c=c+1;
    lr_output_message("demo()函式中的d=%d",d);
    lr_output_message("demo()函式中的static c=%d",c);
    return a+b+c;

}
Action(){
    int a=2,i;   //變數宣告

    for (i=0;i<3;i++) {
        lr_output_message("demo()函式部分第%d執行情況如下:",i+1);
        lr_output_message("函式demo執行結果為:%d",demo(a));
        lr_output_message("-------------------\n\r");
    }

    //判斷13是否為素數,並輸出提示資訊
    if (prime(13)==0)
        lr_output_message("13不是素數!");
    else
        lr_output_message("13是素數!");

    lr_output_message("c=%d",c);  //輸入變理的值

     
    return 0;
}
複製程式碼

  素數:指大於1的自然數,除了1和它本身不能被其它數整除的數。prime()函式部分主要用來判斷傳入的數是否是素數。

  demo()函式用來做staticauto型別的變數演示。Action()函式用於呼叫與輸入結果。

執行結果

複製程式碼
Starting iteration 1.
Starting action Action.
Action.c(31): demo()函式部分第1執行情況如下:
Action.c(22): demo()函式中的d=51446257
Action.c(23): demo()函式中的static c=4
Action.c(32): 函式demo執行結果為:7
Action.c(33): -------------------

Action.c(31): demo()函式部分第2執行情況如下:
Action.c(22): demo()函式中的d=51446257
Action.c(23): demo()函式中的static c=5
Action.c(32): 函式demo執行結果為:8
Action.c(33): -------------------

Action.c(31): demo()函式部分第3執行情況如下:
Action.c(22): demo()函式中的d=51446257
Action.c(23): demo()函式中的static c=6
Action.c(32): 函式demo執行結果為:9
Action.c(33): -------------------

Action.c(40): 13是素數!
Action.c(42): c=0
Ending action Action.
Ending iteration 1.
複製程式碼

指標                                                                                       

  指標是C語言中廣泛使用的一種資料型別,指標可以使我們的程式變得非常靈活,但也讓不少程式設計師頭痛,一不小心就會使程式出錯。

  指標一般指向一個函式或一個變數。在使用一個指標時,一個程式既可以直接使用這個指標所儲存的記憶體地址,又可以使用這個地址裡儲存的變數或函式的值。 

  有一本很厚小說,為了便於讀者找到某一段內容,我們會給某一段內容起一個小標題並標註上頁數。這樣找起來就非常方便了。那在記憶體中,小標題頁數就相當於記憶體單元的指標,具體的小說內容就是記憶體單元的內容。

複製程式碼
Action(){
    int score[5]={100,98,78,55};   //一維陣列
    int *p=score;         //一維陣列指標
    int sixnum[2][3]={{1,2,3},{4,5,6}};  //二維陣列
    int (*p1)[3];        //二維陣列指標
    int i,j;      //定義兩個變數

    for (i=0;i<=4;i++) {
        lr_output_message("score[%d]=%d",i,score[i]);  //以下標形式標識陣列
        lr_output_message("*(p++)=%d",*(p++));   //以指標方式輸出陣列
    }
    lr_output_message("--------------------------");

    p=score;
    for (i=0;i<=4;i++) {
        lr_output_message("score[%d]=%d",i,score[i]);  //以下標形式標識陣列
        lr_output_message("*(p+%d)=%d",*(p+i));   //以指標方式輸出陣列
    }
    lr_output_message("--------------------------");

    p1=sixnum;
    for (i=0;i<=1;i++) {
        for (j=0;j<=2;j++) {
             lr_output_message("sixnum[%d][%d]=%d",i,j,sixnum[i][j]);   //以下標形式標識陣列
             lr_output_message("*(*(p1+%d)+%d)=%d",*(*(p1+i)+j));  //以指標方式輸出陣列
        }

    }
    
    return 0;
}
複製程式碼

執行結果

複製程式碼
Starting iteration 1.
Starting action Action.
Action.c(11): score[0]=100
Action.c(12): *(p++)=100
Action.c(11): score[1]=98
Action.c(12): *(p++)=98
Action.c(11): score[2]=78
Action.c(12): *(p++)=78
Action.c(11): score[3]=55
Action.c(12): *(p++)=55
Action.c(11): score[4]=0
Action.c(12): *(p++)=0
Action.c(14): --------------------------
Action.c(18): score[0]=100
Action.c(19): *(p+100)=0
Action.c(18): score[1]=98
Action.c(19): *(p+98)=0
Action.c(18): score[2]=78
Action.c(19): *(p+78)=0
Action.c(18): score[3]=55
Action.c(19): *(p+55)=0
Action.c(18): score[4]=0
Action.c(19): *(p+0)=0
Action.c(21): --------------------------
Action.c(26): sixnum[0][0]=1
Action.c(27): *(*(p1+1)+0)=54385392
Action.c(26): sixnum[0][1]=2
Action.c(27): *(*(p1+2)+0)=54385392
Action.c(26): sixnum[0][2]=3
Action.c(27): *(*(p1+3)+0)=54385392
Action.c(26): sixnum[1][0]=4
Action.c(27): *(*(p1+4)+0)=54385392
Action.c(26): sixnum[1][1]=5
Action.c(27): *(*(p1+5)+0)=54385392
Action.c(26): sixnum[1][2]=6
Action.c(27): *(*(p1+6)+0)=54385392
Ending action Action.
Ending iteration 1.
複製程式碼

  本章節算做對C語言一些概念性知識的回味道吧。後面再寫關於loadrunner指令碼編寫的內容要根據實際意義一些指令碼進行分析。