LoadRunner内部结构(转)
LoadRunner内部结构
1, 被测系统是由驱动进程mdrv.exe(多线程驱动的进程)和r3vuser.exe来产生压力的,其中r3vuser.exe仿真应用程序的客户端,如IE浏览器。它执行了三个主要的操作:
Kli> cpp (C语言pre-processor)
1)cci(C语言编译器),建立ci文件,然后使用被测系统的协议相关的驱动来执行。
通过在Windows批处理脚本中启动Mdrv.exe来默默地启动运行。
Mdrv能自动停止加载Vuser,因为他们与Vuser和Windows负载生成器上的CPU使用监视器之间互相通信。
在Windows机器上,对于每一个基于Java的Vuser都有一个独立的JVM。
2, 虚拟用户通过在负载生成器客户端机器上使用agent(3900 magentproc.exe)作为服务或者进程来按照组(在指定的负载生成器上运行相同脚本的虚拟用户的集合)启动虚拟用户。
3, 每一个拥有代理的机器维护一个在.qtp文件中的执行日志。
4, 当日志被启用后,代理同样会在结果文件中为每一个虚拟用户(由虚拟用户组分开)建立一系列日志文件。
5, 在执行过程中,这些文件可以通过在Controller机器上的view > Show Output窗口中显示。
6, 在预先设置延时上,Controller上运行的Scheduler指导代理(通过Windows 54345端口,或者Unix上的动态端口)去初始化场景会话.Controller(wlrun.exe)在请求中发送一份场景的拷贝.
7, 代理是由每一个负载生成器上的Remote AgentDispatcher进程(以前叫Remote Command Launcher(RCL))启动的.
8, 每一个根据场景(.lrs)定义文件中设置的代理来决定哪一个虚拟用户组和脚本需要在主机上运行.
##这就是说Controller可以从DOS的批处理文件(.batch)中启动.
REM Start Controller:
SET M_ROOT=C:\Program Files\Mercury Interactive\LoadRunner\bin
cd %M_ROOT%
wlrun.exe -TestPath D:\Dev\Dev1.lrs -port 8080 -Run -DontClose
l 包含的-Run参数与手动的点”开始场景”自动运行是一样的.这不是一个很好的方法,因为你可能需要决定从以前的运行中收集文件或者想改变输出文件夹.
l 这是假设系统环境变量PATH已经被更新了,包括LoadRunner的安装.
9, Controller通过使用 Windows操作系统文件夹里的参数值来启动.因为LoadRunner被设计成在一个机器上一次只能运行一个Controller实例,所以需要使用Windows文件夹.
##为了在几个应用之间快速的切换,在Controller工作之后保存LoadRunner的ini文件,然后使用记事本来制作一个批处理文件.在执行wlrun之前拷贝应用程序的指定版本的ini文件.下面是一个应用程序文件拷贝的例子:
copy %WinDir%/wlrun7-XXX.ini %WinDir%/wlrun7.ini
copy %WinDir%/wlrun7-XXX.dft %WinDir%/wlrun7.dft
需要修改一些默认值:
l 在wlrun7.ini文件的output区域, MaxNumberOfOutputMessages=from 10000 to 100000,这就限制了存储在数据库中的输出信息的数目.
l MaxOutputUIRowsToShow限制了在Controller的输出窗口中显示的信息/错误行总数.
l 在LoadRunner程序文件的dat\protocols 文件夹下的QTWeb.lrp文件的[Vugen]部分,添加一个MaxThreadPerProcess=5来限制由每个负载生成器mdrv.exe进程管理的线程数.
l 存储在wlrun5.ini和wlrun7.dft文件中的DefaultScenarioDir, DefaultscrīptDir, DefaultResultDir,[Recent File List]几个数据的值会在每次Controller改变的时候更新。
10, 在Vu scrīpts中定义的每个虚拟用户进行的操作是用LoadRunner的VuGen.exe生成的.当这个程序启动后,它在windows文件夹下存储了comparamui.INI文件来保存[LastTablesUsed]下面文件的历史,并且保存由Insert > New Parameter > Dates菜单指定的[ParamDialogDates].
VuGen在Windows文件夹下存储和检索vugen.ini文件.当使用JAVA的时候,需要添加一些其他的调试选项:
[DynaDlg]
JavaLevel=3
当在VuGen 8.1中使用8.0的脚本,往Vugen.ini中加入信息:
[Editor]
OLDEDITOR = 1
VuGen在LR文件夹template/qtwebdefault.cfg里和脚本文件里打开.
Vu scrīpts可以使用脚本外部的参数文件来获得的变量值进行编码.
更多关于VuGen的信息请看脚本编写的章节.
11.运行过程中,执行结果存储到一个结果文件夹中.
我喜欢在场景执行中把结果设置成自动产生结果.这样,LoadRunner会在每次启动一个场景之后自动产生一个子增的结果名.例如,结果名称Res1会自动增长到Res12或有时候是R es11-1.
错误被写到output.mdb微软的Access数据库中。
12.在每一个结果文件夹中,程序自动创建Log文件夹来包含每个组的日志文件.运行之后,在Controller中查看日志文件,点,.然后在组中点右键,选择“ShowVuser Log”
13.场景运行的时候,监视器在本地维护每个主机的计数器.
14.运行完成之后,"collate"进程处理.eve和.lrr结果文件,并且在结果文件夹下创建一个临时的.mdb数据库.
在处理大数据量的结果时,为了防止错误发生,使用MSDE. ……
15.分析模块(8,320K analysisu.exe)使用mdb数据库中的数据来产生分析图表和报告.
16.每一次场景运行后的结果文件results_name.lrr,也叫分析文档文件,由分析程序来读取并且显示百分位图表.
17.默认的LRReport文件夹创建在本地分析机器的My Documents文件夹下来存储分析会话文件.
18.可以使用HTML格式
19.格式是由.tem模版文件控制的.
20.可选的,LR7.8的Remote Performance Monitoring (RPM) MS-IIS/ASP web server可以安装在Windows 2000 Server(但不是Windows 2003 Server)上,这样,负载测试的结果就可以使用web浏览器来浏览了.
Load Generator Agent进程和Service
在安装过程中,用户登陆页面:
l 选择”Allow virtual users to run on this machine without user login”意思是LoadRunner agent作为一个名称为LoadRunner Agent Service的系统服务.在Window的性能监视器中,这个图标名称为:magentservice.exe
为了更好的安全,指定一个独立的服务帐号,用户名和密码,这样可以限制权限.
安装完之后,为了测试是否能运行,
在Windows 2000,上打开Start -> Control Panel -> Administrative Tools -> Services.
在 Windows NT4,打开Start -> Control Panel -> Services
你同样需要输入服务列表来改变密码,或者复位服务为"Automatic"
l 选择”Manual log in to the Load Generator”意味着LoadRunner agent按照名称为magenproc.exe的进程来运行.这种方法意味着你需要每次启动机器的时候从LoadRunner的\launch_service\bin手动运行Load Generator
magentproc.exe
你可以通过在windows任务栏中查看是否有卫星图标来判断是否在运行.
为了使机器每次重启都会自动运行Agent,可以在程序-à启动这里建立一个快截方式.
作为一个进程,windows操作系统限制在运行的GUI(Winrunner, QuickTest Professinail等)或者类似GUI脚本(Citrix, SAPGUI等)。因此,如果在负载生成器上的Remote Agent Dispatcher安装成服务而不是进程的话,GUI和SAP Vuser就不能运行。
安装之后,为了把运行的LoadRunner由服务变成进程:
cd\PROGRA~1\MERCUR~1\MERCUR~1\LAUNCH~1\bin
magentservice.exe –remove
把LoadRunner作为服务安装:
magentservice.exe –install
这些命令不会产生响应结果。但是把m_agent_attribs.cfg文件放到负载生成器的C:\根目录下。
如果你没有管理员权限,然后去试图改变用户ID:Admin,密码:Admin,你会看到这样的信息:
"29972:- Failed to reset launcher status call back function reason:no monikor was passed.
在UNIX机器上,代理的配置是修改LoadRunner根目录下dat文件夹下的br_Inch_server.cfg实现的。
确保代理就绪
在控制器的负载生成器对话框中,在你点击“Connect”之后,你会看到“Ready”。
重新试验这些命令,直到你得到信息“Failed to connect to the agent。Load Generator not responding after timeout Command line that was executed”
如果这样仍然不能显示为“Ready”状态,在负载生成器的机器上看windows服务,在重新使用上面的命令之前,kill然后删除“LoadRunner Agent Service”
设置FireWallServiceActive1为true,0为false。运行bin/agent_config
使用网络驱动映射
如果一些负载生成器需要访问相同的物理文件,而不是必须去记得每次文件改变后去拷贝这些文件,每一个负载生成器可可以使用映射驱动器来引用通用的文件夹。但是因为网络驱动映射是跟制定的用户关联的:
1, 使用负载生成器要使用的用户来登录负载生成器的机器。
2, 打开windows浏览器,在工具下选择映射一个网路驱动,然后创建一个驱动。
3, 在服务中打开LoadRunner的服务。
4, 点登录标签卡
5, 指定负载生成器服务使用的用户名和密码(如果用户ID是本地域,用户名称这里会显示一个.)
6, 停止然后启动服务。
控制负载生成器,穿过防火墙来监控
防火器的目的是通过阻止一些通信来增强安全,它只允许一些特定的端口与外网通信,如HTTP的80和HTTPS的443端口。
默认的情况下,负载生成器通过MI Listener使用动态的端口发送信息的返回。
为了避免必须请求管理员来开放更多的端口,在防火墙内的每个负载生成器机器,从Start > Programs > ... LoadRunner > Advanced Settings > Agent Configuration (launch_service\bin\AgentConfig.exe),安装(Monitoring Over Firewall machine)MoFW/RoWF agent,检查“Enable Firewall Agent”选项。
它收集性能计数器的数据,并且穿过防火期发送这些数据给控制器。
MoFW与MI Listener通过端口443来通信,所以机器上不要装有任何的Web服务器(Apache WebTours, IIS,或Oracle HTTP servers)
为了验证端口443是否允许通信,使用下面的命令:
telnet 194.194.194.194 443
这会打开一个telnet窗口。
UNIX负载生成器使用一个动态的端口,这个端口不能固定。
当在控制器上定义一个远程的负载生成器时,在“Load Generator Information”对话框上点“Details”,这里你可以点“Firewall”标签然后选择“Enable Firewall”。
在windows和Unix/Liunx系统上监控资源
监控UNIX机器
在Liunx上启动监控之前,检查确保rstatd监控器是活动的。如果服务因为太忙或者重启而使rstatd服务停止,LR7.8就不能从rstatd中获得需要的信息了。需要退出或者重新初始化控制器。
HTTPS/SSL通信的MI Listener
当代理从防火墙之后发送HTTPS通信,它会使用”Monitoring over Firewall Component”,然后控制器为代理使用一个符号的名称,通过Mercury Interactive'sMI Listener Machine(通过端口50500)与外边的防火墙通信。通过防火墙监控WINDOWS机器使用TCP端口139。
为了测试外部的防火墙mercuryinteractive.com/products/protune_ds/ Mercury ProTune Delivery Service
GUI Vusers 、ASPGUI脚本回放时必须使用Process,其他情况可以使用Service
Service由Local System用户启动,Process则由登录到桌面的用户来启动。
如果测试脚本中有访问映射网络驱动器的代码,此时应该选择Process而不是Service,
因为每个用户/会话只能访问自己映射的网络驱动器,别的用户/会话映射的网络驱动器它是无法访问的, (这个原理与 SQL Server无法直接从用户映射的网络驱动器恢复数据 一样)
除非你专门为Local System映射网络驱动器或将你的测试代码改为访问UNC路径。
如果当前启动的是Service,改变Service到Process方法:
1 .uninstall the service
<LR_dir>\launch_service\bin\magentservice.exe -remove
2 .run magentproc.exe from <LR_dir>\launch_service\bin
LoadRunner内部结构(转)的更多相关文章
- LoadRunner内部结构
转载自:http://blog.sina.com.cn/s/blog_6da75b980100n2nv.html 英文版地址: http://www.rickyzhu.com/21_princip ...
- LoadRunner内部结构(1)
LoadRunner内部结构(1) 根据http://www.wilsonmar.com/1loadrun.htm 翻译: LoadRunner内部结构 1, 被测系统是由驱动 ...
- LoadRunner内部结构(2)
LoadRunner内部结构(2) 接着(1)的内容: 17.默认的LRReport文件夹创建在本地分析机器的My Documents文件夹下来存储分析会话文件. 18.可以使用HTML格式 19.格 ...
- Loadrunner系列学习--Loadrunner架构(1)
Loadrunner系列学习--Loadrunner架构(1) 最近在学习Loadrunner,发现一个英文网站http://www.wilsonmar.com/1loadrun.htm里面介绍的比较 ...
- 【云知道】LoadRunner 录制问题集锦
关键词:各路录制小白汇集于此 虽然知道君对录制不感冒,但总是看到扎堆的人说这些问题,忍不住要站出来了. 百度虽好,帮助了很多小白,但关键是百度并没有排除错误内容,经过历史的几年传播,错的都快变对的了, ...
- 【云知道】究极秒杀Loadrunner乱码
Loadrunner乱码一击必杀 之前有介绍一些简单的针对Loadrunner脚本或者调试输出内容中乱码的一些设置,但是并没能完全解决一些小伙伴的问题,因为那些设置实在能力有限,还是有很多做不到的事情 ...
- LoadRunner函数百科叒叒叒更新了!
首先要沉痛通知每周四固定栏目[学霸君]由于小编外派公干,本周暂停. 那么这周就由云层君来顶替了,当然要要说下自己做的内容啦,DuangDuang! <LoadRunner函数百科>更新通知 ...
- Loadrunner Http Json接口压力测试
前天接到了一个测试任务,要求测试一下ES(elsticsearch)在不同并发下的查询效率.如图: 业务场景是在客户端根据具体车牌查询相关车辆信息,结果返回前10条记录. 从图中可以看到,接口的请求参 ...
- LoadRunner免费公开课,惠普金牌讲师亲授
[开课时间]:9月13日 下午2:00—4:00(暂定)[活动费用]:免费[主办单位]:慧都学院[课程形式]:网络在线公开课 LoadRunner简介惠普软件测试解决方案LoadRunner测试实例答 ...
随机推荐
- Jmeter JAVA请求入门
一.Jmeter完成一个java请求实现方法 两种实现方式: 实现JavaSamplerClient接口 继承AbstractJavaSamplerClient抽象类 二.使用AbstractJava ...
- C#设计模式:抽象工厂(Abstract Factory)
一,抽象工厂模式 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- 函数异步模拟实现ajax
//模拟ajax function getData(callback){ setTimeout(function(){ var name='leo' callback(name) },1000) re ...
- 20180119-01-RACSignal的基础
一.获取一个信号的方式 1.单元信号 RACSignal *signal1 = [RACSignal return:@"Some Value"]; RACSignal *signa ...
- Collection集合家族
集合家族 数组:存储相同类型的多个元素 对象:存储不同类型的多个元素 集合:存储多个不同类型的对象 List List继承自Collection接口,是有序可重复的集合. 它的实现类有:ArrayLi ...
- Sass函数--列表函数append
append() 函数是用来将某个值插入到列表中,并且处于最末位. >> append(10px 20px ,30px) (10px 20px 30px) >> append( ...
- lambda表达式以及stream流式api用法
https://www.cnblogs.com/aoeiuv/p/5911692.html 这篇文章讲的简单全面,记录下 kotlin一些符号的用法 https://www.cnblogs.com/l ...
- SpringBoot中发送邮件服务
.转载:http://www.ityouknow.com/springboot/2017/05/06/spring-boot-mail.html 简单使用 1.pom 包配置 <dependen ...
- python读文件的4种方式
1.直接打开就读 with open('filepath','r') as f: for line in f: print(line) print('一行数据') 虽然f是一个文件实例,但可以通过以上 ...
- CentOS7 安装xen(在虚拟机上成功,实体机测试死机!)
此文章只做操作记录,其中有些地方可能漏了!!我只贴出自己的操作过程!其它有差别的地方请自己网上查找参考! 只有在全虚拟化下才能安装Windows,这就需要有硬件支持,并在BIOS中开启Virtuali ...