JMeter学习1

 

Jmeter的组织方式相对比较扁平,直接是TestPlan(相当于Project),TestPlan下创建的ThreadsGroup(相当于TestCase),

Jmeter一个TestPlan也是一个jmx(xml)文件,无法分割,

jmeter测试计划是一系列配置器、线程组、控制器、取样器、断言、监听器、定时器、组成的集合。

jmeter运行时会首先运行配置器,然后启动线程组,全部线程组中取样器的执行结果会在配置的监听器中出现。

虽然从界面上可以在测试计划节点上添加监听器、断言,但是绝大多数情况下,不需要在根节点配置这两类器件。

线程组
线程组是一组器件是一系列配置器、控制器、定时器、simpler、断言、监听器的集合。线程组的线程数量、执行次数、启动时间都是可以配置的,线程启动会顺序执行下属的配置器、控制器、定时器、simpler、断言、监听器,实现一系列保护测试逻辑的操作。

采样器(simpler)
可以理解为对被测试目标的一次请求或调用。jmeter原生提供了和多常用的采样器,http、bsf、jsr223、jdbc等,一般情况下,进行web后端测试使用http、bsf、jsr223这三个类型的采样器加上对应的控制器已可以满足需要了。jmeter中配置器主要用于管理采样器的参数或变量。

控制器(logic contoller)
控制器,这一类器件用于控制线程组内部的采样器的执行逻辑,以http采样器为例,可以通过loop控制器定义某个或某几个采样器的执行次数,可以通过if控制器定义某个采样器执行后接下来执行那个采样器。逻辑控制器的作用和各种语言中的逻辑控制语句非常相似,所以使用过任何计算机语言的应该都和容易理解。控制器用于在线程组内通过采样器实现各种测试逻辑,可以定义采样器执行的条件可以让采样器循环执行等。

定时器(timer)
定时器,定时器一般只在线程组中使用,作用实际上是让线程等待一段时间,jmeter提供了多种定时器。

断言
断言是一种条件判断器件,断言为真时,jmeter认为采样器的执行结果为成功,反之亦然,断言一般情况添加在采样器上,采样器执行完毕jmeter会调用采样器上的断言,根据断言中的配置或代码判断执行结果是成功还是失败,

监听器
监听器用于收集jmeter的运行结果并展示给用户,jmeter提供的大部分监听器为统计报告。能够提供采样器执行结果展示的只有view result tree。最常用的监听器是aggregate和view result tree

JMeter主要由三个部分组成,它们分别是:
– 取样器
进行脚本逻辑控制。用来控制业务流程,模拟用户进行操作
– 线程组
场景设置。比如模拟多少用户来访问、访问多少次
– 监听器
监控脚本运行,取得性能指标

JMeter学习(一)工具简单介绍

JMeter 运行

1. 进入bin目录运行jmeter.bat启动jmeter

   注意:打开的时候会有两个窗口,JMeter的命令窗口和JMeter的图形操作界面,不可以关闭命令窗口。

2. JMeter的classpath:

   如果你想添加其他JAR文件到JMeter的classpath中,你必须复制他们到lib目录中;

   如果你开发了一个JMeter特定组件或有效的jar文件,复制到lib目录下的ext目录中。

3. 打开之后显示的是中文,如果你想使用其他语言,比如英文,那么通过菜单选项->选择语言->英文即可,当然转为中文也是同样操作。

JMeter 测试计划元件 

打开Jmeter页面:包括测试计划+工作台。

1、Test Plan (测试计划):用来描述一个性能测试,包含与本次性能测试所有相关的功能。也就说本的性能测试的所有内容是于基于一个计划的。

右键单击“测试计划”弹出菜单:

“函数测试模式”复选框,如果被选择,它会使Jmeter记录来自服务器返回的每个取样的数据。如果你在测试监听器中选择一个文件,这个数据将被写入文件。如果你尝试一个较小的测试来保证Jmeter配置正确并且你的服务器正在返回期望的结果,这是很有用的。这样做的后果就是这个文件会快速的增大,并且Jmeter的效率会影响。

如果不记录数据到文件,这个选项就没有不同了。

A接口的返回结果做B接口的参数,比喻token,userId 等,如果是B接口先执行,再执行的A接口就会出现问题,这时我们需要让他们按照顺序执行,先A后B。

那么,勾选第一个(独立运行每个线程组):

2、Threads (Users)

虽然有三个添加线程组的选项,名字不一样, 创建之后,其界面是完全一样的。

1) setup thread group 

