理解LoadRunner中的區域性變數和全域性變數
阿新 • • 發佈:2020-10-19
以下內容均選自個人作品:《精通軟體效能測試與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 Web(HTTP/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()函式中,有兩個整型引數,a和b。incb()函式,實現了對全域性變數加一,而後,輸出全域性變數a和b。Action()中,先聲明瞭區域性變數a,並賦初值為10,接下來,輸出區域性變數a和全域性變數b,又通過呼叫incb()函式對全域性變數b進行加一,同事輸出a和b。這裡先給大家提一個問題,就是此時a的值應該輸出的是全域性變數a還是區域性變數a的值?請讀者朋友們認真考慮一下。後續還輸出max(a,b),這裡同樣存在上面的問題,最後輸出“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的值,則輸出值,為全域性變數的值。