2013年06月06日 15:51供稿中心:兆隆教育
1. LoadRunner录制脚本时为什么不弹出IE浏览器?
答:启动浏览器,打开Internet选项对话框,切换到高级标签,去掉“启用第三方浏览器扩展(需要重启动)”的勾选,然后再次运行VuGen即可解决问题;如果系统中安装多个浏览器,使用IE6录制脚本,IE6->工具->internet选项->高级,把"启用第三方浏览器扩展"前面的勾取消掉,再"确定".重启一次IE也许可以解决;
2. HTML-based script与URL-based script的脚本有什么区别?
答:使用“HTML-based script”的模式录制脚本,VuGen为用户的每个HTML操作生成单独的步骤,这种脚本看上去比较直观;使用“URL-based script”模式录制脚本时,VuGen可以捕获所有作为用户操作结果而发送到服务器的HTTP请求,然后为用户的每个请求分别生成对应方法。
通常,基于浏览器的Web应用会使用“HTML-based script”模式来录制脚本;而没有基于浏览器的Web应用、Web应用中包含了与服务器进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行通信的JavaScript/VBScript代码、基于浏览器的应用中使用了HTTPS安全协议,这时使用“URL-based script”模式进行录制。
3. Loadrunner录制脚本时Vuser_init,Action,Vuser_end的区别?
录制脚本时工具栏内默认会有"Vuser_init","Action","Vuser_end"3个脚本。"Vuser_init","Vuser_end"是必须存在,并且不能改名;"Action"脚本可以删除,改名或增加若干新的脚本。"Vuser_init"通常用来存放初始化的脚本,例如登录信息;"Vuser_end"通常用来存放结束脚本,例如退出信息;这两个脚本只运行一次,而"Action"脚本可以被设置运行多次。
4. 为什么录制脚本的时候要关闭浏览器?
static { authenticateLicense(); /* * alex:每隔一个小时移除超时的Session *为什么把时间搞这么久呢? * *浏览器非正常关闭时,不会通知服务器closeSession *本来想通过浏览心跳机制来解决,却没想到浏览器端每30秒通知用的setInterval与ajax冲突*当ajax没有得到反馈时,setInterval的调用也停止了,不会每30秒做一次,很诡异,还要追查一下* *于是,6.5.3给SessionIDInfor设置一个isActive的属性,每次updateSession时设置为true,每次ReportServlet结束一个request时设置为false *只有isActive为false,才会被定时检查删除* *但这么做导致了代码的复杂度* *于是在code里面就这么解决处理一下,因为这个定时操作是移除非正常关浏览器遗留的session,没有必要太频繁*/ new Timer().schedule(new TimerTask() { public void run() { if (ConfigManager.getInstance().isLicUseLock()) { authenticateLicense(); } removeTimeoutSessions(); } }, 600000, 600000); }
当客户端浏览器访问报表服务器端的某张报表时,便会产生一个session会话,当用户关闭浏览器的时候就会通知报表服务器关闭这个session。那么如果访问的用户多,每个用户都产生>=1个session的话,可以看到 session将会很多。如果session设置的为100个,session保持时间为3分钟,那么如果3分钟有105个session,超过的5个session就进入等待状态,如果没有关闭session,那么等待的session一直会占用线程,lr并发时,造成服务器线程不够现象,事务无法通过。
5. 在Controller中运行Web相关测试场景时,经常会有很多超时错误提示,如何处理这类问题?
答:这主要有脚本的默认超时设置引起。当回放Web脚本时,有时候由于服务器响应时间较长,会产生超时的错误。这时需要修改脚本的运行时配置。进入“Run-time Setting”对话框后,依次进入“Internet Protocol→Preference”。然后点击“Options…”按钮,进入高级设置对话框,可以修改各类超时设置的默认值。
6. LoadRunner如何自动创建脚本关联?
遇到sessionID之所以要用到关联,是因为每次访问被测页面时sessionID都是不同的,如果不关联sessionID,录制后的脚本就把sessionID写死了,测试时,每次访问的都是同一个sessionID的页面,这是不符合实际的。而创建关联,就是把产生的sessionID保存在一个变量中,供后面访问使用。
录制好脚本之后,查看脚本,找到sessionID,选中,右击–>scan for correlations,就会弹出创建关联的界面,在最底下的show differences in下拉框中选择all action,然后loadrunner就会reply这个脚本,查看在sessionID部分,是不是和之前录好的不一样,如果是的,就会在下面显示出来,然后我们点击右下角的correlation ,那么关联就已经自动帮你创建好了,你可以打开脚本找到关于关联的参数定义。
7. 为什么Windows系统中的CPU、内存等资源仍然充足,但是模拟的用户数量却上不去?
答:在Windows计算机的标准设置下,操作系统的默认限制只能使用几百个Vuser,这个限制与CPU或内存无关,主要是操作系统本身规定了默认的较大线程数所导致。要想突破Windows这个限制,须修改Windows注册表。以Windows XP Professional为例。
(1)打开注册表后,进入注册表项HKEY_LOCAL_MACHINE中的下列关键字:System\CurrentControlSet\Control\Session Manager\SubSystems。
(2)找到Windows关键字,Windows关键字如下所示:%SystemRoot%\system32\csrss.exe bjectDirectory=\Windows
SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1
ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2
ProfileControl=Off MaxRequestThreads=16
SharedSection=1024,3072,512关键字的格式为xxxx,yyyy,zzz。其中,xxxx定义了系统范围堆的较大值(以KB为单位),yyyy定义每个桌面堆得大小。
(3)将yyyy的设置从3072更改为8192(即8MB),增加SharedSection参数值。
通过对注册表的更改,系统将允许运行更多的线程,因而可以在计算机上运行更多的Vuser。这意味着能够模拟的较大并发用户数量将不受Windows操作系统的限制,而只受硬件和内部可伸缩性限制的约束。
8. 如何让场景的用户执行发生错误继续运行,以保证不间断进行压力测试?
答:用VuGen打开虚拟用户脚本后,进入“Run-time Settings”对话框后,依次进入“General→Miscellaneous”,可以看到Miscellaneous设置中关于“Error Handling”的配置。勾选“Continue on error”即可让虚拟用户发生错误继续运行。
9. LR运行场景时如何监控windows资源图
1、首先保证被监视的windows系统开启以下二个服务Remote Procedure Call(RPC)和Remote Registry Service。这两项服务在“管理工具”下的“服务”。
2、被监视的WINDOWS机器:右击我的电脑,选择管理->共享文件夹->共享 在这里面要有C$这个共享文件夹,若没有进行手动添加
3、测试机使用运行.输入\\被监视机器IP\C$然后输入管理员帐号和密码,如果能看到被监视机器的C盘了,就说明你得到了那台机器的管理员权限。 完成了以后的准备工作,就可以在LoadRunner的controller中监控windows了,操作步骤:在“windows resources”监视图中右击鼠标,选择“add measurements”跳出“windows resources”框,点击“add”输入被监控的IP。在“resource measurement on”选项框中选择要用到的计数器。
10. 为什么LoadRuner负载测试设置超过1000并发,运行时加压不上去?
因为loadRunner默认的vuser较大值为1000,需要修改vuser默认值。点击Controller设计界面的Generators -->Disable,将Vuser Limits设置为想要的值
11. 问题描述wsa_io_pending
IO Overlapped是一种异步IO,在socket层,只有少量数据发送的时候,只要create new thread,send, receive,就可以了。但是,当数据量增加的时候,要考虑资源的充分利用,也要避免资源的拥塞队列,如果创建线程过多,和CPU内存磁盘等资源的交互过多,可能导致拥塞出现。解决方法,调整tomcat的线程
12. TOMCAT的线程解释
maxThreads:tomcat起动的较大线程数,即同时处理的任务个数,默认值为200
acceptCount:当tomcat起动的线程数达到较大时,接受排队的请求个数,默认值为100
这两个值如何起作用,请看下面三种情况
情况1:接受一个请求,此时tomcat起动的线程数没有到达maxThreads,tomcat会起动一个线程来处理此请求。
情况2:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,tomcat会把此请求放入等待队列,等待空闲线程。
情况3:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,等待队列中的请求个数也达到了acceptCount,此时tomcat会直接拒绝此次请求,返回connection refused
maxThreads如何配置
一般的服务器操作都包括量方面:1计算(主要消耗cpu),2等待(io、数据库等)
第一种极端情况,如果我们的操作是纯粹的计算,那么系统响应时间的主要限制就是cpu的运算能力,此时maxThreads应该尽量设的小,降低同一时间内争抢cpu的线程个数,可以提高计算效率,提高系统的整体处理能力。