1、Controller的引入
1)需要Controller的原因?需要多个用户来模拟并发的时候。
2)一种强大的、成熟的工具的体现。
2、 Controller的启动方式
1)LoadRunner Launcher - Run Load Tests
2)在开始菜单中
3)在VuGen中
一般controller放一台机器,负载生成器放另外一台机器。因为controller负责协调和收集负载生成器的信息。如果再用它去做负载,可能收集到的数据会不准。
百分比模式:
多个脚本运行时,不需要给每个脚本指定多少个用户。会以百分比的形式自动分配。
非百分比模式
场景模式:对所有组进行统一设置。
组模式:对每个组进行单独设置:选中哪一个组,就可以对那个组进行单独的设置。
运行模式
实际计划:有时候网站访问量白天多,晚上少,这种模式可以模拟高峰低谷。一般长时间做稳定性测试用这个。一般情况还是用基本计划。
基本计划:
一般压测设置:
Controller中的运行时设置
1)与VuGen中的不同,各自有各自的,不要认为是同一个
2)Think time默认设置的不同
3)系统日志,真正运行的时候就设置成仅仅当错误时才发送,提高效率。
4)事务的设置
5)带宽的设置
但是controller里面的设置,是controller里面的,vuser是vuser里面的。需要分开设置。
可以每个group单独设置,也可以选中多个group一起设置。
注意这几个地方
关于迭代
如果持续时间大于脚本迭代时间,action在持续的时间内一直迭代。
在运行的时候,关注哪些数据,可以直接从左边拖到右边来。不关注的数据,也可以右键删除。
也可以右键进行配置。
运行过程中,可以增加用户。
运行中,各个状态
init:正在执行vuser_init
stoped:
负载生成器3
lr可以将负载生成器装到负载机中。
启动agent服务LoadRunner Agent Server 对应进程 magentservice.exe 我本机没找到
负载生成器的使用要保证负载生成器自己不要成为瓶颈。
mmdrv解析
真正运行时,是mmdrv这个进程在跑。
以线程的方式运行。50个线程用1个mmdrv。也就是说如果有101个线程,会启动3个mmdrv。会共享内存,可能会遇到一些错误。
以进程的方式运行。虚拟用户数和mmdrv是一一对应的。有多少个虚拟用户数,就有多少个mmdrv进程。对于代码来说,这种方式更安全,但是更浪费资源。
IP Spoofer和集合点
IP欺骗(IP Spoofer)
1) 为什么需要IP Spoofer?因为不管用多少个用户,用了都是同一个ip。对于有些网站,对请求频繁的ip,可能会做一些处理。比如屏蔽。这个时候,就需要使用多个ip。模拟真实的场景。
2) 如何使用IP Spoofer?
Action() { char *ip; ip=lr_get_vuser_ip(); //只有controller里面发挥作用。 if (ip) { lr_output_message("ip地址为:%s",ip); } else { lr_output_message("IP欺骗关闭"); } return 0; }
设置2个用户跑一次。查看log。产生2个日志。说明1个用户生成1个日志
输出:Action.c(10): IP欺骗关闭 [MsgId: MMSG-17999]
打开ip欺骗。
继续运行 输出:Action.c(6): ip地址为:192.168.188.216 [MsgId: MMSG-17999]。 2个log只有1个IP
设置IP
不能选自动获得IP,然后点击高级添加IP地址。无线需要断开连接,在重新连接wifi。
可以看到这个时候有3个IP地址。
再次运行脚本。查看log
Action.c(6): ip地址为:192.168.28.104 [MsgId: MMSG-17999]
Action.c(6): ip地址为:192.168.28.105 [MsgId: MMSG-17999]
可以看出,2个虚拟用户用了不同的IP地址。
lr提供了工具用于快速生成IP
11、Controller中的集合点
脚本如下
Action() { lr_think_time(3); lr_rendezvous("jgd"); lr_think_time(4); return 0; }
controller检查到脚本中有集合点函数。可以在这里进行设置。
当rendez为设置的虚拟用户数时,同时执行。
自定义数据采集、lr_user_data_point解析
用这个函数,记录自己的数据,进行分析。用这个函数记录样本名和值。样本次数自动统计。可以去拿自己想要的数据。并在controller里进行分析。
Action() { int i; for (i=0;i<100;i++) { lr_user_data_point("cpu",i); lr_think_time(0.5); } return 0; }
2个用户跑。