臨近春節過年回家之際,現場又出問題,並發情況下游標報錯。一封郵件讓我周末不得不加班研究如何來模擬實際生產環境。大致需求是根據抄表段編號和電費年月來查詢該抄表段下的用戶的繳費情況,一個抄表段有幾百到兩千的用戶。需要並發的查詢不同抄表段下用戶的繳費情況,並依次打印該抄表段下每個用戶的繳費情況。
對於這樣的問題,開始我想挺好解決的,只要在腳本中加個循環控制語句就好了,但實際測試才知道,loadrunner在向服務器提交數據的時候有一個ID是沒有規律的,頓時悶了一下,之前的想法就這樣絕望了。經過仔細考慮,打印發票是每台電腦直連一台打印機的,也就是說不能通過一個腳本來模擬,需要使腳本有分布式的感念,腳本需要控制在每台機器上運行。這樣每個腳本是相對獨立的。這樣我就想到了QTP,使用QTP來編寫腳本,用loadrunner來控制腳本執行,這樣就可以滿足現場需求了。
附:QTP腳本如下:
SystemUtil.CloseProcessByName "iexplore.exe" SystemUtil.Run "iexplore.exe","http://172.19.201.188:7001/web/" set ChildObjects = CreateObject("Scripting.Dictionary") With ChildObjects .Add "Browser", Browser("CreationTime:=0") .Add "Page", .Item("Browser").Page("index:=0") .Add "Username", .item("Page").WebEdit("name:=username") .Add "Password", .item("Page").WebEdit("name:=password") .Add "Submit", .item("Page").Image("index:=0") .Add "Frame", .Item("Page").Frame("name:=barFrame") .Add "LinkMenu", .Item("Frame").Link("text:=電費收繳及營銷賬務管理") .Add "Linkitem", .Item("Frame").Link("text:=客戶繳費管理","index:=0") .Add "TreeMenuFrame",.Item("Page").Frame("name:=TreeMenuFrame") .Add "WebTable", .Item("TreeMenuFrame").WebTable("text:=我的桌面支持.*","index:=0") .Add "PageFrame",.Item("Page").Frame("name:=PageFrame","index:=1") .Add "mrSectNo",.Item("PageFrame").WebEdit("name:=mrSectNo") .Add "rcvblYm",.Item("PageFrame").WebEdit("name:=rcvblYm") .Add "WebButton",.Item("PageFrame").WebButton("name:=查詢") End With ChildObjects.item("Username").Set "YYY" ChildObjects.item("Password").Set "1" ChildObjects.item("Submit").click ChildObjects.item("LinkMenu").click ChildObjects.item("Linkitem").click ChildObjects.item("WebTable").ChildItem(1,2,"Image",192).click ChildObjects.item("mrSectNo").Set "0000006511" ChildObjects.item("rcvblYm").Set "201211" ChildObjects.item("WebButton").click Services.StartTransaction "start" With Browser("CreationTime:=0").Page("index:=0") For N= 1 To .Frame("name:=PageFrame","index:=1").WebEdit("name:=tatolRecord").GetROProperty("value") .Frame("name:=PageFrame","index:=1").WebCheckBox("index:="&N).Set "ON" .Frame("name:=PageFrame","index:=1").WebButton("name:=打印發票").click Set Wsh=CreateObject("WScript.Shell") Wsh.SendKeys "^+{F4}" .Frame("name:=PageFrame","index:=1").WebCheckBox("index:="&N).Set "OFF" Next End With Services.EndTransaction "start"
注意:在loadrunner中運行QTP腳本,需要在QTP腳本中設置事務,如:Services.StartTransaction "start"與Services.EndTransaction "start"
在loadrunner中調用QTP腳本步驟如下:
1、在每台機器上安裝loadrunner、QTP工具。
2、每台機器上的QTP,勾選Tools--Options--Run的"Alow other Mercury products to run tests and components"設置。
3、每台終端一定要開啟loadrunner的LR Agent Process及QTP的TOOS-Remote Agent代理服務。
4、啟動loadrunner后,在LR中運行時選擇QTP腳本,為QTP腳本存放目錄下文件擴展名為.usr的文件。注:loadrunner中運行QTP腳本時,只能有一個GUI Vuser
5、添加不同的組,每個組的腳本分別由遠程機器來執行。
完成以上步驟及場景設置后,就可以在loadrunner控制台運行場景了,這樣就可以看到每個終端都會調用QTP腳本,來並發執行自動化測試,這樣也達到了我們並發並循環測試的一個目的。