1. 程式人生 > 實用技巧 >理解LoadRunner中的區域性變數和全域性變數

理解LoadRunner中的區域性變數和全域性變數

以下內容均選自個人作品:《精通軟體效能測試與LoadRunner實戰》 C語言中,變數有效性的範圍稱變數的作用域。不僅對於形參變數,C語言中所有的量都有自己的作用域,按作用域範圍不同,可分為區域性變數和全域性變數兩種變數型別。 LoadRunner中應用全域性變數和區域性變數的示例指令碼如下: <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
4.9 LoadRunner 9.5 WebHTTP/HTML)協議指令碼程式碼截圖 上面程式碼是在LoadRunner 9.5中編寫完成,請參見圖4.9左側,其包含一個檔名稱為“globals.h”,您可以在該標頭檔案中定義全域性變數,這裡我們定義了一個全域性整型變數,它的名稱為“icount”,初始值為10,請參見globals.h標頭檔案內容: #ifndef _GLOBALS_H #define _GLOBALS_H

//-------------------------------------------------------------------- // Include Files
#include "lrun.h" #include "web_api.h" #include "lrw_custom_body.h"

//-------------------------------------------------------------------- // Global Variables

int icount=10;//全域性變數

#endif // _GLOBALS_H

Action部分程式碼如下: int a=8,b=15; /*a,b為全域性變數*/

int max(int a,int b) /*a,b為區域性變數
*/
{ return a>b?a:b ; }

int incb() { ++b; lr_output_message("incb()函式中的a=%d,b=%d",a,b); }

Action() { int a=10;//區域性變數 lr_output_message("a=%d,b=%d",a,b); incb(); lr_output_message("a=%d,b=%d",a,b); lr_output_message("max(%d,%d)=%d",a,b,max(a,b)); lr_output_message("globals.h中的全域性變數icount=%d", icount); return 0; } Action部分,起始聲明瞭兩個整型全域性變數,a並賦予初值8,b賦予初值15。接下來,聲明瞭兩個整型數比較函式max(),max()函式中,有兩個整型引數,abincb()函式,實現了對全域性變數加一,而後,輸出全域性變數a和b。Action()中,先聲明瞭區域性變數a,並賦初值為10,接下來,輸出區域性變數a和全域性變數b,又通過呼叫incb()函式對全域性變數b進行加一,同事輸出a和b。這裡先給大家提一個問題,就是此時a的值應該輸出的是全域性變數a還是區域性變數a的值?請讀者朋友們認真考慮一下。後續還輸出maxab,這裡同樣存在上面的問題,最後輸出“globals.h”檔案中的全域性變數icount的值。 上面的指令碼執行結果如下: Running Vuser... Starting iteration 1. Starting action Action. Action.c(17): a=10,b=15 Action.c(11): incb()函式中的a=8,b=16 Action.c(19): a=10,b=16 Action.c(20): max(10,16)=16 Action.c(21): globals.h中的全域性變數icount=10 Ending action Action. Ending iteration 1. Ending Vuser... 根據執行結果,我們可以得出如下結論: 1. 全域性變數是在函式外部定義的變數,它不屬於哪一個函式,它屬於一個源程式檔案,其作用域是整個源程式。區域性變數是在函式內作定義說明的,其作用域僅限於函式內。 2. 當局部變數和全域性變數同名時,在區域性變數的作用範圍內,全域性變數不起作用,如在Action()函式部分,a的值為10,而非全域性變數8,這就回答了我們前面提的問題。當然,如果在該部分沒有宣告同名區域性變數,則輸出的內容為全域性變數的值,如:變數b和“globals.h”中的全域性變數icount的值,則輸出值,為全域性變數的值。