研究背景:业务中需要使用多IP地址访问网站的日志来计算数据,为了获取更加真实的数据,我们试图通过前端对网站的访问来制造访问日志。因此构造多ip数据的方法进行了一番调研。
LoadRunner构造多IP 数据
多IP数据首先想到的是LoadRunner中“IP欺骗”功能,需要分两步,首先是在要连接的压力机上设置虚拟IP,然后则是对controller进行相应的配置,执行测试,制造多IP访问数据。
一.设置虚拟IP地址
前提条件:请确定使用的是静态IP地址,不能是自动获取的。
- Windows下虚拟IP的设置可以在网络属性的高级属性中通过添加来实现,或者也可以利用Loadrunner的IP Wizard实现多IP的设置。下面详细说明一下IP Wizard设置虚拟IP的步骤:
a). 打开Loadrunner文件夹下的tool文件夹,点击IP Wizard。Win 7请使用管理员方式打开。
b). 选择“create new setting”, 点击“下一步”。(增加新IP选择第1项; 使用保存的文件增加IP选择第2项,释放已经设置的IP选择第3项。)
c). 网上说这一步填写server’s ip,即要访问的服务器地址,建立到该服务器的路由
表。但我在实验中没有填写此IP,也没影响。点击“下一步”。
d). 这里设置本机模拟的多IP,点击“Add”,在弹出的对话框中选择模拟的IP地址类型,“From IP”中填入起始IP地址类型,“Number to add”就是你要模拟的IP个数,“Submask”是子网掩码,勾选“Verify that new IP addresses are not in use”(但该选项没有起作用),点击“OK”。列表中会显示将要添加的IP地址。
e). Summary页面会列出你之前设置的所有信息,点击“save as”将本次设置保存为文件(下次使用就可以直接选择此文件了),保存完成后点击“Ok”。会弹出cmd命令窗口进行IP地址的设置,此时一般就完成了。
f). 重启计算机,或者在网络连接属性中把相关的链接停用再重启。我在实现中没有进行重启虚拟IP就生效了。
g). 使用ping命令来检测IP是否添加成功,打开cmd,直接ping你新添加的IP地址。若不成功,重启机器再试试。
h). 做完测试得到数据后,记得将增加的IP地址释放掉。打开IP Wizard选择第三项,然后点击“Remove”,释放掉IP。
2.Linux下设置虚拟IP
- 如果临时性的增加一个IP(重启机器或network 服务后丢失),可以使用ifconfig命令来新增一个虚拟端口,并配置IP地址。
ifconfig eth0:1 172.16.1.222 netmask 255.255.255.0 up
up表示当即生效,如果想关闭个端口可以使用ifconfig eth0:1 down
执行命令后,ifconfig多出一个端口信息,且能够ping通新增的IP。
- 永久性的添加虚拟IP地址
Linux的网络设备配置文件路径是/etc/sysconfig/network-scripts/,对于以太网的第一个网络设备,配置文件名一般为 ifcfg-eth0, 如果需要为第一个网络设备绑定多一个IP地址,只需要在/etc/sysconfig/network-scripts目录里面创建一个名为ifcfg-eth0:0的文件。可以通过命令cp ifcfg-eth0 ifcfg-eth0:0建立,然后修改文件里面对应的设备名称和ip地址。
#下面是ifcfg-eth0:0文件里的配置信息
DEVICE=”eth0:0″ #网络虚拟接口eth0:0
IPADDR=”211.100.10.119″ #ip地址
NETMASK=”255.255.255.0″ #子网掩码
ONBOOT=”yes” #启动时激活
如果需要再绑定多一个IP地址,只需要把文件名和文件内的DEVICE中的eth0:x加1即可。LINUX最多可以支持255个IP别名。
之后执行命令service network restart即可,再使用ping命令验证虚拟IP是否设置成功。
二、使用虚拟IP制造访问数据
设置好虚拟IP后,使用LoadRunner来访问网站制造数据。写好访问脚本后,接下来是Controller中的设置:
- Tool—>Expert Mode选中,多IP需要在专家模式下运行。Tool—>Options->General面板,选择以线程方式或进程方式进行,这个选项一定要与当前场景选择的模式相匹配。(与脚本的run-time settings的General下 Miscellaneous的Multithreading中选择的方式相同)
- Scenario—>Enable IP Spoofer选中,此项设置允许使用IP欺骗,可以看到LR最下面的状态中会出现“IP Spoofer”中的标志。
- 点击Load Generators按钮,设置虚拟用户生成器。将第一步中设置了虚拟IP的负载生成器以其某一个IP添加到Generator中即可。注意,各个Load Generator机器必须使用固定的IP,不能使用动态IP。(若只是使用本机作为负载生成器可以跳过此步骤)
到这里虚拟IP的设置就成功了,可以模拟多IP来获取数据了。可以在脚本的Action中加入以下代码,测试多IP是否生效:
char ip; ip=lr_get_vuser_ip(); if(ip) lr_output_message("The IP address is %s", ip); else lr_output_message("IP spoofing disabled"); //如果出现语法错误,将变量申明char ip放在脚本页面顶端
然后就能在运行log中查看到相关的IP信息。前提是Run-time Settings中log信息设置为 Always send message。脚本运行时,Controller的Run界面,点击Vusers,弹出的对话框中点击查看log信息的按钮。
使用LoadRunner进行试验,将本机作为压力机,在本机上设置192.168.1.1-192.168.1.4这四个虚拟IP。其实建议大家填写IP时不要使用末尾为1的地址,很多以1结尾的是网关地址,设置之后会对整个网段有影响。
写好访问脚本并设置好controller运行,查看Vuser的log信息:
从日志中可以看到虚拟IP成功的访问了目标地址。当设置的Vuser数大于虚拟IP数的时候,会出现多个Vuser使用同一IP的现象。注意:设置的虚拟IP应该是本网段可用的IP,即没有被使用的IP,否则会产生IP冲突。结束后,记得释放虚拟IP,使别人能够使用这些IP。
curl-loader构造多IP数据
curl-loader是一个用C语言编写的开源性能测试工具,能够模拟成千上万用户的HTTP/HTTPS和FTP/FTPS应用行为,每个用户使用独立的IP。该工具是运行于Linux平台,安装需要具备gcc和openssl,这里就不详述安装步骤了,网上有许多安装教程。下面简单介绍一下执行压力测试的过程。
执行压力测试的命令为:curl-loader –f conf-file
conf-file为此次测试的配置文件,以10k.conf来解读各配置字段的含义:
#######################GENERAL SECTION########################## BATCH_NAME=10K //测试对象的名称 CLIENT_NUM_MAX=10000 //最大虚拟用户数 CLIENTS_NUM_START=100 //初始化并发虚拟用户数 CLIENTS_RAMPUP_INC=50 //每秒增加的用户数 INTERFACE =eth0 //测试用的网卡 NETMASK=16 //子网掩码位数 IP_ADDR_MIN= 192.168.1.1 //起始ip地址 IP_ADDR_MAX= 192.168.53.255 //终止的ip地址 CYCLES_NUM= -1 //循环次数,-1表示无限循环 URLS_NUM= 1 //待测URL的数目
########### ######URL SECTION #################################### URL=http://localhost/index.html //URL地址 URL_SHORT_NAME="local-index" REQUEST_TYPE=GET //请求方式,有GET,POST,PUT TIMER_URL_COMPLETION = 5000 //连接超时的时间,单位是毫秒 TIMER_AFTER_URL_SLEEP =20 //完成一个URL请求后到下一个请求前的的时间
修改配置文件里的参数,注意填写的IP地址的范围要是本机能够到达的范围。执行命令: ./curl-loader –f 10k.conf 就开始执行压力测试了。界面出现下面的信息,并一直在刷新中。按ctrl+c键终止测试。
图中各参数说明:
Interval stats:间隔统计
lastest:最新数据(3秒内)
clients: 并发用户数量
CAPS-curr:最新发送请求数
req: request请求数目
1xx:返回码为1xx(成功)的请求数;2xx:返回码为2xx(成功)的请求数;3xx:返回码为3xx(重定向)的请求数;4xx:返回码为4xx(客户端错误)的请求数;5xx:返回码为5xx(服务器错误)的请求数。
err: 其他错误请求数,如解析,TCP连接,服务器关闭或空响应;
T-err: Timed out错误数
Ti(T-in)吞吐量“吞”,平均值,字节/每秒
To (T-out) 吞吐量“吐”,平均值,字节/每秒
Summary stats: 总结统计
测试结束后还会在当前目录下生成四个文件(.log,.txt,.ctx,.ops),可以查看这几个文件获得更详细的测试数据。
Comments