JMeter中共有8类可被执行的元件(测试计划与线程组不属于元件),这些元件中,取样器是典型的不与其它元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效,而其它元件(config elements 、timers 、post-processors、assertions、listeners、)需要与取样器(sampler)等元件交互。
元件会影响其作用范围内的所有元件。
元件在其作用范围内的每一个sampler元件之前执行。
元件对其作用范围内的每一个sampler 有效
元件在其作用范围内的每一个sampler元件之后执行。
元件对其作用范围内的每一个sampler 元件执行后的结果执行校验。
元件收集其作用范围的每一个sampler元件的信息并呈现。
在jmeter中,元件的作用域是靠测试计划的的树型结构中元件的父子关系来确定的,作用域的原则是:
了解了元件有作用域之后,来看看元件的执行顺序,元件执行顺序的规则很简单,在同一作用域名范围内,测试计划中的元件按照如下顺序执行。
关于执行顺序,有三点需要注意:
* 前置处理器、后置处理器和断言等元件只能对 取样器作用,因此,如果在它们的作用域内没有任何取样器,则不会被执行。
* 如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序一次执行。
* 一个断言在测试树中是分等级的。如果它的父元件是请求,它就被应用于那个请求。如果它的父元件是控制器,它就影响所有那个控制器下的所有请求。
使用jmeter进行接口测试
Service,Java应用系统等方面的测试。JMeter本身主要用于性能测试,如系统压力等。除此之外,JMeter能够对应用系统做功能测试和回归测试,如系统压力等。除此之外,JMeter能够对应用系统做功能测试和回归测试,并且能够通过使用带有断言的脚本程序来验证系统然后返回用户期望的结果。为了提高工具的应用灵活性,JMeter允许使用正则表达式创建短剑。正是由于它的灵活性和可扩展性,JMeter组件成为流行的开源测试工具。
支持多种服务类型进行测试;
支持通过录制\回访的方式获取测试脚本;
具备高移植性,是100%的java程序;
采用多线程框架,允许通过多个线程并发取样及通过独立的线程组对不同的功能同时取样;
精心设计的GUI支持高速用户操作和精确计时;
支持缓存和离线的方式分析\回放测试结果
1、界面、安装、协议支持、函数库、成本、开源
2可以实现分布式负载,相对来说Loadrunner更强大一些
3、都支持在windows和linux环境的负载生成器。控制台方面,Jmeter跨平台、而
4、LoadRunner可以指定每个负载生成器运行不同数量的并发用户,而目前Jmeter
5、Jmeter中测试计划之外的数据文件不会一起发送到负载生成器,而LoadRunner
中的文件可以通过选择纳入LoadRunner的管理而一起发送到远端
一步:安装JDK,必须JDK1.7以上,推荐1.8版本
第三步:解压安装到一个英文名称目录下,如C:\
第四步:配置相应环境变量:
开的时候会有两个窗口,Jmeter的命令窗口和Jmeter的图形操作界面,不可以关闭
eter 的主要测试组件总结如下:
1测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
2. 线程组代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请
求内容在Sampler中定义,它被线程组包含。
3监听器负责收集测试结果,同时也被告知了结果显示的方式。
4. 逻辑控制器可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以
5. 断言可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,
即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。
6配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。
7. 前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常
用来修改请求的设置,后置处理器则常常用来处理响应的数据。
8. 定时器负责定义请求之间的延迟间隔。
9.取样器(Sample)是性能测试中向服务器发送请求,记录响应信息,记录响应时
4.JMeter原件作用域与执行顺序
配置元件(config elements ) :元件会影响其作用范围内的所有元件。
前置处理程序(Per-processors):元件在其作用范围内的每一个sampler元件之前执行。
定时器(timers ):元件对其作用范围内的每一个sampler 有效
后置处理程序(Post-processors):元件在其作用范围内的每一个sampler元件之后执行。
断言(Assertions):元件对其作用范围内的每一个sampler 元件执行后的结果执行校验。
监听器(Listeners):元件收集其作用范围的每一个sampler元件的信息并呈现。
总结:从各个元件的层次结构判断每个元件的作用域
关于执行顺序,有两点需要注意:
前置处理器、后置处理器和断言等元件公能对 取样器作用,因此,如果在它们的作用
域内没有任何取样器,则不会被执行。
如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中
meter进行一个简单接口测试的操作步骤如下:
测试计划--添加线程组--添加HTTP Cookie管理器--添加“Http请求默认值”--在“线程
组”里添加“HTTP 请求”的Sampler--设置检查点--添加监听器
首先打开Jmeter,在菜单左侧出现了“测试计划”。在这里测试计划我们可以把它理解成新建的空白项目,在这个空白项目下面可以添加一系列的接口。
添加方法:测试计划--右键--Threads--线程组。
引用性能测试中的描述:这个就是我们通常添加运行的线程。通俗的讲一个线
程组,,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。
线程组中包含的线程数量在测试执行过程中是不会发生改变的。
在接口测试中我们可以把它看成一个接口或者一个业务流程组合而成的多个接口集、或者若干个不相干的接口。在线程组中可以设置线程数和循环次数等。
线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在
这里也就是设置多少个线程数。
准备时长: 设置的虚拟用户数全部启动的时长。如果线程数为20 ,准备时长为10
(秒) ,那么需要10秒钟启动20个线程。也就是平均每秒启动2个线程。
循环次数:每个线程发送请求的个数。如果线程数为20 ,循环次数为100 ,那么每
个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所
有线程会一直发送请求,直到手动点击工具栏上的停止按钮,或者设置的线程时间
可以像浏览器一样存储和发送cookie,如果你要发送一个带cookie的http请求,
求时,都可以用这个cookies。
HTTP请求默认值是为了方便填写后续内容而设置。此处填写域名后,后续的
HTTP请求中就不用填写地址前缀了。
HTTP请求默认值元件并不告诉JMeter来发送HTTP请求,它仅仅定义这个HTTP请求所有的默认值
核心内容为HTTP请求部分,包括接口路径和参数,要注意的是如果参数里面
用到了其他接口的返回值,这时候需要在Body Data中进行参数化,需要进行文件上传,可以使用files upload添加
名称:本属性用于标识一个取样器,建议使用一个有意义的名称。
注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。
服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址。
端口号:的端口号,默认值为80 。
协议:向目标服务器发送HTTP请求时的协议,可以是HTTP或者是HTTPS ,默认
方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、
路径:目标URL路径(不包括服务器地址和端口)
自动重定向:如果选中该选项,当发送HTTP请求后得到的响应是302/301时,
JMeter 自动重定向到新的页面。
式进行HTTP通信,默认选中。
同请求一起发送: 在请求中发送URL参数,对于带参数的URL ,jmeter提供
了一个简单的对化的方法。用户可以将URL中所有参数设置在本表中,表中的每一行是一个参数值对(对应URL中的 名称1=值1)。
响应断言类似LoadRunner中的检查点,检查接口是否访问成功。如果检查失
败的话会提示找不到断言的内容,没提示的话就代表成功了。对于自动化测试来
说,断言必须要有的,如果没有断言我们只能人眼对比对接口返回的数据,有了
断言功能,就会简化这个过程。
对于Jmeter来说返回数据为文本,所以,这里可以勾选“响应文本”。
模式匹配规则:包括、匹配、Equals、Substring。这里只需要验证返回数据
中是否包含主要的关键字,所以,这里勾选“包括”。
l 包括:返回结果包括你指定的内容
l 匹配:根据指定内容进行匹配
Equals:返回结果与你指定内容要一致
l Substring:返回结果是指定内容的字符串
当模匹配规则为“包括”和“匹配”时,支持正则表达式;当为“Equals”或
要测试的模式:其实就是断言的数据。点击“添加”按钮,输入要断言的数
添加方法:线程组 -->右键添加 -->监听器 -->察看结果树。一般还会一并添加
树状形式显示接口的访问结果,包括请求结果、请求内容、服务器的响应内容。
http请求头设置在Jmeter中需要使用到HTTP信息头管理器。该属性管理器用
于定制Sampler发出的HTTP请求的请求头的内容。不同的浏览器发出的HTTP请求
具有不同的Agent,访问某些有防盗链的页面时需要正确的Refer..这些情况下都需要通过HTTP信息头管理器来保证发送的HTTP请求是正确的。
要发送https的请求,需要在http请求或者http请求默认值做如下配置:
要发送HTTPS的请求,需要在HTTP请求或则HTTP请求默认值做如下配置:
发送带参数的post请求:
第一步:需要在HTTP信息头管理器添加一条名称为 Content-Type,值为
第二步:如下图操作,把json数据放入到Body Data中
关联通俗来讲就是把上一次请求的返回内容中的部分截取出来保存为参数,
用来传递给下一个请求使用。
从上一个请求中取,使用正则表达式提取器。
具体方法,在需要获得数据的请求上右击添加一个后置处理器-->正则表达式提取
引用名称即下一个请求要引用的参数名称,如填写title,则可用${title}引用它。
正则表达式中()括起来的部分就是要提取的。.代表任意字符,+表示一次或多次,
模板,用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$,
$3$等等,表示解析到的第几个值给title。
匹配数字,0代表随机,-1代表所有,其余正整数代表将在检查的内容中,第几个
如下变量的值将会被设定:
设置参数值的方法有如下几种:
1、添加“配置元件”->“用户定义的变量”
2、“名称”中输入变量名称,此处以登录为例,定义两个变量username和
__StringFromFile从csv或dat文件中读取,还可以通过前缀加随机数的方法设置参数。
1、添加“配置元件”->“用户定义的变量”
2、“名称”中输入变量名称,此处以登录为例,定义两个变量username和
__StringFromFile从csv或dat文件中读取,还可以通过前缀加随机数的方法设置参数。
加载中,请稍候......