一种特殊类型的ThreadGroup的,可用于执行预测试操作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试前进行定期线程组的执行。setUp Thread Group类似于lr的init.可用于执行预测试操作。

2) teardown thread group. 

一种特殊类型的ThreadGroup的,可用于执行测试后动作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试结束后执行定期的线程组。tearDown Thread Group类似于lr的end.可用于执行测试后动作。

3) thread group(线程组).

     这个就是我们通常添加运行的线程。通俗的讲一个线程组,,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。线程组中包含的线程数量在测试执行过程中是不会发生改变的。

线程组:

  名称:起个有意义的名字就行

  线程数:这里选择5

  Ramp-Up Period:单位是秒,默认是1秒。指定了启动所有线程所花费的时间,如果你需要Jmeter立即启动所有线程,将此设定为0即可

  循环次数:表示每个线程执行多少次请求。

调度器(勾选后会起作用)

       持续时间:表示脚本持续运行的时间,以秒为单位,比如如果你要让用户持续不断登录1个小时,你可以在文本框中填写3600。
       启动延迟:表示脚本延迟启动的时间
       如果我们需要用到调度器来设定持续时间,如果线程数不够多到持续时间结束,我们可以将循环次数勾选为永远

3、测试片段(Test Fragment)

     测试片段元素是控制器上的一个种特殊的线程组,它在测试树上与线程组处于一个层级。它与线程组有所不同,因为它不被执行,除非它是一个模块控制器或者是被控制器所引用时才会被执行。

 

4、取样器(Sampler)

    取样器(Sampler)是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,JMeter 原生支持多种不同的sampler , 如 HTTP Request Sampler 、 FTP  Request Sampler 、TCP  Request Sampler 、 JDBC Request Sampler 等,每一种不同类型的 sampler 可以根据设置的参数向服务器发出不同类型的请求。

    在Jmeter的所有Sampler中,Java Request Sampler与BeanShell Requst Sampler是两种特殊的可定制的Sampler.

 

get请求参数设置

一、普通参数

 1、get请求一般通过parameters来传递键值对参数(推荐)

2、参数放入路径中(有可能参数要转码)

二、json参数

1、在BeanShellPreprocesson中,根据接口文档,将参数id和companyId写成json串。

2、在HTTP请求中选择【Parameter】将需要传入接口的所有参数名及对应参数输入。其中,data填入的参数是将json串{'companyId':1001,'Id':02}中的数据转化为URL数据%7B'companyId':1001,'Id':02%7D

 

post请求参数设置

1、json格式的post请求   

post只要把入参放到BodyData里面就可以了,入参为json时,在Body Data中输入{}和一个个键值对,记得要先用json在线校验工具进行校验,另外要加http头管理器,在里面加上content-type:Application/json

响应结果:由于json字符串在Body Data中传递,故请求的数据都在Post Data中,而post只有路径

 

2、post请求的键值对

除了放到BodyData里,有时候放到URL里,用&连接符,类似情况1的get请求。如下图所示:

 

响应结果:参数是在POST中而非POST DATA

3、post请求:parameters选项卡中填写而非bodydata,但与bodaydata效果一样   

在Parameters中填写表格形式的入参,信息头管理器可以没有,但不可写成“Content-Type: application/json”否则报错

响应结果:参数是在POST中而非POST DATA

 

 

5、逻辑控制器(Logic Controller)

    逻辑控制器,包括两类无件,一类是用于控制test plan 中 sampler 节点发送请求的逻辑顺序的控制器,常用的有 如果(If)控制器 、 switch Controller 、Runtime Controller、循环控制器等。另一类是用来组织可控制 sampler 来节点的, 如 事务控制器、吞吐量控制器。

 

6、配置元件(Config Element)

    配置元件(config element)用于提供对静态数据配置的支持。CSV Data Set config 可以将本地数据文件形成数据池 (Data Pool),而对应于HTTP Request Sampler和 TCP Request Sampler等类型的配制无件则可以修改 Sampler的默认数据。

  例如,HTTP Cookie Manager 可以用于对 HTTP Request Sampler 的 cookie 进行管理。

     HTTP 请求默认值不会触发Jmeter发送http请求,而只是定义HTTP请求的默认属性。

 

7、定时器(Timer)

定时器(Timer)用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手段。类似于LoadRunner里面的“思考时间”。 jmeter提供了9种类型的定时器,可以根据实际场景设置思考时间,用于等待或是集合点同时并发操作等等。

