标签:badboy ... bsp targe 能力 fail param 网站架构 手机
简介:
该文档是以Apche JMeter-3.0为例进行编写的,通过网上的学习资料和官方文档的说明手册学习后,进行项目操作实践,将测试的过程记录下提供给大家学习。
本博文的内容主要是进行配置JMeter的测试参数,进行并发测试,分布式测试和收集服务器端的性能参数以及如何去测试web api接口的方法。
本博文以工作的项目作为并发测试的实验案例。如果有错误,请大家指出。
(1)启动Badboy。首次启动Badboy时,录制按钮默认处于选中状态,如图所示中的红色小圆点。
(2)在Badboy工具地址栏中输入测试网址,然后按回车键。Badboy工具会使用内置的浏览器访问对应的网址,如图所示。
(3)在Badboy工具打开的页面中完成登录所需的各项操作,接下来可以在左上角的脚本框中看到录制产生的测试脚本,如图所示。
设置HTTP Header的信息
设置HTTP Request的配置信息
设置HTTP Request的配置信息,并设置发送的参数内容
(1)函数助手可以用过ctrl-F打开,通过函数助手找到_CSVRrad方法,输入参数文件的路径,CSV文件列号是从0开始的,第一列0、第二列1、第三列2、依次类推。
然后点击【生成】按钮,则会自动生成我们需要的参数化函数。
打开参数化窗口
设置参数化文件和取得参数化的列
(2)复制生成的参数化函数,打开登陆请求页面,在右则的参数化中找到我们要参数化的字段,这里对用户名和密码做参数化,第一列是用户名,列号为0;
第二列是密码,列号为1;修改函数中对应的参数化字段列号就可以啦。
从该请求的响应中提取出该字符串,提取时使用的是正则表达的方式。
(2)正则表达式提取数据
创建正则表达式
(3)填写正则表达式信息
参考地址:http://book.51cto.com/art/201204/327425.htm
他就是用来收集被压服务器的各种性能指标,例如: CPU, Memory, Swap, Disks I/O and Networks I/O ……
环境搭建
下载地址:http://jmeter-plugins.org/downloads/all/
解压zip包,将JMeterPlugins-Standard.jar放到jmeter客户端的jmeter/lib/ext下
启动jmeter,添加Listener时你就看到PerfMon Metrics Collectors
(2)配置被监控的服务器
下载地址:http://jmeter-plugins.org/downloads/file/ServerAgent-2.2.1.zip
解压zip包,将ServerAgent-2.2.1放到被监控的服务器下,必须启动startAgent.bat,并且测试的时候不能关闭该窗口,启动成功后,得默认端口是4444
(3)添加被监控的服务器指标
进行编辑,如果没有在文件中没有找到JmeterPlugin.perfmon.interval ,在文档的末尾最加进去。
例如设置每5秒收集一次:jmeterPlugin.perfmon.interval=5000
(1)进行分布式测试后,在在Control端中,查看View Results Tree时,点击选项卡Response data后,没有显示返回的响应数据。这时需要在Jmeter的目录
下..\apache-jmeter\bin\下找到jmeter.properties文件,进行编辑,找到mode=Standard,并将#去掉并且进行保存。
在jmeter.properties文件Remote batching configuration板块中找到mode=Standard配置
去掉mode=Standard前面的#号,这样分布式测试的控制台中的view result tree查看结果时就可以看到response data中的数据了。
其它参数配置:
测试计划中的监听器会把它们的结果返回到JMeter客户端,而JMeter客户端默认情况下会将这些结果写入到指定文件中,采样结果会在产生后立即发回JMeter客户端。
这样就会对网络和JMeter客户端产生很大的压力。用户可以通过设置一些属性,来改变默认操作。
模式(Mode)(采样结果发送模式)默认是Standard。
Standard:在采样结果产生后立即发送。
Hold:将采样结果保存在一个数组中,直到测试结束。这可能会占用远程服务器的大量内存。
Batch:当计数器或者时间超过阈值之后,发送保存的采样结果。
Statistical:当计数器或者时间超过阈值之后,以概要的形式发送采样结果;采样结果以线程组(Thread Group)名称和采样标签(Sample Label)进行概要统计。
积累的数据域包括:elapsed time、latency、bytes、sample count、error count,其他数据域将会被丢弃。
Stripped:将成功采样的响应数据移除。
StrippedBatch:将成功采样的响应数据移除,并批次发送。
Custom implementation:将模式参数设置为测试人员的客户化采样发送器的类名。该类必须实现接口SampleSender,并且类的构造函数只有一个
RemoteSampleListener型的参数。
如下属性会影响Batch和Statistical模式。
num_sample_threshold:一个批次中的采样数目(默认为100)。
time_threshold:等待的毫秒数(默认为60秒)。
参考地址:http://jmeter-plugins.org/wiki/PerfMon/
Jmeter 是Java 应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起
JAVA内存溢出错误。为了让jmeter工具提供更大的负载能力,jmeter短小精悍一有了使用多台机器同时产生负载的机制。
如果运行JMeter客户端的机器性能不能满足测试需要,那么测试人员可以通过单个JMeter GUI客户端来控制多个远程JMeter服务器,以便对服务器进行压力测试,
模拟足够多的并发用户。通过远程运行JMeter,测试人员可以跨越多台低端计算机复制测试,这样就可以模拟一个比较大的服务器压力。一个JMeter GUI客户端实例,
理论上可以控制任意多的远程JMeter实例,并通过它们收集测试数据
通过远程运行jmeter,测试人员可以跨越多台低端计算机复制测试,这样就可以模拟一个比较大的服务器压力,一个jmeter客户端实例,理论上可以控制任意多的远程
jmeter实例,并通过他们收集测试数据。这样一样,就有了如下特性:
* 保存测试采样数据到本地机器
分布式测架构
Terminology
Before we dive into the step-by-step instructions, it‘s a good idea to define the terms and make sure
the definition is clear.
Master – the system running Jmeter GUI, which controls the test
Slave – the system running jmeter-server, which takes commands from the GUI and send requests tothe target system(s)
Target – the webserver we plan to stress test
步骤:
1.Slave:在Slave服务器上中,进入到jmeter/bin目录并执行在widnwos系统上的jmeter-server.bat(jmeter-server 在Unix)。
2.Master:在Master服务器作为控制台时,在Master系统中,进入到jmeter/bin目录。
2.1.使用文本编辑打开jmeter.properties文件
2.2.编辑remote_hosts=127.0.0.1
2.3.在remote_hosts=Slave服务器地址,Slave2服务器地址,......
2.4.打开jmeter.properties文件,设置将mode=Standard(默认)注视后,设置mode=Batch,如果不修改mode模式,可能出现并发后result view tree无法收集到响应数据。(配置位于Remote batching configuration板块)
2.5启动jmeter
(1)将Jmeter解压后,拷贝到远程服务器(Linux/Window)中,打开jmeter-server.后,弹出命令窗口,并且不能关闭该窗口。在默认情况下远程服务器中的端口是1099,
如果该端口被占用了,那么可以设置其它端口。在Jmeter的目录下..\apache-jmeter\bin\下找到jmeter.properties文件。
默认端口为1099,不用再修改配置,如果选择修改成为其他端口,可在编辑文件后,找到server_port=1099,根据需求,更改为未被使用的端口。
.
(2)在 Remote batching configuration板块中将mode=Standard前面的#去掉或者修改成为mode=Batch,如果不修改mode前面的#,可能无法收集到Slave服务器
并发的数据。
Batch:当计数器或者时间超过阈值之后,发送保存的采样结果。
(3)查看并发后,查看结果树中的Sample Result数据。
(4)查看结果树中的Response Data数据
以上是在window平台下,进行分布式测试的实践过程,在最后View Result Tree中查看到响应数据,表明已经并发成功。
Linux作为服务端,运行jmeter-server之前,需要安装jdk,安装成后将jmeter的整个文件拷贝到服务器上,本案例是将apache-jmeter-3.0文件拷贝到var/ftp/pub目录下。
在/var/ftp/pub/apache-jmeter-3.0/bin/目录下输入./jmeter-server命令,运行jmeter服务时,出现错误,
提示:Server failed to start:java.rmi.RemoteException: Cannot start. localhost is a loopback address。
输入命令cd /etc进入到目录下,再输入vi hosts进行编辑hosts文件,将里面的IP地址修改成本机地址,然后进行保存。
需要在bin目录下输入命令:./jmeter-server-Djava.rmi.server.hostname=本机IP地址。才能启动成功过,需要输入ps -qa | grep jmeter-server命令或
输入netstat -ntlp命令查看确认是否运行成功。或者修改jmeter-server中的配置,配置如下:
输入vi jmeter-server命令编辑文件,在文件中添加
RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.238.131 #IP地址是本机的地址.
(1)在apache-jmeter-3.0目录下打开jmeter.properties文件,进行编辑。在配置文件中找到remote_hosts,然后添加远程的服务端ip地址和端口好,
例如:remote_hosts=192.168.238.131,192.168.238.128如果需要添加多个服务端,可用都用逗号隔开来配置。配置完成后,打开客户端ApacheJmeter控制台。
(2)在 Remote batching configuration板块中将mode=Standard前面的#去掉或者修改成为mode=Batch,如果不修改mode前面的#,可能无法收集到Slave服务器
并发的数据。
打开控制台后,查看运行-.远程启动-可看到远程的服务端机器的IP地址。
(4)执行任务完成后,查看服务端(Slave)的日志。服务端程序产生一条Starting和Finished记录。
(5)查看并发后,查看结果树中的Sample Result数据。
(6)查看结果树中的Response Data数据
以上是在Linux平台下,进行分布式测试的实践过程,在最后View Result Tree中查看到响应数据,表明已经并发成功。
注意事项:
In some cases, the firewall may still beblocking RMI traffic.
Symantec Anti Virus and Firewall
In some cases, Symantec firewall needs tobe stopped from windows services.
1. open control panel
2. open administrative tools
3. double click services
4. Go to down to symantec anti virus, rightclick and select stop
Windows firewall
1. open network connections
2. select the network connection
3. right click and select properties
4. select advanced tab
5. uncheck internet connection firewall
Linux
On Suse linux, ipchains is turned on bydefault. For instructions, please refer to the “remote testing”
in the user manual.
On RedHat (or derivatives), iptables(netfilter) is turned on by default. Execute “service iptables
stop” to stop the Linux netfilter firewall.
参考地址:
http://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.pdf
http://book.51cto.com/art/201204/327427.htm
打开SOAP UI工具,新建一个SOAP项目,在Initial WSDL输入中输入
http://10.190.130.70:8072/ServiceForEXS.svc?wsdl点击OK按钮。
点击OK按钮后,可看到WCF接口的全部方法名称。
双击PutNetworkStatus后打开右边的窗口公开。
将?替换成测试参数,MCUMapID参数日为气站的MCUID,而Status为气站的状态,1为断开,0为正常。
测试之前MCUID为1000122的气站的状态为断开。
点击运行按钮后,运行成功后,在右边框可看到服务器的响应数据,查看预期的返回值。
在页面上查看气站的状态,显示正常。
打开Jmeter界面后,新建一个ThreadGroup。
选择Thread Group后,右键弹出菜单->Add->Sampler->SOAP/XML-RPCRequest。
复制相应的数据。
将对应的数据拷贝 到SOAP/XML-RPC Request界面中。
选择Thread Group后,右键菜单->Add->Listener->ViewResults Tree
点击运行按钮。
在View Results Tree中查看SamplerResult信息。
查看View Result Tree中的Request信息。
响应数据是期望返回的结果。
以上是WCF的接口测试,而并发测试可参数http的参数化和并发设置去测试。
调用web api处理流程
本次测试接口的方法
测试的方法地址是:api/values/GetEnquiry而发送的参数主要是存放在header中。那么我们下面进行简单测试web API的接口调用。
打开JMeter后,创建在TestPlan下创建一个Thrad Group后,让后在Thread Group下分别创建HTTP Header Manager,HTTP Reqeust,View Results Tree等元素。
点击Start按钮运行测试,运行结果后,点击ViewResults Tree查看结果。
在View Results Tree中,选择一个结果后,查看Responsedata的数据,检查返回数结果是否正确和期望的结果。注意:虽然显示是正确的标记,但不代表数据正确。
也就是说测试过程状态和步骤是正确的,但不代表数据就正确。除了查看Responsedata之外,也可以查看Sampler Result和Result的数据。
在Response Timer VS Threads中查看用户的响应时间。该功能是需要安装插件才可以。如果需要更详细的测试结果,可以根据需求,添加更多的元素组件来进行测试。
添加一个线程组,可根据需求,设置并发数量。
在View Result Tree中查看取样器的数据,检查Reponse Header的数据。
在View Result Tree中查看Request选项卡的POST的json格式数据和请求头信息。
在View Reuslt Tree中查看Response Data选项卡,响应数据正确。
添加一个线程组,可根据需求,设置并发数量。
由于在web api中需要获取http header中的token认证,所以需要在头部设置token的值,另外传送json格式数据,必须要在头部设置Content-Type=application/json,
否则,会导致传输数据错误。
在HTTP Reuqest的Body Data选项卡中添加传送json格式的数据。数据格式为:
{key:”value”,key2:”value2”,……}
在View Result Tree中查看取样器的数据,检查Reponse Header的数据。
在View Result Tree中查看Request选项卡的POST的json格式数据和请求头信息。
在View Reuslt Tree中查看Response Data选项卡,响应数据正确。
以上就是在HTTP Request中输入json格式数据传送到web api的测试方法。
4、设置好多个IP后就可以开始使用jmeter的IP欺骗功能了,这里要注意的是到目前为止,基于http 请求必须使用httpClient4方可成功。
首先我们把设置好的IP保存在cvs文件中方便我们导入到jmeter参数中:
5、在jmeter测试计划中添加配置元件 并配置IP参数
6、对http 请求进行调整
针对每个http都要设置一遍,jmeter在每个并发线程开始时从文件中取一个IP值;
测试结果:
结果可以从服务端通过日志观察变化,也可以通过jmeter 的察看结果树看到效果:
图表含义说明如下:
Label:说明是请求类型,如Http,FTP等请求。
#Samples:也就是图形报表中的样本数目,总共发送到服务器的样本数目。
Average:也就是图形报表中的平均值,是总运行时间除以发送到服务器的请求数。
Median:也就是图形报表中的中间值,是代表时间的数字,有一半的服务器响应时间低于该值而另一半高于该值。
90%line:是指90%请求的响应时间比所得数值还要小。
Min:是代表时间的数字,是服务器响应的最短时间。
Max: 是代表时间的数字,是服务器响应的最长时间。
Error%:请求的错误百分比。
Throughput:也就是图形报表中的吞吐量,这里是服务器每单位时间处理的请求数,注意查看是秒或是分钟。
KB/sec:是每秒钟请求的字节数。
使用分析:
在测试过程中,平均响应时间是我们性能测试的一个重要衡量指标,但是在测试中,特别是在聚合报告中,得出的90%Line,我这里参考《《LoadRunner 没有告诉你的》
之一——描述性统计与性能结果分析》,我认为90%Line等同于该文作者提出的90%响应时间,这个数值对我们性能测试分析也很有参考价值。90%响应时间是说在发送
的请求中,90%的用户响应时间都比得到的数值上要短,同时说明,一个系统在应用时,90%的用户响应时间都能达到这个数值,那么就为系统性能分析提供了很好的
参考价值。
参考地址:http://blog.163.com/huo_jintao/blog/static/6152838020090130331286/
PerfMon Server Agent插件下载地址:https://jmeter-plugins.org/wiki/PerfMonAgent/
旧版本的插件下载地址:https://jmeter-plugins.org/downloads/old/
下载成功后,需要将文件拷贝到jmeter的lib/ext目录下。
在AvailablePlugins选项卡中,选择KafkaSupport插件后,点击ApplyChanges and Restart JMeter按钮就恶意开始下载。
下载的过程中,网速非常缓慢,需要耐心等待,甚至可能下载不成功,需要耐心等待和重试下载多次。
使用JMeter3.0实战之分布式并发测试以及web API接口测试
标签:badboy ... bsp targe 能力 fail param 网站架构 手机
原文地址:http://www.cnblogs.com/ceshi2016/p/6549736.html