2). 定義函數調用方法
2. 通過 STAX 遠程運行帶命令行參數的 Autoit 腳本示例:
'"Autoit 程序路徑" " Common_web_view" "C:\\TestDir\\" "iexplore.exe" "index_chart.htm" "Microsoft Internet Explorer" 5000 1 %s 20000 %s' %(machine, debug)
說明:該條目模擬主機名為 machine 的用戶通過 IE 打開本地的位于 C:\\TestDir\\ 下的 index_chart.htm 文件(也可以設置為實際的 URL),停頓 5 秒之后,執行翻頁瀏覽,停頓,關閉 IE 等一系列操作(定義在函數體中),而對于 doc、xls、pdf 等文件,則調用另外寫好的函數,該函數會自動檢查剛打開的頁面內容以及翻頁后的內容,跟事先抓好的圖片比對(圖片比對只是衡量應用程序 GUI 延遲的一種較直接的方法,實際上可以通過 Windows 消息循環隊列等機制來做程序延遲的統計),從而保存這兩處窗口的刷新時間間隔,以上命令示例統計出:
從打開 htm 文件到文件內容正確顯示出來的時間
從翻頁的動作執行完后到第二頁顯示出來的時間
可以自定義多個檢查點,得到用戶不同操作的時間延遲。指定 Microsoft Internet Explorer 用來保證用戶是在正確的 IE 窗口所作的操作,確保桌面窗口處于最前端。Debug 參數在 XML 中做了統一定義,可以統一打開或者關閉 debug 開關 , 打開 debug,可以使用 dbgview 進行遠程調試,該 Common_web_view 定義的行為循環 1 次,生成的日志文件以加上 machine 的前綴用以區分。
3. 編寫不用用戶類型的 workload 配置文件
為了便于修改腳本,采用模塊化的方法,每種用戶類型采用單獨的 XML 文件,并且針對每種用戶類型,分別有兩套 AutoIt 函數接口,但是都編譯在一個 exe 文件里面,針對每個 Load HTML Web Page 的事務,調用 Client_Action_v2.0.exe 程序執行,但是傳入的參數有兩套:
Common_action_view1:該參數調用 AutoIt 程序的接口時不做響應時間捕獲(主要考慮捕獲響應時間對系統本身資源的消耗的影響,因為做圖片比對時,對系統 CPU 有一定的資源消耗),也就是擴展性測試中的‘ N ’個并發用戶所調用的部分
Common_action_view2:該參數調用 AutoIt 程序的接口時自動進行響應時間的捕獲,這就是擴展性測試中的‘ 1 ’個受監控的用戶。
4. 調試 / 運行單用戶的步驟
啟動 STAX 并設置 XML 任務文件,如圖 7 所示
圖 7. STAX 啟動界面
配置 XML 參數,如下圖所示
圖 8. STAX XML 參數配置界面
提交 XML 任務
STAX 任務執行狀態如下所示
圖 9. STAX 任務執行界面
監控測試運行圖例,可以看到每個虛擬用戶在某一時刻做什么事務,執行了多久,運行第幾個事務循環,暫?;蛘邌⒂媚承﹤€用戶以及事務運行的日志輸出。
圖 10. STAX 監控界面
查看大圖。
關于數據結果采集
實時數據采集方式: 調用 STAX 提供的接口 returnfile,結果會實時輸出到 STAX 的下面的面板,但是不夠直觀。
清單 3. returnfiles 實時返回文件到 STAX Monitor 窗口
<process> <location>machName</location> <command>cmd</command> <stdout>'C:/temp.out'</stdout> <stderr mode="'stdout'"/> <returnstdout/> <returnfiles>['C:/process1.inf', 'C:/process2.inf']</returnfiles> </process> |
定期遠程拷貝文件的方式,在數據文件較大較多的時候適宜使用
清單 4. STAX 遠程拷貝函數
<function name="RemoteCopy" scope="local"> <function-list-args> <function-required-arg name="srcIP" /> <function-required-arg name="srcFolder" /> <function-required-arg name="dstIP" /> <function-required-arg name="destFolder" /> <function-required-arg name="regExpr" /> </function-list-args> <sequence> <message>'Enter RemoteCopy function, srcIP=%s, srcFolder=%s, dstIP= %s, destFolder=%s, regExpr=%s' %(srcIP, srcFolder, dstIP, destFolder, regExpr)</message> <script> ImportMachine = 'local' ImportDirectory = '{STAF/Config/STAFRoot}/services/stax/libraries' </script> <import machine="ImportMachine" file="'%s/STAXUtil.xml' % ImportDirectory" /> <message>'Enter STAXUtilCopyFiles function, srcIP=%s, srcFolder=%s, dstIP= %s, destFolder=%s, regExpr=%s' %(srcIP, srcFolder, dstIP, destFolder, regExpr)</message> <call function="'STAXUtilCopyFiles'">{ 'machine': srcIP, 'directory': srcFolder, 'toMachine': dstIP, 'toDirectory': destFolder, 'regularExpression': regExpr}</call> <script> [rc, numFilesCopied, errorList] = STAXResult </script> <message>'Exit STAXUtilCopyFiles function, srcIP:%s -- dstIP:%s. rc=%s, numFilesCopied=%s, errorList= %s' %(srcIP,dstIP, rc, numFilesCopied, errorList)</message> <call function="'STAXUtilCheckSuccess'">{ 'result': rc == 0, 'failMsg' : 'CopyFiles failed. RC: %s. Files copied: %s Error List: %s' % (rc, numFilesCopied, errorList), 'sendToMonitor': 1, 'recordStatus': 0 }</call> </sequence> </function> |
原文轉自:http://www.anti-gravitydesign.com