一、錄制時腳本為空的解決辦法
使用SilkPerformer最常見的問題是在用錄制時,錄制不上內容,Functions數始終為0,腳本為空。
1. 檢查注冊表中的Key: HKEY_LOCAL_MACHINE | SOFTWARE | Microsoft |
Windows NT | CurrentVersion | Windows | AppInit_DLLs ,其值應為:qaphooks.dll。如果在qaphooks.dll后面有逗號或者空格,必須刪除逗號或空格。
2. 檢查注冊表中的Key: HKEY_CURRENT_USER | SOFTWARE | Microsoft |
Windows | CurrentVersion | Explorer | BrowseNewProcess,其值應為:yes。
3. 檢查注冊表中的Key: HKEY_LOCAL_MACHINE | SOFTWARE | Microsoft |
Windows | CurrentVersion | Explorer | BrowseNewProcess,其值應為:yes。
4. 如果修改注冊表的上述項后,function還一直為0,再檢查SilkPerformer的profile或proxy設置:
1)打開SilkPerformer,選擇Settings | System | Recorder | Application Profiles ;
2)編輯您所使用的瀏覽器設置;
3)在protocol selection區內,確保Web的checkbox是選中的,然后選擇“Web Settings”按鈕;
4)確保Winsock的選項是W2_32.dll。
二、與Oracle、LoadRunner端口沖突的解決辦法
在裝了Oracle或LoadRunner的機器上安裝SilkPerformer,會造成SilkPerformer與Oracle、LoadRunner通信端口沖突,Oracle XDB(XML數據庫)Http服務的默認端口是8080,而SilkPerformer腳本記錄器的http協議監聽端口也默認的是8080。解決此端口沖突的方法有兩種,一是更改Oracle XDB Http服務的端口;另一種方法就是更改SilkPerformer腳本記錄器的Http協議監聽端口。下面就簡要介紹如何更改SilkPerformer腳本記錄器的http協議監聽端口。
1)打開SilkPerformer,選擇Settings | System | Recorder | Proxies ;
2)選擇HTTP協議,點“Edit”按鈕編輯其設置;
3)把“listen port”編輯框中默認的8080,改為其它端口值就可以了,如18080。
安裝了LoadRunner的機器會占用端口1080,而SilkPerformer腳本記錄器的Socks協議監聽端口也默認的是1080。解決此端口沖突的方法與上面相同。 [Page]
三、應用登錄問題
在很多客戶的應用中不允許同一個用戶登錄多次,那么如果需要在登錄這個業務點上加壓的話,就必需對登錄的用戶名和密碼進行參數化。但是僅僅做了參數化還是不夠的,因為如果讓SilkPerformer的腳本在執行過程中自己去隨機的取用戶名和密碼時,還是有可能會取到同一個用戶名和密碼,這樣就沖突了,所以還必需要添加一些限制。
FileCSVLoadGlobal(hfile, csvFile, \",\"); //導入參數化文件
FileGetRow(hfile, GetUserId()); //根據虛擬用戶的ID來取參數化的數據
sAccountName:=FileGetCol (hfile, 1, 10);//取數據的第一列
sPassword:=FileGetCol (hfile, 2, 10); //取數據的第二列
如果在第二行里面使用FileGetRndRow(hfile)函數,隨機的在參數化文件里取數的話,當并發量大的時候,難免會造成取數沖突。所以在這里,用了GetUserId()來制定了那一個虛擬用戶用那一個用戶名和密碼登錄,這樣就不存在沖突的問題了。
四、插入數據的問題
在壓力測試中,用戶測試用例中經常會有增加數據這樣的業務。所以對插入數據的主鍵要進行必要的定制,不然加壓時插入同一條數據,肯定是會出錯的。但是插入數據的主鍵值又分為兩種,一種是服務器端自動生成的,一種是客戶端自己輸入的。對于后一種就必需對數據進行處理。
在silkPerformer中有幾個函數可以幫助我們處理這樣的業務:
GlobalVarSet(in sVariable : string,
in nValue : number,
in nTimeout : number optional): boolean;
這個函數用來設定一個全局變量的值。
GlobalVarInc(in sVariable : string,
in nInc : number,
out nValue : number,
in nTimeout : number optional) : boolean;
此函數用來給這個全局變量遞增。
GlobalVarGet(in sVariable : string,
out nValue : number,
in nTimeout : number optional) : boolean;
這個函數用于從全局變量中取數值。
GlobalVarSet(\"CustID1\", 40000);
GlobalVarInc(\"CustID1\",1,nCustID);
sCustID : = \"2300\" + string(nCustID);
從上面三行代碼,我們可以看到,把主鍵的值sCustID不斷的遞增了,從而保證主鍵的唯一。
文章來源于領測軟件測試網 http://www.anti-gravitydesign.com/