定时器的作用域
1)定时器是在每个sampler(采样器)之前执行的,而不是之后(无论定时器位置在sampler之前还是下面);
2)当执行一个sampler之前时,所有当前作用域内的定时器都会被执行;
3)如果希望定时器仅应用于其中一个sampler,则把定时器作为子节点加入;
4)如果希望在sampler执行完之后再等待,则可以使用Test Action

 

8、前置处理器(Per Processors)

    前置处理器用于在实际的请求发出之前对即将发出的请求进行特殊处理。例如,HTTP URL重写修复符则可以实现URL重写,当RUL中有sessionID 一类的session信息时,可以通过该处理器填充发出请求的实际的sessionID 。

 

9、后置处理器(Post Processors)

    后置处理器是用于对Sampler 发出请求后得到的服务器响应进行处理。一般用来提取响应中的特定数据(类似LoadRunner测试工具中的关联概念)。例如,XPath  Extractor 则可以用于提取响应数据中通过给定XPath 值获得的数据;正则表达式提取器,则可以提取响应数据中通过正则表达式获得的数据。

 

10、断言(Assertions)

断言用于检查测试中得到的相应数据等是否符合预期,断言一般用来设置检查点,用以保证性能测试过程中的数据交互是否与预期一致。

 

11、监听器(Listener)

这个监听器可不是用来监听系统资源的元件。它是用来对测试结果数据进行处理和可视化展示的一系列元件。 图形结果、查看结果树、聚合报告、用表格察看结果都是我们经常用到的元件。

 

、帮助

http://jmeter.apache.org/usermanual/component_reference.html

最好的帮助是:菜单-“帮助”-“帮助”。

 

 

 

JMeter学习(二)录制脚本

 

 一、利用Badboy录制

环境

Badboy  version 2.1.1

JDK: 1.7.0_67

Apache  JMeter-2.11 

----------------------------------------------------------------------------------------------------

JMeter录制脚本有多种方法,其中最常见的方法是用第三方工具badboy录制,另外还有JMeter自身设置(Http代理服务器+IE浏览器设置)来录制脚本,但这种方法录制出来的脚本比较多且比较乱,个人不太喜欢,一般常见Badboy进行录制,下面来介绍下Badbody录制。

 注:使用JMeter的代理或是BadBoy进行录制的时候,特别是JMeter代理的时候,操作不能太快,不然容易造成录制失败。

badboy简介:

  • Badboy是一款免费WEB自动化测试工具。
  • 官方下载地址:http://www.badboy.com.au 
  • badboy的安装跟一般的应用程序一样,Badboy是一款不错web自动化测试工具,利用它来录制脚本,并且录制的脚本可以直接保存为JMeter文件来使用。我无疑给我们带来了很大我方便。

 

1.打开badboy工具,在地址栏目中输入被测试项目的地址

注意:badboy正常状态下是录制状态,为红色按钮,如图

录制完成后,点击工具栏旁边黑色按钮,结束录制。

2.选择“文件”--Export to Jmeter…

3.打开JMeter工具,选择“文件”-->“打开”选择刚才保存的文件(.jmx类型),将文件导入进来了。

 录制的脚本一定要添加HTTP Cookie Manager,否则脚本运行失败,切记.

 现在对于JMeter来说,一个测试计划只能有一个Cookie管理器。因为当多个Manager存在时,JMeter目前还没有方法来指定使用哪个Manager.同时,一 个Cookie Manager中的存储的Cookie也不能被其他Cookie Manager所引用,所以同一个测试计划中不建议使用多个Cookie Manager.

 添加cookie将保证每个用户使用不同的cookie,但是分享一份Http element,几乎所有的web测试都需要cookie的支持.

二、利用自身的代理服务器录制脚本

jmeter如何利用自身的代理服务器录制脚本

1:工作台下创建代理服务器

 

2:配置代理,选择录制控制器

3:在Requests FIltering下添加排除模式,配置正则表达式。否则会录制出很多凌乱的请求。

.*.XXX.*|.*.XXX.*,根据需要进行增删

 4:启动代理服务器

 5:去页面上执行查询操作,观察代理服务器,可以录制了一个查询的接口,所有必备的参数都自动帮你填好了,是不是很轻松?

录制完毕之后,记得把录好的接口移动到线程组下,否则无法运行。然后,记得把浏览器的代理关闭,不然你就无法上网了。

结尾彩蛋:如何录制APP接口?

Web页面上的接口可以用jmeter录制了,那么App呢?,这里简单介绍一下

