公司平台项目,在一个页面一直使用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来循环了。