⑴ 怎么用myeclipse来形成jmeter中的测试报告
1. 下载jmeter源码,可以从下面SVN路径上下载:
这里需要说明一下,如果你的jdk版本等于或者高于1.6,最好下载主干的代码(TRUNK),否则在后面编译的时候会遇到各种由于JAVA版本不匹配导致的问题。
2. 代码下载完成之后,我们需要配置ant,即使你用的是myeclipse,它里面已经继承好了ant,但是我还是建议你自己在配置一版。 ANT的配置很简单。
下载,之后配置ANT_HOME ,path和classpath即可。
比如我的为:
ANT_HOME=C:\apache-ant-1.9.4
Path 后面添加%ANT_HOME%\bin
Classpath 添加%ANT_HOME%\lib
配置完成后可以在cmd中输入命令ant进行验证
3. Ant安装完成后,我们可以从cmd中进入我们刚刚下载的jmeter源码目录下,首先用
ant –p 可以看到build.xml中的编译项,其中all为默认编译项。
最关键的一步,输入ant download_jars,它会自动下载需要的jar包,最后结果为Build success,则表示成功。
4. 包下载完成之后,我们现在在命令行直接输入ant即可进行编译。但是要想在myeclipse中进行编译还需要把我们下载到lib目录下的所有jar包倒入才行。
倒入方法: 右键项目名称->build path->configure build path
5. 所有的jar导入完成后,右键build.xml文件->run as->ant build可以进行编译,但是还是不能够像其它java项目一样直接run as运行以及debug。此时还需要后续关键的配置。
6. 右键项目名称->properties->builders里新建编译项。
1. 右键项目名称->run as-> java application
之后会搜索jmeter的主函数,jmeter的主函数在package org.apache.jmeter中,类名为NewDriver。
8. 设置完成后尝试运行,后可能会遇到读取properties的文件的路径错误的问题,该问题的原因是因为在NewDrivers类中的下面代码:
tmpDir = System.getProperty("jmeter.home","");// Allow override $NON-NLS-1$ $NON-NLS-2$
我们可以将其屏蔽之后用下面的代码替换即可。
tmpDir = System.getProperty("user.dir","");
⑵ Jmeter 问题锦集
java.io.FileNotFoundException:rmi_keystore.jks
文件校验问题
1、不进行文件校验,打开 [ jmeter 安装目录 ]\bin\jmeter-server.bat 文件
2、运行 create-rmi-keystore.bat (Windows)/ create-rmi-keystore.sh (Linux) 文件并自行填写相关信息,运行后,bin 目录下会多出一个 rmi_keystore.jks 文件,然后将这个文件拷贝到想要运行的 slave 机上,就可以不使用方法1
Error in rconfigure() method java.rmi.ConnectException: Connection refused to host: 192.168.xxx.xxx; nested exception is:
java.net.ConnectException: Connection timed out: connect
1、192.168.xxx.xxx 这个IP 可能是虚拟网卡的 IP,关闭所有的虚拟网卡,只保留本地网络
2、检查slave服务器的防火墙是否打开,需要关闭
3、通信双方的机器没有识别到有效的远程IP,考虑将远程方法调用服务器的主机IP进行固定设置,再作效果检查
4、开始测试,但是测试速度非常慢,测试结果也是非常大的值,检查slave服务器和被测试服务器之间是否可以 ping 通地址
第3点分析相应解决方法:
Master机修改 jmeter.bat (windows)/ jmeter.sh (Liunx)
Error in rconfigure() method java.rmi.ConnectException:Connection refused to host
1、查看端口是否被占用
1、更换端口
java.net.ConnectException:Connection timed out:connect
由于连接被拒绝,这意味着防火墙可能已切断连接
需要在JMeter和目标服务器之间打开端口
Response too large to be displayed. Size: 412152 > 204800
未设置察看结果树的大小
1、打开 [ jmeter 安装目录 ]\bin\user.property 文件
2、右击测试用例——添加——监听器——保存响应到文件, 填写要保存的文件名
3、将文件中的返回结果粘贴到此用例的响应断言中
Not able to find Java executable or version. Please check your Java installation. errorlevel=2
1、errorlevel=1,当前系统安装的 jdk 版本过低
2、errorlevel=2,没有配置 jdk 环境变量所致
3、errorlevel=3,当前系统安装的 jdk 版本过低,不符合 jmeter 要求所致
通用方法:
配置对应这个 jmeter 版本的 jdk 版本的环境变量
第1点分析,其他解决方法:
打开 jmeter.bat 文 件,注释 set DUMP=-XX:+HeapDumpOnOutOfMemoryError
Bad call to remote host
1、检查 salve 机器上的 jmeter-server 是否启动
2、检查 JMeter.properties 中 remote_hosts 的配置是否错误
1、启动 salve 机器上的 jmeter-server
2、正确配置 JMeter.properties 中 remote_hosts
1、Non HTTP response message: The target server failed to respond
2、Non HTTP response code: java.net.SocketException
调整超时时间,jmeter 的 http 请求中,工具会默认勾选 Use KeepAlive ,在运行时,jmeter.properties 中的 httpclient.timeout 设置默认是注销的,也就是连接空闲,立马断开
打开 [ jmeter 安装目录 ]\bin\jmeter.properties 文件
根据情况设置10-60毫秒,能解决报错问题,问题还是没有真正解决
Server failed to start: java.rmi.RemoteException: Cannot start. *** is a loopback address.
An error occurred: Cannot start. *** is a loopback address.
没有指定主机导致这个错误
1、修改 hosts 文件
2、打开 [ jmeter 安装目录 ]\bin\jmeter.properties 文件
Waiting for possible shutdown message on port 4445
在 master 跑测试脚本时,会一直提示如下信息,导致测试一直跑不起来
这个是用于监听shutdown message的,如果不需要,可以直接设置为0即可
打开 [ jmeter 安装目录 ]\bin\jmeter.properties 文件
Could not reserve enough space for 2097152KB object heap
errorlevel=1
Jmeter 内存不足
打开 [ jmeter 安装目录 ]\bin\jmeter.bat 文件
could not find ApacheJmeter_core.jar
找不到 jdk 环境
1、正确安装对应版本的 jdk
2、正确设置环境变量
jmeter.gui.action.RemoteStart: Failed to initialise remote engine java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
配置了 127.0.0.1,但是未开启本机的 jmeter-sever.bat/jmeter-sever
开启本机的 jmeter-sever.bat/jmeter-sever
运行成功,响应断言也正确通过,但是察看结果树里为空
模式(Mode)(采样结果发送模式)默认是Standard,在采样结果产生后立即发送
打开 [ jmeter 安装目录 ]\bin\jmeter.properties 文件
Response code: Non HTTP response code: java.net.SocketTimeoutException
Response message: Non HTTP response message: connect timed out
发生该错误时,jmeter已经连接上服务器,查看load time没有超过设定的request timeout时间,错误可能的原因是,服务器那边未处理该线程的请求,或者为保证服务能力,断掉了连接。
为了验证该猜想,持续大于半小时向服务器发送该并发数量的请求,一段时间后,request收到503的response,证明猜想
无
Java.NET.BindException: Address already in use: connect
短时间内new socket操作很多,而socket.close()操作并不能立即释放绑定的端口,而是把端口设置为TIMEWAIT 状态,过段时间(默认240s)才释放,(用netstat -na可以看到),最后系统资源耗尽(windows上是耗尽了pool of ephemeral ports ,这段区间在1024-5000之间)
在运行 JMeter agent 的机器上,添加注册表条目HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
jmeter脚本运行的过程中,服务器性能参数没有明显变化 (CPU,内存,I/O),但request的响应时间很长。
观察jmeter agent机器网络使用情况,网络使用持续达到带宽的限制峰值。request 发送的过程中pending在网络中,实际并发的request并没有同一时间到达服务器,所以服务器没有明显变化。
提高jmeter agent机器网络带宽。
java.io.IOException: Error writing to server
java.net.SocketException: Connection reset
可能是本机的 JVM 太小了
打开 [ jmeter 安装目录 ]\bin\jmeter.bat 文件
java.net.SocketException: Unrecognized Windows Sockets error: 0: recv failed
无
打开 [ jmeter 安装目录 ]\bin\jmeter.properties 文件
java.net.SocketTimeoutException: Read timed out
无
打开 [ jmeter 安装目录 ]\bin\jmeter.properties 文件
For performance it is advised to check "Interpret Condition as Variable Expression"
and use __jexl3 or __groovy evaluating to true or false or a variable that contains true or false.
${JMeterThread.last_sample_ok) can be used to test if last sampler was successful
对于4.x之后的版本 JMeter 中的 If Controller,在Expression输入框中直接输入判断的表达式,如1 == 1、${threadNum} > 2,而不做求值计算(true/false)就执行JMeter是没有效的,达不到预期的效果。采用JMeter比较早期的版本(如:2.x版本),直接就写判断的表达式,并没有作真假求值运算也能被识别
1、在Expression输入框中,建议将判断条件解释为变量表达式,并使用__jexl3函数或__groovy函数对该变量表达式求值为true/false
2、可输入值为true/false的变量
3、${JMeterThread.last_sample_ok}可用于检测最后一个取样器是否成功执行
java.lang.IllegalStateException: Engine is busy - please try later
1、可能是防火墙规则被阻止
2、控制机、执行机未设置需要连接的IP
1、关闭控制机、执行机的防火墙
2、打开 [ jmeter 安装目录 ]\bin\jmeter-server 文件
3、打开 [ jmeter 安装目录 ]\bin\system.properties 文件
Response code: Non HTTP response code:org.apache.http.conn.ConnectTimeoutException
Response message: Non HTTP responsemessage: Connect to 10.15.107.112:9089 timed out
Non HTTPresponse code 说明没有收到来自服务器的 response。
导致 ConnectTimeoutException 错误的可能有 JMeter 本身问题,也可能是服务器问题。
通过分布式运行 JMeter 的方式来消除 JMeter 本身的影响
⑶ (二)jmeter完成一个简单接口测试和断言
day3
系统提供的web计划里包含哪些组件?
线程组
--HTTP请求默认值
--HTTP cookies管理器
--HTTP 信息头管理器
--HTTP请求
----响应断言
--测试活动
----统一随机定时器
--HTTP 请求
----响应断言
--查看结果树
day4,day5
使用jmeter完成一个简单的接口测试,并且进行断言(熟悉操作),即访问www..com,并测试返回结果中包含文字“”网络一下“”
1.单击 文件--新建,创建了一个测试计划
2.在测试计划上右击--添加-线程(用户)-线程组
3.在线程组上右击-添加--取样器--HTTP请求
4.在线程组上右击-添加-监听器-查看结果树,断言结果(分别点击这两项)
5.在HTTP请求上右击-添加-断言-响应断言
6.在HTTP请求页面中的协议:http,服务器名称或IP:www..com
7.在响应断言 页面中,选择 测试字段 为响应文本,模式匹配规则 为 字符串 ,测试模式 添加文字:网络一下
8.点击绿色的三角形 运行,这时如果没有保存 会弹出 一个提示框问你是否要保存,这时点击YES
点击运行成功后,点击 查看结果树,是红色的叉叉,请求成功,但是断言失败了
分析原因:
既然是断言失败了,问题就出在请求的响应信息,我们先去检查响应信息,发现里面有乱码
现在的问题是如何解决乱码,解决方案有两个:
一 添加BeanShell PostProcessor
1. 在 线程组 右击--添加-后置处理器-BeanShell PostProcessor
2.在该页面中的script中增加 prev.setDataEncoding("utf-8");
3.保存后,点击绿色三角运行
4.查看结果树,这时是绿色通过的,接口测试完成
二 修改jmeter配置文件
1进入Jmeter的bin目录下,找到jmeter.properties文件,以文本形式打开
2 ctrl+F 输入sampleresult.default.encoding,找到这一行
3默认这行是注释的,将ISO-8859-1修改成utf-8,去掉注释符号,重启Jmeter
4.再次请求时会发现响应中不会有乱码了。
⑷ 今天安装了Jmeter,如何测试Jmeter是否安装成功呢
linux环境还是windows环境?
如果是linux环境,到bin目录下:./jmeter.sh XX.jmx(所要运行的测试脚本,没有的话,examples目录下有个)
如果有进程启动,且jmeter.log中没有错误信息就安装成功了;
如果是windows环境,双击“jmeter.bat”文件,如果弹出对话框,就成功了
⑸ 系统权限是后台验证的 jmeter怎么使用
一、配置java环境1:先查看系统32/64:uname-a根据系统的版本去Oracle官网下载jdk,下载后安装jdk即可。2:配置JAVA环境变量:vi/etc/profile追加如下内容:JAVA_HOME=/opt/jdk1.6.0_20PATH=$JAVA_HOME/bin:$PATHCLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/tools.jarexportJAVA_HOMEexportPATHexportCLASSPATH其中的JAVA_HOME为jdk的安装路径3:验证echo$PATH或者java-version二、安装resin下载resin后,解压运行安装脚本:./resin.shconsole。然后在自己pc上访问serverip:port看到resin默认欢迎页面即说明安装成功。之后把在web项目的war包拷进ren目录下的webapps文件夹内,即可在外网访问服务器上的web项目了。三、安装jmeter下载:同样在jemeter官网下载对应的安装包,解压后执行:./jmeter-n-t../ssdb_test.jmx-l../log.jtl命令说明:a.-n参数说明不用验证是否安装了图形库b..jmx文件可以在windows环境下的用jmeter图形化生成,涉及参数以及测试结果的.csv文件路径可以直接用notepad++vi等修改.jmx文件,确保其相对于.jmx文件路径正确。c.log.jtl保存测试结果既然没装图形界面库,那么测试结果.jtl文件就只能在windows下用jmeter来查看了。执行效果如下:[@zjm_44_250bin]#./jmeter-n-t../ssdb_test.jmx-l../log.../ssdb_test.jmxStartingthetest@MonDec2918:43:20CST2014(1419849800772)=100in0.3s=289.9/sAvg:105Min:3Max:285Err:0(0.00%)Tidyingup@MonDec2918:43:21CST2014(1419849801734)endofrun最后,执行命令:/home/apache-jmeter-2.8/bin/jmeter-n-tdownload.jmx-llog.jtllinux下最好输全路径,不然可能报bash:jeter:commandnotfound,找不到执行文件错误,参数介绍如下:--guimode-t[].-l[].-.properties()/proxyserverinformation:-H[]-P[proxyserverport]
⑹ JMeter 接口/并发/性能测试(详尽版)
Jmter工具设计之初是用于做性能测试的,它在实现对各种接口的调用方面已经做的比较成熟,因此,本次直接使用Jmeter工具来完成对Http接口的测试。因为再做接口测试时可以设置线程组,所以也可做接口性能测试。
本篇使用JMeter完成了一个完整的Http接口性能测试流程,从脚本编写(工具化生成),执行到最终结果分析。
> 接口地址 :我们选取最常见的网络搜索接口:https://www..com/s?ie=utf-8&&wd=新闻
ie:编码方式,默认为utf-8
wd: 搜索词
> 返回结果判断 (断言):
搜索结果,我们可以通过校验结果中是否含有搜索词wd来判断本次请求成功或失败。
> 依次进行如下操作:1) 添加线程组 2)添加请求&http消息头管理器 3)添加结果监听器(察看结果树 )
4)添加用户自定义变量 *)添加定时器(集合点)
5)添加请求的断言 6)添加断言结果 7)添加聚合报告 8)执行
9)结果分析(分析测试报告)
1) 添加线程组
添加虚拟用户组(Thread Group),这些虚拟用户用来模拟访问被测系统
一个 线程组(Thread Group) 等于 一组虚拟用户(virtual users group) ,
一个Java线程 等于 一个用户
2)添加请求、添加 http消息头管理器
2.1)添加请求
接下来的一步就是要加入实际被测页面,右击“线程组” > “添加” > “Sampler” > “HTTP请求”。
ps: 参数,用于get 或put请求;消息体数据用于post 请求; -----很重要,很容易出错!
2.2)http消息头管理器
3)添加察看结果树
添加结果监听器(察看结果树 ), “监听器”让用户来观察测试结果
运行后点击左侧观察结果数,查看请求执行结果,红色为失败,绿色为成功,如下图:
4)添加用户自定义变量 &集合点
用户自定义变量 -,需要再HTTP请求处,手动修改请求中为变量形式 ${wd}
*)添加集合点
5)添加请求的断言 6)添加断言结果
7)添加聚合报告
8)执行
至此,就完成了一个完整Http接口的JMeter性能测试脚本编写,点击运行即可
>查看运行日志, “选项” > “Log Viewer”看看运行的日志。如果你还是看不到日志,你可以点击下面所示的三角箭头展开或者收起日志视图
9)结果分析(分析测试报告)
待性能测试执行完成后,打开聚合报告可以看到:
10) 脚本查看
可以使用编辑器查看.jmx文件,如下图所示:
⑺ 使用jmeter做接口测试,怎么验证,核对响应结果中json的内容
每一个http请求下面加入jp@gc - JSON Path Assertion
a.在jp@gc - JSON Path Assertion中的
1.JSON Path中填入你所需要验证的json中某一个参数(例子:$.ErrorMessage )
2.Expected Value中填入你需要这个json中某一个参数的值是多少(例子:null)
b.这样再在下面加一个查看结果树 就可以看到这个接口请求是否请求成功
⑻ 如何用jmeter测试本机上的软件
1.打开Java编译器,新建一个项目"TestLength",然后新建一个包"app".2.从Jmeter的安装目录lib/ext中拷贝两个文件"ApacheJMeter_core.jar"和"ApacheJMeter_java.jar"到"Tester"的项目中,然后引入这两个JAR文件.(具体的引入方法参考各个Java编译器的使用方法)3.在"app"包中新建一个类,名字叫"TestLength",不过这个类要继承"AbstractJavaSamplerClient"类,如果项目引入步骤二中的两个文件,就可以找到"AbstractJavaSamplerClient"类了.4."TestLength"类在继承"AbstractJavaSamplerClient"类的同时也会继承四个方法,分别是"getDefaultParameters","setupTest","runTest"和"teardownTest"方法."getDefaultParameters"方法主要用于设置传入的参数;"setupTest"方法为初始化方法,用于初始化性能测试时的每个线程."runTest"方法为性能测试时的线程运行体;"teardownTest"方法为测试结束方法,用于结束性能测试中的每个线程.5.具体实现代码如下:packageapp;importorg.apache.jmeter.config.Arguments;importorg.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;importorg.apache.jmeter.protocol.java.sampler.JavaSamplerContext;importorg.apache.jmeter.samplers.SampleResult;importcom.passpod.core.t8.*;/***@author乐以忘忧***Window-Preferences-Java-CodeStyle-CodeTemplates*/{privateSampleResultresults;privateStringtestStr;//初始化方法,实际运行时每个线程仅执行一次,在测试方法运行前执行,类似于LoadRunner中的init方法publicvoidsetupTest(JavaSamplerContextarg0){results=newSampleResult();testStr=arg0.getParameter("testString","");if(testStr!=null&&testStr.length()>0){results.setSamplerData(testStr);}}//设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter的参数列表中(){Argumentsparams=newArguments();params.addArgument("testStr","");//定义一个参数,显示到Jmeter的参数列表中,第一个参数为参数默认的显示名称,第二个参数为默认值returnparams;}//测试执行的循环体,根据线程数和循环次数的不同可执行多次,类似于LoadRunner中的Action方法publicSampleResultrunTest(JavaSamplerContextarg0){intlen=0;results.sampleStart();//定义一个事务,表示这是事务的起始点,类似于LoadRunner的lr.start_transactionlen=testStr.length();results.sampleEnd();//定义一个事务,表示这是事务的结束点,类似于LoadRunner的lr.end_transactionif(len<5){System.out.println(testStr);results.setSuccessful(false);//用于设置运行结果的成功或失败,如果是"false"则表示结果失败,否则则表示成功}elseresults.setSuccessful(true);returnresults;}//结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行,类似于LoadRunner中的end方法publicvoidteardownTest(JavaSamplerContextarg0){}}6.把上面的例子打包,然后把生成的"TestLength.jar"文件拷贝到Jmeter的安装目录lib/ext下.7.运行Jmeter,添加一个线程组,然后在该线程组下面添加一个Java请求(在Sampler中),在Java请求的类名称中选择咱们刚创建的类"app.TestLength",在下面参数列表的"testStr"后面输入要测试的字符串,然后添加一个监听器(聚合报告),设置一下模拟的用户数就可以测试了.如果测试不成功,Jmeter会在它自己个输出框中抛出这个字符串.通过上面的例子我们可以发现,使用Jmeter自定义Java测试代码,配合Jmeter自带的函数,就可以实现出LoadRunner中"JavaVuser"协议的绝大多数功能,而且是没有用户数限制和完全免费的(嘿嘿).上面的例子非常简单,而且没有任何实际意义,只是一个简单的Jmeter测试代码示例,用于抛砖引玉,希望大家一起交流,共同进步.