1:首先手动设置你的手机代理,配置代理ip,需要与本机的ip一致!端口默认80

2:配置jmeter代理服务器ip,注意ip与端口必须要与手机代理一致。

3:观察代理服务器,看到此处录制了一个app查看百度网页的接口

 

 

 

JMeter学习(三)元件的作用域与执行顺序

在jmeter中,元件的作用域是靠测试计划的的树型结构中元件的父子关系来确定的,作用域的原则是:

  •  取样器(sampler)元件不和其它元件相互作用,因此不存在作用域的问题。
  •  逻辑控制器(Logic Controller)元件只对其子节点中的取样器 和 逻辑控制器作用。
  •  除取样器 和逻辑控制器 元件外,其他6类元件,如果是某个sampler的子节点,则该元件只对其父节点下的子节点起作用。
  •  除取样器和逻辑控制器元件外的其他6类元件,如果其父节点不是sampler ,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)。

Jmeter 中的逻辑控制器(Config Elements)在其作用范围内的行为与其他元件相比稍有不同。逻辑控制器元件分两大类:默认配置(HTTP默认请求、FTP默认请求等)和 管理(HTTP 头管理、HTTP cookie 管理等)。

  其中默认配置(Configuration Defaults)元件中设置的值可以在作用域内叠加,例如,在一个测试计划中添加两个HTTP 默认请求,其中第一个默认设置 Server name or IP 为www.google.com ,第二个默认设置Path 为/page-not-exist , 则在这两个元件作用域内的所有HTTP 请求默认的Server name or IP 和Path 均为Server name or IP 和 /page-not-exist 。

  管理(Manager)类逻辑控制器元件的效果则不能进行叠加。如果两个或两个以上相同的管理类元件作用域有重叠。则在重叠作用域内的取样器元件只会随即受到其中一个的作用,这样会导致取样器行为的不确定性。因此,在使用管理类逻辑控制器时,一定要注意保证相同的管理类元件的作用域不发生重叠。

 

通过两个栗子(例子)来理解一下他们的作用域。 

A(注:下图只是为了说明作用域,无法正常运行)

取样器(HTTP请求1 、FTP请求2 、TCP取样器3) 逻辑控制器(循环控制器) 监听器(图形结果1、聚合报告2)

*  HTTP请求1 、FTP请求2 、TCP取样器3 元件没有作用域的概念。

*  循环控制器 元件作用域名是其子节点FTP请求2 、TCP取样器3 。

*  图形结果1 元件的作用域是是FTP请求2 、TCP取样器3。

*  聚合报告2 元作的作用域是HTTP请求1 、FTP请求2 、TCP取样器3

 

(注:下图只是为了说明作用域,无法正常运行)

这个例子稍微复杂一些,包含的元件较多。先来分分类。

  取样器(HTTP请求 、FTP请求 、TCP取样器、 JDBC Request )逻辑控制器(循环控制器、随即控制器)定时器(固定定时器、Uniform Random Timer )断言(响应断言、XML断言)监听器(图形结果、聚合报告)

 

根据作用域原则,这些元件的作用域分别为:

*  HTTP请求 、FTP请求 、TCP取样器、 JDBC Request  元件没有作用域名概念

*  循环控制器 的作用域为 FTP请求 、TCP取样器和 随即控制器

*  固定定时器作用于 HTTP请求 , Uniform Random Timer 作用于所有取样器

*  响应断言作用于JDBC Request  , XML断言作用于FTP请求 、TCP取样和JDBC Request 。

*  图形结果作用于FTP请求 、TCP取样和JDBC Request ,聚合报告作用于作用于所有取样器。

 

元件的执行顺序

了解了元件有作用域之后,来看看测试计划的元件的执行顺序,元件执行顺序的规则很简单,在同一作用域名范围内,测试计划中的元件按照如下顺序执行。

(1)配置元件(config elements )

(2)前置处理程序(Per-processors)

(3)定时器(timers )

(4)取样器(Sampler)

(5)后置处理程序(Post-processors) (除非Sampler 得到的返回结果为空)。

(6)断言(Assertions)(除非Sampler 得到的返回结果为空)。

(7)监听器(Listeners)(除非Sampler 得到的返回结果为空)。

关于执行顺序,有两点需要注意:

*  前置处理器、后置处理器和断言等元件公能对 取样器作用,因此,如果在它们的作用域内没有任何取样器,则不会被执行。

*  如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序一次执行。

 

 

 

原文地址:https://www.cnblogs.com/tester-l/p/6016777.html