自動化測試檢查js內存溢出


公司平台項目,在一個頁面一直使用ajax局部刷新,當運行兩個小時以上,明顯感覺瀏覽器速度變慢,發生內存溢出,正在改進,目前需要一個前端的壓力測試工具,來長時間操作看是否還存在泄漏。

一開始我找了loadrunner和jmeter。

jmeter很小巧只有20M,LR要2G,需求很簡單使用jmeter就行了。再用badboy錄制腳本。結果發現不是想要的,這個只是模擬瀏覽器發送請求的一個httpClient。

於是找了好久,發現webDriver這個編程式模擬人工操作瀏覽器的方法。可以用Selenium來錄制並生產代碼運行。Selenium和webDriver已合並了。

可以用java語言開發webDriver運行可操作瀏覽器,我想簡單,使用Selenium IDE直接錄制腳本。

只能在火狐上錄制,錄制后可以直接在IDE上運行腳本,也可以轉成多種語言腳本代碼,比如java,c,perl,Python,然后運行即可。如果使用java,要先下載依賴的jar包,導入。

我暫時錄制之后直接在IDE運行,發現一些問題。

1 元素定位 ide 的元素查找和juery很像,推薦使用css選擇器,項目使用了jquery,很多點擊都是移動到那個按鈕之后,按鈕樣式要變,比如變高亮之類,css選擇器就記住這個高亮的樣式了,自動運行的時候不會有鼠標移動這個步驟,按鈕就不會變高亮了,結果就會報找不到錯誤。所以錄制腳本之后要改動這個css選擇器,改成鼠標不移動也能找到的定位。

2 ajax頁面刷新,ide自動運行很快,如果是局部刷新的話,往往是頁面還沒刷出來就去執行那個按鈕點擊了,就會報找不到那個元素的錯了。這個時候要加入waitforCondition命令來等待元素出現再執行。我發現我在ide插入的js腳本找不到那個元素,網上說是要先輸入selenium.browserbot.getCurrentWindow(),才能讓腳本在瀏覽器里運行,不然是在本地插件里。我試了,還是不行,selenium.browserbot.getCurrentWindow().jQuery.active == 0。說通過這個就可以判定ajax已經完成了,沒成功。后來又有種說法是IDE RC 需要執行 selenium.getEval("docment.getElementById('d')") 才能運行。我在能機房能訪問外網那台電腦上試了,可以找到百度網頁上的元素了,以為成功了,結果在本機上試還是不行。    結果終於找到原因了,是iframe問題,js要操作iframe需要這樣。我們知道document對象是window對象的一個子對象,所以我們可以通過document.getElementById(“iframe ID”).contentWindow.document來獲取iframe的document對象,相當於contentDocument屬性。然后在找iframe里dom元素就可以了。

3循環問題

IDE沒有自帶循環功能,可以下載一個js插件裝上即可:sideflow.js  下載地址:https://github.com/darrenderidder/sideflow

在Selenium中配置插件。如下圖所示,添加sideflow.js 到 "Selenium Core extensions (user-extensions.js)" 文本框中,重新啟動Selenium IDE。

然后就可以用 while 和endWhile來循環了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM