臨近春節過年回家之際,現場又出問題,并發情況下游標報錯。一封郵件讓我周末不得不加班研究如何來模擬實際生產環境。大致需求是根據抄表段編號和電費年月來查詢該抄表段下的用戶的繳費情況,一個抄表段有幾百到兩千的用戶。需要并發的查詢不同抄表段下用戶的繳費情況,并依次打印該抄表段下每個用戶的繳費情況。
對于這樣的問題,開始我想挺好解決的,只要在腳本中加個循環控制語句就好了,但實際測試才知道,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腳本,來并發執行自動化測試,這樣也達到了我們并發并循環測試的一個目的。
原文轉自:http://www.cnblogs.com/Automation_software/archive/2013/02/01/2888675.html