http://www.ltesting.net/html/23/category-catid-123.html SilkPerformer學習網站
SilkPerformer7.2參數化范例
*****股份有限公司
2006年9月
關于本文檔
文檔信息
文檔名稱 SilkPerformer7.2參數化范例
作者 測試組
說明 本文檔提供給*****內部項目組使用
文件名稱 SilkPerformer7.2參數化范例.doc
修訂歷史 (REVISION HISTORY)
Rev Section Type Date Author Remarks
1.0 全部 創建 2006-9-25 Zhangsx
目的與范圍
對SilkPerformer的參數化的方法和過程進行闡述,以便靈活的運用測試腳本
適用的對象
本文檔僅適用于*****股份有限公司的管理者,測試者閱讀。
SilkPerformer7.2參數化范例
范例介紹:
在本實驗中我們將介紹如何使用SilkPerformer 提供的功能進行參數化
實驗目標:
學會如何使用SilkPerformer對腳本進行參數化
參數化的分類
一、常量(有兩種方式實現)
1) 在測試腳本的全局變量定義部分(dclparam)加上如下代碼:? const cpara :="this is constvalue"; //定義一個常量可以是整型、布爾型、浮點型或字符串類型,或者在一個事務過程中定義常量,定義的方法相同,只是他們的作用域不同而已,全局的在當前腳本中所有的事務中都能被引用,而局部常量只能在定義他所在的事務中才可以使用,其他事務中不能引用。
2) 通過點擊Script->create new parameter, 彈出參數化的向導,如下圖所示
選擇常量的數據類型后點“下一步”
進入如下畫面
輸入常量名與值后點擊完成,常量參數化結束,只要在要用到該值得地方用name替換即可,生成的腳本參見附表。
二、變量
1) 變量的定義與常量的定義類似,通過var來定義,只要在腳本中加入如下代碼:var? bValue2: boolean;//定義了一個變量,變量也可以是全局或局部的,與常量的差別就是變量在引用過程中可以被改變而常量不能。
2) 通過點擊Script->create new parameter, 彈出參數化的向導,定義隨機變量,如下圖所示。
點擊Next >進入如下畫面
? 選擇隨機變量的數據類型之后點“下一步”,進入如下畫面
?
為隨機變量命名,限定隨機取值的范圍后,點擊“下一步”,進入如下畫面
選擇運用類型后,點擊完成,結束隨機變量參數化過程。
三、從文件中讀取
(一) 、Parameter from Random varia
1) 在測試過程中有許多地方需要批量的數據,而且必須保證每個用戶所使用的數值都是唯一的,有的是因為數據庫中主健約束的原因,有的是為了保證數據一致性,系統控制不允許進行并發操作(例如:終端業務系統在理賠流轉中,一但一個任務被接收了,就不允許其他用戶再次接收處理了),首先選擇需要參數化的值右擊鼠標,在彈出菜單中選擇Customize Value???????
2) 彈出如下對話框?
??
這里有三種參數類型供選擇:Constant value—將參數化一個常量;Parameter from Random Varia—指從一個隨機變量中取值(例如設定最大值最小值,在這個范圍內隨機取值);Parameter from Multi-column datafile—從數據文件中取值(有多列值,可選取讀取文件中的某列),在這里我們選擇第二個,點next >
????????????
3) 進入如下畫面
選擇參數化變量的類型,有字符串,整型,浮點型等,在這里我們選擇從文件中讀取即String from file,點擊下一步
4) 進入如下畫面定義變量名稱及變量的值
Order單選鈕決定了取值時的規則是隨機的還是順序的,可以點擊Show Preview查看添加的代碼,保存后點擊“下一步”
5) 進入如下畫面
選擇運用的類型:有三個共選擇:
? Per usage—每個用戶每使用一次時重新獲取一個隨機值,若取數規則是順序的(sequential),則所有虛擬用戶都從第一個值開始取,循環取值。例如數據文件中有值依次為:a1,a2,a3,三個虛擬用戶:Vu1,Vu2,Vu3并發時運行一次Tmain,取得值都是a1,第二次都是a2
? Per Transaction—每運行一次Tmain重新獲取一個隨機值,一個用戶可以獲取不同值,取數方式與 Per usage的相同
? Per Test—每個用戶在一個壓力測試期內只隨機取一次值,只對應一值,若取數規則是順序的(sequential),則所有虛擬用戶始終取的是第一個值。例如數據文件中有值依次為:a1,a2,a3,三個虛擬用戶:Vu1,Vu2,Vu3并發時運行始終都取a1
點擊完成,完成參數化向導,生成的代碼參見附表。
即使是這樣也不能達到我們的要求,因為多個用戶并發操作時還是有可能取到同一值的,接下來介紹一下第三種參數化類型:
(二) 、Parameter from Multi-column datafile
1) 首先選擇需要參數化的值右擊鼠標,在彈出菜單中選擇Customize Value
2) 進入如下畫面
選擇Parameter from Multi-column點next >
3) 進入如下畫面
4) 在此可以新建一個數據文件,給參數命名,給數據文件填充值選擇其中的一列點擊下一步(注意:只有選中某列后下一步Button才可用)
5) 進入如下畫面
在此可以選擇取值時是隨機的(Random)還是順序(sequential)以及運用類型:
? Per Transaction—每執行一次Tmain重新取一次值,例如:若取數規則是順序的(sequential)則運行一次Tmain則重新取一次值(這種方式循環取值可保證并發取值時的唯一性),數據文件有值a1,a2,a3,a4三個虛擬用戶并發:Vu1,Vu2,Vu3,都運行一個Tmain分別是a1,a2,a3,都運行第二個Tmain時,Vu1,Vu2,Vu3對應的取值是a4,a1,a2。
? Per Test—每一次測試每個用戶只取一個值,例如:若取數規則是順序的則每一次測試每個用戶只取一個值,按照取值順序,順序取值,若數據文件中的值得數目<并發用戶數,則并發取值時不能保證唯一性,需保證數據文件中的值得數目>并發用戶數,數據文件有值:a1,a2,a3,a4 三個虛擬用戶并發:Vu1,Vu2,Vu3,在一個壓力測試期內Vu1始終取a1,Vu2始終取a2,Vu3始終取a3
點擊完成,完成此次參數化,生成腳本參見附表,往往不僅要控制并發時取數不沖突,而且還要確保每一個值只能被一個用戶使用(在很多客戶的應用中不允許同一個用戶登錄多次,例如Itest,那么如果需要在登錄這個業務點上加壓的話,就必需對登錄的用戶名和密碼進行參數化。但是僅僅做了參數化還是不夠的,因為如果讓SilkPerformer的腳本在執行過程中自己去隨機的取用戶名和密碼或循環取值時,還是有可能會取到同一個用戶名和密碼,這樣就沖突了,所以還必需要添加一些限制。),除了上述的Per? Test運行模式可以達到這種效果之外,還可以通過silkperformer提供的函數來實現:
FileCSVLoadGlobal(hfile, csvFile, ","); //導入參數化文件
???? FileGetRow(hfile, GetUserId());?????????? //根據虛擬用戶的ID來取參數化的數據
???? sAccountName:=FileGetCol (hfile, 1, 10);//取數據的第一列?
???? sPassword:=FileGetCol (hfile, 2, 10);??? //取數據的第二列
如果在第二行里面使用FileGetRndRow(hfile)函數,隨機的在參數化文件里取數的話,當并發量大的時候,難免會造成取數沖突。所以在這里,用了GetUserId()來制定了哪一個虛擬用戶用哪一個用戶名和密碼登錄,這樣就不存在沖突的問題了。
SilkPerformer使用點滴
一、錄制時腳本為空的解決辦法
使用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)編輯您所使用的neterm或瀏覽器設置;
3)在protocol selection區內,確保Tcp/ip或Web的checkbox是選中的,然后選擇“Web Settings”按鈕;
4)確保Winsock的選項是Wsock32.dll或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。解決此端口沖突的方法與上面相同。
三、插入數據的問題
在壓力測試中,用戶測試用例中經常會有增加數據這樣的業務。所以對插入數據的主鍵要進行必要的定制,不然加壓時插入同一條數據,肯定是會出錯的。但是插入數據的主鍵值又分為兩種,一種是服務器端自動生成的,一種是客戶端自己輸入的。對于后一種就必需對數據進行處理。
在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不斷的遞增了,從而保證主鍵的唯一。
四、參數化選擇Tmain、Tinit的區別
Tmain只保證每次執行Tmain時重新取的數據不沖突,可循環取,而Tinit每個虛擬用戶只運行一次,而且當數據文件中的值足夠多時還能能保證一個值在一個壓力測試期內只能被一個虛擬用戶使用,通常我們選Tinit,但一定要保證虛擬用戶數<數據文件中值的個數,否則在用FileGetRow(hfile, GetUserId())進行參數化時就會報錯 ,在滿足這個條件下,選擇Parameter from Multi-column datafile與per Test就能保證沒個值只被一個虛擬用戶使用。本質上per Test 、Per Usage、Per tran,他們的區別在代碼中能體現,決定于取值時的變量/參數是在init中賦值的,還是在Tmain中賦值的。
附表
參數化腳本范例:
//----------------------------------------------------------------------
// 功能根據同一保單號生成報案人名稱不同的報案
//粗體部分為參數化添加的代碼
//----------------------------------------------------------------------
benchmark SilkPerformerRecorder
use "WebAPI.bdh"
use "kernel.bdh"
dclparam//定義參數
? pegistnametran1??? : string;
? paa1?????????????? : string;
? pegistnameperuser1 : string;
? registnamefiletran : string;
? psRegistpert?????? : string;
? psRegistrandomtran : string;
? sAccountName?????? : string;
studentcount????? : RndUniN? (1000..1010);
dcluser//定義虛擬用戶
? user
??? VUser
? transactions
??? TInit?????????? : begin;
??? TMain?????????? : 1;
??? TShutdown?????? : end;
var//定義變量
? registnamefiletran1 : number;
? hRegistpert1??????? : number;
? hRegistrandomtran1? : number;
? hfile?????????????? : number;
? hWeb0 : number;
? nCount: number;
dclrand//定義隨機變量
? registname??????? : RndStream("registname.rnd", 6);//per usageseq
? registnametran??? : RndStream("registname.rnd", 6);//per transctionseq tinit
? registnameRandom? : RndFile? ("registname.rnd", 6);//PerUsageRandom
? aaa?????????????? : RndStream("registname.rnd", 6);//per transctionseq tmain
? registnameperuser : RndStream("registname.rnd", 6);//per user
dcltrans //定義事務
? transaction TInit
? begin
??? if GetUserID() = 1 then
????? GlobalVarSet("global counter", 1);//設定初始值為1
??? end;
??? GlobalWaitFor("All", ALL_USERS);//等待并發用戶數>=ALL_USERS后才往下執行
??? FileCSVLoadGlobal(hRegistpert1, "registpert.csv", ",");//加載數據文件
??? FileGetNextRow(hRegistpert1);//獲取下一行
??? psRegistpert := FileGetCol(hRegistpert1, 1, STRING_COMPLETE);//pertest
??? pegistnameperuser1 := registnameperuser;
??? pegistnametran1 := registnametran;//pertransaction
??? FileCSVLoadGlobal(registnamefiletran1, "registname.csv", ",");//per tranaction
??? FileCSVLoadGlobal(hRegistrandomtran1, "registrandomtran.csv", ",");
??? FileCSVLoadGlobal(hfile, "registrandomtran.csv", ",");//導入參數化文件
??? ptudentcount1 := studentcount;
? end TInit;
? transaction TMain
? begin
??? paa1 := aaa;
??? WebTcpipConnect(hWeb0, "192.168.60.15", 23);
??? WebTcpipRecvExact(hWeb0, NULL, 3);
??? WebTcpipSendBin(hWeb0, "\hFFFB25");
??? WebTcpipRecvExact(hWeb0, NULL, 10);
??? WebTcpipSendBin(hWeb0, "\hFFFA25000000FFF0");
??? WebTcpipRecvExact(hWeb0, NULL, 15);
??? WebTcpipSendBin(hWeb0, "\hFFFB18FFFC20FFFC23FFFC27FFFC24");
??? WebTcpipRecvExact(hWeb0, NULL, 6);
??? WebTcpipSendBin(hWeb0, "\hFFFA18007674313030FFF0");
??? WebTcpipRecvExact(hWeb0, NULL, 15);
??? WebTcpipSendBin(hWeb0,
????? "\hFFFD03FFFC01FFFB1FFFFA1F00500018"
????? "\hFFF0FFFE05FFFC21");????????????
??? WebTcpipRecvExact(hWeb0, NULL, 62);
??? WebTcpipSendBin(hWeb0, "\hFFFD016C");
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipSend(hWeb0, "lastship");
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 2);
??? WebTcpipRecvExact(hWeb0, NULL, 9);
??? WebTcpipSend(hWeb0, "zhaz217\r");
??? WebTcpipRecvExact(hWeb0, NULL, 2);
??? WebTcpipRecvExact(hWeb0, NULL, 621);
??? WebTcpipSend(hWeb0, "c");
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipSend(hWeb0, "d");
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipSend(hWeb0, " ");
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipSend(hWeb0, "u");
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipSend(hWeb0, "i");
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipRecvExact(hWeb0, NULL, 27);
??? WebTcpipSend(hWeb0, "prp_main.4ge");
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipRecvExact(hWeb0, NULL, 157);
??? WebTcpipRecvExact(hWeb0, NULL, 28);
??? WebTcpipRecvExact(hWeb0, NULL, 36);
??? WebTcpipRecvExact(hWeb0, NULL, 128);
??? WebTcpipRecvExact(hWeb0, NULL, 586);
??? WebTcpipSend(hWeb0, "1101000002");
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 27);
??? WebTcpipRecvExact(hWeb0, NULL,

??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 26);
??? WebTcpipRecvExact(hWeb0, NULL, 1123);
??? WebTcpipSend(hWeb0, "11010000");
??? WebTcpipRecvExact(hWeb0, NULL, 3);
??? WebTcpipRecvExact(hWeb0, NULL,

??? ThinkTime(44.4);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipRecvExact(hWeb0, NULL, 56);
??? WebTcpipSend(hWeb0, "q");
??? WebTcpipRecvExact(hWeb0, NULL, 18);
??? WebTcpipRecvExact(hWeb0, NULL, 9);
??? WebTcpipSend(hWeb0, "a");
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipSend(hWeb0, "a");
??? WebTcpipRecvExact(hWeb0, NULL, 4);
??? WebTcpipRecvExact(hWeb0, NULL, 62);
??? WebTcpipSend(hWeb0, "a");
??? WebTcpipRecvExact(hWeb0, NULL, 18);
??? WebTcpipRecvExact(hWeb0, NULL,

??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 16);
??? WebTcpipRecvExact(hWeb0, NULL,

??? WebTcpipSend(hWeb0, "4");
??? WebTcpipRecvExact(hWeb0, NULL, 3);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 14);
??? WebTcpipRecvExact(hWeb0, NULL, 37);
??? WebTcpipSend(hWeb0, "a");
??? WebTcpipRecvExact(hWeb0, NULL, 68);
??? WebTcpipRecvExact(hWeb0, NULL, 1300);
??? WebTcpipSend(hWeb0, "4");
??? WebTcpipRecvExact(hWeb0, NULL, 4);
??? WebTcpipRecvExact(hWeb0, NULL, 89);
??? WebTcpipRecvExact(hWeb0, NULL, 1061);
??? WebTcpipSend(hWeb0, "2");
??? WebTcpipRecvExact(hWeb0, NULL, 122);
??? WebTcpipRecvExact(hWeb0, NULL, 1408);
??? WebTcpipSend(hWeb0, "1");
??? WebTcpipRecvExact(hWeb0, NULL, 128);
??? WebTcpipRecvExact(hWeb0, NULL, 1182);
??? WebTcpipSend(hWeb0, "1");
??? WebTcpipRecvExact(hWeb0, NULL, 128);
??? WebTcpipRecvExact(hWeb0, NULL, 1763);
??? WebTcpipRecvExact(hWeb0, NULL, 174);
??? WebTcpipSend(hWeb0, "a");
??? WebTcpipRecvExact(hWeb0, NULL, 7);
??? WebTcpipRecvExact(hWeb0, NULL, 771);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 128);
??? WebTcpipRecvExact(hWeb0, NULL, 1891);
??? WebTcpipRecvExact(hWeb0, NULL, 591);
??? WebTcpipSend(hWeb0, "PQAA200611010000000005");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipRecvExact(hWeb0, NULL, 460);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipRecvExact(hWeb0, NULL, 56);
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipRecvExact(hWeb0, NULL, 65);
??? WebTcpipRecvExact(hWeb0, NULL, 38);
??? WebTcpipSend(hWeb0, "y");
??? WebTcpipRecvExact(hWeb0, NULL, 92);
??? WebTcpipRecvExact(hWeb0, NULL, 9);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 46);
??? WebTcpipRecvExact(hWeb0, NULL, 388);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 7);
??? WebTcpipRecvExact(hWeb0, NULL, 44);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 7);
??? WebTcpipRecvExact(hWeb0, NULL, 7);
??? //
??? //
//此處參數化
/GlobalVarInc("global counter", 1, nCount);//設定增長值為1
??? FileGetNextRow(registnamefiletran1);//獲取文件中的下一行
??? registnamefiletran:=FileGetCol(registnamefiletran1,2, TRING_COMPLETE);//pertest
??? FileGetRndRow(hRegistrandomtran1);//隨機獲取文件中的某一行
??? psRegistrandomtran := FileGetCol(hRegistrandomtran1, 1, STRING_COMPLETE);//獲取某一列值
??? FileGetRow(hfile,GetUserId()) ;? //根據虛擬用戶的ID來取參數化的數據
??? sAccountName:= FileGetCol(hfile, 1, STRING_COMPLETE);//取數據的第一列?
??? WebTcpipSend(hWeb0, sAccountName);//SaccountName可用前面定義的? pegistnametran1 、 paa1? 、 registnameperuser1 、 registnamefiletran、? psRegistpert、? psRegistrandomtran及dclrand中定義的隨機變量及String(nCount) 、string(ptudentcount1)替換
?? Print(pegistnametran1, OPT_DISPLAY_ALL, TEXT_RED);
??? WebTcpipRecvExact(hWeb0, NULL, 23);//
???
???
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSendBin(hWeb0, "\h0F");
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipRecvExact(hWeb0, NULL, 1822);
??? WebTcpipRecvExact(hWeb0, NULL, 598);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 94);
??? WebTcpipRecvExact(hWeb0, NULL, 1996);
??? WebTcpipRecvExact(hWeb0, NULL, 102);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 43);
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "1");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "2");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "3");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "4");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "5");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "6");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? ThinkTime(4.6);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL,

