用户定义的变量:用户可以自己定义变量,在用到此变量的时候直接用${变量名}引用即可。例:变量名=url,值=http://www.baidu.com,在需要http://www.baidu.com时直接用${url}即可。
名称:为线程组起名字。
线程属性-线程数:设置发送请求的用户数目 ,即并发数。
线程属性-ramp-up period(in second):线程间的时间间隔,单位是秒。即所有线程在多少时间内启动。
线程属性-循环次数:请求的重复次数,如果选择后面的forever(默认),那么 请求将一直继续,如果不选择forever,而在输入框中输入数字,那么请求将重复指定的次数,如果输入1,那么请求将执行一次,如果是0,会出现问题。
调度器配置-启动时间:测试计划什么时候启动,启动延迟会覆盖它。
调度器配置-结束时间:测试计划什么时候结束,持续时间会覆盖它。
调度器配置-持续时间:测试计划持续多长时间,会覆盖结束时间。
调度器配置-启动延迟:测试计划延迟多长时间启动,会覆盖启动时间。
jmeter主要组件介绍-取样器(http请求)
名称:http请求的名字。
web服务器-服务器名称或ip、端口号,脚本录制时自动添加,也可以使用“用户自定义变量”。
http请求:用默认值即可。
同请求一起发送参数:请求中的参数、值可以在此设置,需要用到参数化及动态数据关联,我们在后面专门介绍。
同请求一起发送文件:我可以制定同请求一起发送哪个文件。
其他任务包括:从html文件中获取所有内含的资源、用作监视器、embedded urls must match
监听器(listener)负责收集测试结果,同时也被告知了结果显示的方式。我们常用的包括:聚合报告、查看结果树、用表格查看结果,都支持将结果数据写入文件。其他的添加上去看看就行。聚合报告前面我们介绍过,后面是查看结果树和用表格查看结果的截图。
jmeter主要组件介绍-监听器(用表格查看结果)
jmeter主要组件介绍-逻辑控制器
逻辑控制器(logic controller)可以自定义jmeter发送请求的行为逻辑,它与sampler结合使用可以模拟复杂的请求序列。
循环控制器可以设置请求的循环次数或永远循环(如果选中永远的话)。
事务控制器可以将多个请求放在同一个事务中。如果选中gegerate parent sample,则聚合报告中只显示事务控制器的数据,而不会显示其中的各个请求的数据,反之则全部显示。
jmeter主要组件介绍-断言
断言(assertions)可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。
jmeter主要组件介绍-配置元件
配置元件(config element)维护sampler需要的配置信息,并根据实际的需要会修改请求的内容。我们主要在参数化中用到csv data set config
jmeter主要组件介绍-前置处理器和后置处理器
前置处理器(pre processors)和后置处理器(post processors)负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。我们主要在动态关联中用到后置处理器的正则表达式提取器。
jmeter主要组件介绍-定时器
定时器(timer)负责定义请求之间的延迟间隔。
参数化设置
在我们的测试计划中我们使用的都是http请求,在http请求中常常会提交一些参数,我们为了不想在每一次请求中都使用相同的参数值,就要想办法让每一次请求的参数的值都是不一样的,我们就需要进行参数化设置,这里我们介绍两种参数化设置的方法。
一种是利用函数助手中的_random函数进行参数化设置;
一种是利用配置元件中的csv data set config进行参数化设置。
参数化设置-函数助手(1)
jmeter中有一个函数助手的功能,里面内置了多个函数,我们可以利用其中的_random函数来进行请求中的参数化设置。
在jmeter中选择“选项-函数助手对话框”打开函数助手对话框。
选择一个功能_random。
设定最小值为1。
设定最大值为100。
函数名称设为func1。
点击生成将生成一个引用字符串${_random(1,100,func1},在需要的请求参数中拷贝该字符串即可。
其中函数名称用来在引用中作区别,即我们可以设定不同的名称在不同的地方引用同一个函数的功能
例如:我们生成了两个串${_random(1,100,func1)}、 ${_random(1,100,func2)},在添加图书的请求中,我们在bookname的参数值中引 用${_random(1,100,func1)},在bookconcern的参数值中应用${_random(1,100,func2)},见截图, 这样测试运行时不同的线程将产生不同的bookname和bookconcern。
参数化设置-csv data set config(1)
在线程组上点击右键选择添加-配置元件-csv data set config,打开csv data set config。
filename文件名:即参数化要引用的文件名。这里是d:\number.txt
file encoding文件编码:可以不填。
variable names(comma-delimited)变量名(用逗号分割):多个变量可以引用同一个文件,用逗号分割。这里是num1,num2
delimiter(use ‘\t’ for tab):参数文件中多个变量值的分隔符,\t表示用tab键分割,默认是逗号。
recycle on eof?:结束后是否循环?默认是true.
number.txt文件内容见截图。
参数化设置-csv data set config(2)
在添加图书的请求中,我们在bookname的参数值中引用${num1},在bookconcern的参数值中应用${num2},见截图,这样测试运行时不同的线程将产生不同的bookname和bookconcern。
动态数据关联
在http请求的参数中经常会遇到一些参数的值是从服务器相应的动态数据,这些数据需要进行关联才能使得每一次请求都能成功得被服务器接受,在jmeter中采用正则表达式提取器来获取这些动态的数据。
正则表达式允许用户从服务器响应中获取数据,作为一个后置处理器,正则表达式提取器会在每一个请求执行后再执行,正则表达式提取请求的参数值,产生模板字符串,并将结果保存到给出的变量中。
动态数据关联(1)-正则表达式提取器
在http请求的参数中经常会遇到一些参数的值是从服务器相应的动态数据,这些数据需要进行关联才能 使得每一次请求都能成功得被服务器接受,在jmeter中采用正则表达式提取器来获取这些动态的数据。比如我们想要获得从服务器相应的token,就可以 使用下面的正则表达式提取器。
使用时就可以使用${token_g1}来表示获取到的token值。如下图:
使用命令行运行jmeter脚本
jmeter -n -t my_test.jmx -l log.jtl
-n告知jmeter采用非图形化运行jmeter脚本
-t指定要运行的脚本文件
-l指定保存执行结果的文件名
执行命令前要检查当前目录是否是%jmeter_home%\bin 目录;
如果 jmeter 脚本不在当前目录,需要指定完整的路径;如果要把执行的结果保存在其他地方也要指定完整的路径。
利用xslt分析jmeter结果文件(1)
将结果文件的扩展名改为xml,例:将log.jtl改为log.xml。
在log.xml的文件头
中添加
使之变成
其中href指定xsl文件的路径,如果与xml文件在同一目录,则只写文件名即可,否则要写明详细路径。
利用xslt分析jmeter结果文件(2)
将修改后的xml文件用浏览器打开即可得到统计结果
jmeter中进行分布式测试
作为一个纯 java 的gui应用,jmeter对于cpu和内存的消耗还是很惊人的,所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心, 甚至还会引起java内存溢出的错误。不过,jmeter也可以像 loadrunner 一样通过使用多台机器运行所谓的代理来分担负载产生器自身的压力,并借此来获取更大的并发用户数,我们只需手动配置一下即可。
1、在所有期望运行 jmeter作为 负载产生器的机器上安装jmeter,并确定其中一台机器作为 控制器,其他的机器作为 代理。然后运行所有 代理 机器上的jmeter-server.bat文件—假定我们使用两台机器172.20.80.47和172.20.80.68作为 代理;
2、在controller 机器的jmeter安装目录下找到 bin 目录,再找到 jmeter.properties 这个文件,使用记事本或者其他文字编辑工具打开它;
3、 在打开的文件中查找“remote_hosts=”这个字符串,你可以找到这样一行“remote_hosts=127.0.0.1”。其中的 127.0..0.1 表示运行jmeter代理的机器,这里需要修改为“remote_hosts=172.20.80.47,172.20.80.68”;
4、保存文件,并重新启动控制器机器上的jmeter,并进入启动 ->远程启动菜单项。就会看到我们刚才添加的两个代理的地址,选中即可运行,如果想同时启动所有代理,选择远程全部启动即可。
要进行分布式测试代理机器上需要添加环境变量,即添加用户变量jmeter_home=d:\jmeter,系统变量中的path中添加d:\jmeter\bin(假设jmeter放在d盘根目录下)。