A. JMeter:逻辑控制器_If控制器(If Controller)
If控制器 允许用户控制其下的测试元素(其子元素)是否运行。
If Controller的主要用途是控制JMeter执行脚本流程。这基本上意味着只有在某个条件为真时才能运行采样器。
添加if控制器: 线程组 > 添加 > 逻辑控制器 > 如果 (if) 控制器
Expression (must evaluate to true or false) : 表达式(值必须是true或false),也就是说,在右边文本框中输入的条件值必须是true 或 false,(默认情况下)
Interpret Condition as Variable Expression?: 默认勾选项,将条件解释为变量表达式(需要使用__jexl3 or __groovy 表达式)【选中这一项时表示:判断变量值是否等于字符串true(不区分大小写)】
Evaluate for all children?: 条件作用于每个子项
注:
1、文本框上的黄色感叹号,就是提示你,建议采用__jexl3 or __groovy 表达式,以提高性能,也就是默认的方式。
2、if 控制器 只能作用于其下的子项
3、jexl全称:Jakarta Commons Jexl,是一种表达式语言(Java Expression Language)解释器。
在if逻辑控制器的Expression中不能直接填写条件表达式,需要借助函数将条件表达式计算为true/false, 可以借助的函数有__jexl3和__groovy函数。
一、默认用法,采用__jexl3 or __groovy 表达式,控制测试脚本执行流程
如下图,if 控制器下两个访问注册页面的取样器,只有if条件满足时,才会执行该取样器。采用默认方式,将条件1==1,放入 __jexl3表达式中。
假设我们有一个带有两个请求采样器的基本脚本:第一个请求采样器位于If控制器之前一步,而第二个采样器位于其中。让我们添加最简单的条件,以验证执行工作流是否按预期工作:
执行请求后,结果
两个请求都被触发,因为我们的If Controller条件(1 == 1)被返回为true。让我们尝试将其设为false并再次验证脚本执行:
修改f Controller条件(1 == 2)
由于我们的新条件(1 == 2),这个位于If Controller内部的请求没有按预期执行,这显然返回为false。
这是If Controller如何允许您控制脚本执行流程的最简单示例。要防止执行脚本的某个部分,请将其嵌套在If Controller下并将条件设置为false。
注: 如果不知道表达式如何使用,可使用Jmeter 的函数助手,如下:
2、条件中使用变量,注意使用的条件语法
在创建条件时,应该验证它们的语法,因为很容易犯错并不容易捕获。让我们创建一个用户定义的变量,我们可以在测试条件中进一步使用它:
使用函数生成的表达式
$ {channerlCode}变量应该包含'应用宝'字符串,我们可能希望创建的线程组将运行我们的两个请求。我们来看看这个:
if控制器里面的请求,没有执行。那是因为我们的条件语法错误。这是If Controller最常见的错误之一。如果要比较两个字符串,则必须在引号中指定它们(即使对于变量也应使用引号)。让我们尝试修复它并再次运行脚本:
通过上面的脚本场景,说明要注意检查条件语法以防止脚本执行失效。
B. Jmeter 命令行(非GUI模式)执行详解
背景说明:
JMeter执行方式有两种,一种是GUI模式,一种是非GUI模式。
GUI模式就是界面模式,非GUI模式就是命令行模式。GUI模式主要用来编写和调试脚本用的,接口的性能测试最好是采用命令行模式,因为该模式可以和其它框架进行对接,进行自动化测试平台的集成。
非GUI模式适用场景:
1、更省资源,更容易实现多工具集整合;
2、当访问的接口服务需要通过代理服务器才能完成的;
3、当一台机器产生的压力不够时,采用分布式多机远程执行模式,使得一台主控机可以控制多台压力机,同时生成更多的压力请求,达到客户端能模拟大并发请求的目的;
4、可以通过外部传参,让命令行将数据传入到脚本中,使得外部系统调用jmeter时候能更好的进行集成和传参,比如通过jenkins启动和执行接口自动化时,将参数从jenkins的界面传入到jmeter中,就是通过命令行参数进行桥接的。
优点:
1、节约系统资源,无需启动界面
2、便捷快速:仅需启动命令行,输入命令便可执行
3、易于持续集成:可通过shell脚本命令执行
参数详解:
-h 帮助 -> 打印出有用的信息并退出
-n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter
-t 测试文件 -> 要运行的 JMeter 测试脚本文件
-J 是设置本地jmeter属性,引用变量参数
-G 是设置server的jmeter属性
-l 日志文件 -> 记录结果的文件
-r 远程执行 -> 在Jmter.properties文件中指定的所有远程服务器
-H 代理主机 -> 设置 JMeter 使用的代理主机
-P 代理端口 -> 设置 JMeter 使用的代理主机的端口号
使用方法详解:
前提:为了方便管理,在jmeter的安装目录bin下创建一个文件夹testscript用来存放脚本(.jmx文件),再创建一个文件夹testresult用来存放脚本执行后的结果文件。
一、使用JMeter非GUI模式
1、将要测试的jmeter脚本放到testscript目录下
2、cmd打开命令行模式
3、进入到Jmeter安装目录下的bin目录下
4、执行命令:jmeter -n -t examples\testscript\apd_v3.7_perf.jmx -l examples\testresult\apd3.7-reslut.jtl -j report\01-log.log
可以看到以下信息
summary+ 是开始这个时点的报告。
summary= 是总结它之前的报告,呈现出的是当前时点之前总的情况,通常是均值。
最后一个summary=是本次压测总的情况,如果脚本按时正常结束的话,最后一次summary里面的值应该和你从GUI打开聚合报告或概括报告的值一致。
二、无界面分布式压测
当并发量过大单机无法承担需要做分布式压测
执行方法:
1、把脚本和参数文件存放到各台终端相同目录下
2、将每台终端的jmerter-server.bat打开等待主机发号施令
3、在主机命令窗口键入类似以下命令:
jmeter.bat -n -t testscript/Bai.jmx -R 192.168.182.129:1100,192.168.182.130:1200 -l testresult/01-result.jtl -j report\01-log.log
命令中-R代表远程 remote ,后面跟随的是每台终端机jmeter-server窗口显示的 ip 和端口,同样,多台终端之间由逗号隔开,其他都与单机命令一样。于是可以看到各台终端机的jmeter-server窗口有关运行和阶段性summary的信息直至运行结束。总体的报告都在你主机保存的那个.jtl文件里。
C. jmeter 代理录制的脚本怎么使用
启动JMeter,双击运行jmeter.bat。
2
创建HTTP请求默认值。
--添加线程组:右击"测试计划"→添加→Threads(Users)→线程组,建议重命名线程组增强可读性。
--添加HTTH请求默认值:右击"XX线程组"→添加→配置元件→添加HTTP请求默认值。
3
配置HTTP请求默认值。
--服务器名称或IP(Server Name or IP)输入:jakarta.apache.org
--协议(Protocol)输入:http
--端口(Port Number)输入:80
--路径(path)保留为空。
注:jakarta.apache.org(JMeter本地自带有说明文档可用于测试)
END
二、添加HTTP代理服务器
1
添加HTTP代理服务器。
--右击"工作台"→添加→非测试元件→HTTP代理服务器(HTTP(S) Test Script Recorder)。
注:HTTP(S) Test Script Recorder(教新版本)= HTTP Proxy Server (老版本)
2
配置HTTP代理服务器。
--端口(Port域):8088
--目标控制器(Target Controller):测试计划>XXXX(线程组名称)
--添加“包含模式(Patterns to Include)”:如“.*\.html”
--添加“排除模式(Patterns to Exclude)”:如“.*\.gif”
单击底部“开启(Start)”按钮,出现弹窗提示点击”确定”即可。
END
三、配置浏览器代理
1
启动Internet Explore(示例),但不关闭JMeter。
2
配置浏览器代理。
--在IE浏览器中点击工具--Internet选项--连接--局域网设置--选中"为LAN使用代理服务器"。
--输入地址和端口。地址:localhost或本机的IP;端口:8088。
--最后依次点击"确定"。
END
四、操作被访问JMeter界面
1
操作被访问JMeter界面。
--在IE中输入:http://jakarta.apache.org/jmeter/index.html
--随便点击JMeter界面上的几个连接。
--关闭浏览器,将视线转回JMeter窗口上。
END
五、查看结果--添加监.听器
1
添加"查看结果树"。
--右击"XX线程组"→添加→监.听器→查看结构树。
--点击"启动"(Ctrl+R)按钮查看运行结果。
2
添加"聚合报告"
--右击"XX线程组"→添加→监.听器→查看结构树。
--点击"启动"(Ctrl+R)按钮查看运行结果。
D. jmeter录制脚本之后怎么使用
1、启动。
刚才在家里的机器上下载安装了Jmeter2.02版,启动时总是提示“Error oclearcase/"
target="_blank" >ccurred ring initialization of VM Could not
reserve enough space for object heap”,完了,128M的内存跑不起来一个小小的Jmeter
:(。怎么办?修改Jmeter的启动参数“set HEAP=-Xms256m -Xmx256m”“
set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m”,改256->56,128->28。这里只是一个小小的插曲,实际使用时不要这么改哦。好了,可以启动了:)
2、下面说Jmeter中的脚本录制。
(1)选中Test Plan单击鼠标右键,在弹出菜单中选择Add->Thread Group;
(2)接下来选中WorkBench单击鼠标右键,在弹出菜单中选择Add->Non-Test Elements->HTTP Proxy Server;
(3)
在“HTTP Proxy Server”窗口中Target Controller下拉框选择Test Plan > Thread
Group(表示脚本生成在这个线程组下),Grouping下拉框选择Put each group in a new
controller(表示把每组脚本放到一个新的组中,避免生成的脚本杂乱且无法组织);
(4)单击窗口最下方的Start;
(5)打开浏览器,设置代理服务器的设置为localhot,端口号为8080(在“HTTP Proxy Server”窗口中设置了使用8080端口进行侦听);
(6)在地址中键入要录制页面的URL对页面进行操作,Jmeter就会自动把所进行的操作录制成为脚本了,可以看到Thread Group节点下面多了许多的子节点就是录制生成的脚本;
(7)操作完毕后在Jmeter中单击Stop先停止录制,然后把浏览器的代理设置改为原来的设置即可。
3、运行及记录结果设置
(1)
完成脚本的录制后还需要定义你所需的结果设置才算完成了Test Plan的设置,首先要设置Thread
Group(相当于虚拟用户组)的属性,单击Thread Group,在右边的窗口中设置Number of
Thread(相当于虚拟用户数)为5,Ramp-Up Period(in seconds)为1,Loop
Cout选项取消选中Forever,在右边的框中输入2。以上设置表示共有5个虚拟用户,每隔1秒运行一个,迭代2次。
(2)要查看运行的结
果还需要加入Listener,选中Thread Group单击鼠标右键选择Listener->View Results in
Table,通过这个视图可以查看到每个链接的执行情况,包括执行时间和成功与否,再加入Aggregate
Report,通过这个视图可以查看每个Thread Group组的最大、最小和平均响应时间。加入View Results
Tree,通过这个视图可以查看每个链接的执行情况,包括发出的请求和服务器返回的详细内容。
(3)OK,所有的设置暂到此结束,接下载可以运行了。
4、运行及结果查看
(1)OK,运行看看吧,由于设置运行时间较短,所以先选择View Results in Table,然后按下Ctrl+r键开始运行脚本,就可以看到每个请求的运行结果了,还可以单击其他两个结果视图实时查看运行结果。
说了这么多相信读者已经对这个工具有些感性的认识了吧,简单、便捷、跨平台、随手拈来即可使用,是它最大的有点(占内存是Java无法避免的,出现最先一幕)。不过我的本意是想说说使用使用Jmeter进行查询内容参数化的,没想到就简单使用也花费了这么多篇幅,那只有下一节再叙了。
E. jmeter 可以调用python脚本生成变量在请求中使用吗如果可以举例
jmeter 执行python脚本
jmeter 可以通过Jython 执:行python代码
1、下载Jython jar包:http://www.jython.org/downloads.html
后记:
试了下 下最新版本的选择不了python 估计自己的版本太低,他工具里面怎么才能使用自己本地的python有待研究
解决了:
jmeter自己的python 调用本地下载好的python库的方法:
import sys
sys.path.append('/Users/kaibinliu/Desktop/apache-jmeter-3.3/lib/junit')
告诉他库的位置,然后正常调取使用即可
--信息来自网络网页链接
F. jmeter :如何使用命令执行jmeter性能测试脚本
jmeter -n -t 创新项目/pos中心服务业务功能压测.jmx -l result/pos/center.jtl -e -o report/pos
注意这里:
“创新项目/pos中心服务业务功能压测.jmx” :这是我的原始脚本文件
“result/pos/center.jtl ”:是我的结果文件存放路径,center.jtl是每次执行完存放的结果,这个文件是每次执行完时新建的,文件路径提前建立好
report/pos:这是执行完报告的存放路径,提前建立和文件件
G. 如何用ant执行jmeter脚本
1、下载ant
2、配置环境变量
以windows下配置为例
①配置ant环境变量
ANT_HOME=D:Program Filesapache-ant-1.10.0
CLASSPATH=%ANT_HOME%lib
Path=%ANT_HOME%in
②检查ant是否配置成功:命令行输入ant -version
3、将JMeter的extras目录中ant-jmeter-1.1.1.jar包拷贝至ant安装目录下的lib目录中
4、修改JMeter的bin目录下jmeter.properties文件的配置:jmeter.save.saveservice.output_format=xml
5、新建一个脚本存放目录,以及报告存放目录report,将*.jmx(已经调试OK的脚本)拷贝此目录
6、在创建的目录下新建一个build.xml文件(ant自动构建文件)
7、cmd进入脚本上面创建的目录。(即build.xml所在的目录)
8、输入:ant 或 ant run(run为build.xml中的task名),即可执行脚本并生成报告
H. Jmeter中获取运行脚本目录路径
Jmeter中经常要用到相对路径来适应跨平台和分布式,而以运行脚本的路径作为路径参照是为首选。
查找工作台-Property Display里,没有当前脚本路径的参数。而之前以为可用的user.dir参数,也显示的是系统级的用户目录。
参考网上解决方法:
在jmeter源码里,有直接调用的方法,可以在运行时获取当前运行脚本的路径。上面的BeanShell脚本运行后,得到的就是当前运行脚本的目录路径了。再用${__property(file.separator)}获取到当前系统的路径分隔符,就可以拼装任意文件路径了,而且还适应各平台。NICE!