??? WebTcpipSend(hWeb0, "z");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "h");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "a");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "n");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "g");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "1");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 40);
??? WebTcpipRecvExact(hWeb0, NULL, 48);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL,

??? WebTcpipRecvExact(hWeb0, NULL, 134);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL,

??? WebTcpipRecvExact(hWeb0, NULL, 16);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL,

??? WebTcpipRecvExact(hWeb0, NULL,

??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL,

??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSendBin(hWeb0, "\h0F");
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipRecvExact(hWeb0, NULL, 1824);
??? WebTcpipRecvExact(hWeb0, NULL, 1210);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 94);
??? WebTcpipRecvExact(hWeb0, NULL, 1929);
??? WebTcpipRecvExact(hWeb0, NULL, 83);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL,

??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL,

??? ThinkTime(2.4);
??? WebTcpipSend(hWeb0, "f");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "u");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "j");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "i");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "a");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "n");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL,

??? WebTcpipSend(hWeb0, "1");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL,

??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL,

??? WebTcpipSend(hWeb0, "1");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "1");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 34);
??? WebTcpipRecvExact(hWeb0, NULL,

??? ThinkTime(47.9);
??? WebTcpipSend(hWeb0, "1");
??? WebTcpipRecvExact(hWeb0, NULL, 43);
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 49);
??? WebTcpipRecvExact(hWeb0, NULL, 51);
??? WebTcpipSend(hWeb0, "1");
??? WebTcpipRecvExact(hWeb0, NULL, 92);
??? WebTcpipSend(hWeb0, "1");
??? WebTcpipRecvExact(hWeb0, NULL, 31);
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "1");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "2");
??? WebTcpipRecvExact(hWeb0, NULL, 23);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 30);
??? WebTcpipSendBin(hWeb0, "\h1B"); // ?
??? WebTcpipRecvExact(hWeb0, NULL, 3);
??? WebTcpipRecvExact(hWeb0, NULL, 122);
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipRecvExact(hWeb0, NULL, 39);
??? WebTcpipRecvExact(hWeb0, NULL, 38);
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 92);
??? WebTcpipRecvExact(hWeb0, NULL, 2081);
??? WebTcpipRecvExact(hWeb0, NULL, 1711);
??? WebTcpipRecvExact(hWeb0, NULL, 6);
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 128);
??? WebTcpipRecvExact(hWeb0, NULL, 1440);
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 128);
??? WebTcpipRecvExact(hWeb0, NULL, 1017);
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 122);
??? WebTcpipRecvExact(hWeb0, NULL, 1161);
??? end TMain;
? transaction TShutdown
? begin
??? WebTcpipSend(hWeb0, "0");
??? WebTcpipRecvExact(hWeb0, NULL, 4);
??? WebTcpipRecvExact(hWeb0, NULL, 34);
??? WebTcpipSend(hWeb0, "y");
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 10);
??? WebTcpipRecvExact(hWeb0, NULL, 66);
??? ThinkTime(2.3);
??? WebTcpipSend(hWeb0, "exit");
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipSend(hWeb0, "\r");
??? WebTcpipRecvExact(hWeb0, NULL, 1);
??? WebTcpipRecvExact(hWeb0, NULL, 3);
??? WebTcpipShutdown(hWeb0);
??? FileUnload(registnamefiletran1);
??? FileUnload(hRegistpert1);
??? FileUnload(hRegistrandomtran1);
? end TShutdown;
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
