Jmeter系列之测试计划、线程组、采样器(一)

1,684 阅读6分钟

基于Jmeter5.2.1

目录

Jmeter系列之测试计划、线程组、采样器(一)
Jmeter系列之配置元件(一)
Jmeter系列之监听器(一)
Jmeter系列之控制器(一)
Jmeter系列之控制器(二)
Jmeter系列之作用域、执行顺序
Jmeter系列之BeanShell使用

  熟悉Jmeter,从熟悉Jmeter元件开始,这篇将记录测试计划、线程组、采样器这三个元件。

测试计划(Test Plan)

  本次测试的所有内容都是基于一个测试计划的,意思是其他元件都会在测试计划下。

image.png

1 : 测试计划的名称和注释,名称建议是能表达这个脚本的作用的。
2:  用户定义的变量:在这里定义的变量,相当于全局变量,一般用来添加一些系统常用的配置。
3 :  测试计划下可以包含多个线程组,线程组之间可以是并行执行,也可以是顺序执行,如果勾选了该选项,表明多个线程组之间是顺序执行的,不勾选表示多个线程组之间是并行执行。
举例:

image.png

勾选:线程组1一定在线程组2之前执行
不勾选:线程组1和线程组2并行执行
4 :  默认勾选,表示无论什么情况,都会运行tearDown线程组,后续在 线程组部分 做详细说明。
5 :  勾选后,Jmeter会保存每次的请求结果,同时下面有句说明:勾选后可能对性能测试产生不利影响。
6 :  添加目录或jar包到classpath中,常用于需要调用外部jar包的情况下。比如脚本中需要调用commons-lang-2.6.jar,那可以在这里添加jar包,在可编写代码的元件中类似java程序一样直接import该jar包即可。

线程组

  一个测试计划下可以有多个线程组,线程组是测试计划的开始。Jmeter有三种类型的线程组,名字不一样,但是创建之后,界面是完全一致的。

image.png

setUp Thread Group

  一种特殊类型的线程组,用于在执行常规线程组(Thread Group)之前执行一些必要的操作,这个线程组下的线程行为与常规线程组完全一致,不同的是执行顺序,它会在常规线程组执行之前被触发。
  应用的场景主要有:

image.png

tearDown Thread Group

  一种特殊类型的线程组,用于在常规线程组完成后执行一些必要的操作,这个线程组下的线程行为与常规线程组完全一致,不同的是执行顺序,它会在常规线程组执行之后被触发。
  应用的场景主要有:

image.png

Tread Group

  平常使用的最多的线程组,下面介绍线程组的各个参数。

image.png

1 : 线程组的名称和注释

2 : 采样器错误后执行的动作:

image.png


  这几个取值结合测试计划的 Run tearDown Thread Group after shutdown of main threads参数 ,当取值是Continue、Start Next Thread Loop、Stop Thread时,这个参数即使不勾选,也是会执行tearDown线程组,当取值为Stop Test、Stop Test Now时,这个参数需要勾选,才会执行tearDown线程组。

3 : 设置线程数,可以理解为并发数,每个线程可以认为就是一个虚拟用户,即多个用户同时去做同一个操作。线程之间是互不影响的,线程A中修改的变量值,不会影响到线程B。

4 : 设置启动所有线程所需要的时间
比如,线程数设置为5,启动所有线程所需要的时间设置为5,每个线程将在前一个线程启动后1秒(5/5)后启动。
假如线程数设置为1000,启动所有线程所需要的时间设置为1,说明要在1秒内启动1000个线程,这样对个人电脑负荷还是挺大的,所以一开始可以将启动所有线程所需要的时间设置为等于线程数,后续再根据电脑配置慢慢调整,总不能线程数为10000,而我需要等待1万秒。

5 : 设置线程组内每个线程执行的次数
线程数设置为5,每个线程执行的次数设置为2,意思是5个线程各执行2次,相当于执行了10次。
如果勾选了Infinite,那线程就会永远运行下去。
我个人不怎么使用这个参数,更多的是设置线程数。

6 : 每次迭代使用相同的线程,即线程复用
这里跟HTTP Cookie Manager中的一个参数紧密关联,后续详解,目前不了解作用也是可以的,默认勾选即可。

7 延时创建线程直到需要:勾选后,只有需要线程了才会创建

8 : 指定线程寿命
Duration(seconds):持续时间,设置线程组运行多长时间,单位是秒,跟线程数和每个线程运行次数配合使用,即使线程数和线程运行次数还未跑完,持续时间到了,线程组直接停止。
从bin/jmeter.log中也找到一条日志:

image.png

Startup delay(seconds):设置线程启动延时时间,是指多少秒后才开始启动线程,不是说每个线程都延迟多少秒启动。
需要注意:勾选指定线程寿命(Specify Thread lifetime)后,可以只设置Duration,不设置Startup delay,但不可以不设置Deration,而只设置Startup delay,因为Duration不设置的话默认是0,持续时间为0的话那线程组也不用启动了。
线程组设置:

image.png

日志bin/jmeter.log:
image.png

可以看到第一个线程1秒后才启动。
如果需要控制每个线程都是隔1秒启动,比如第1个线程第1秒后启动,第2个线程第2秒后启动,可以设置如下:
image.png

不过感觉控制这个没什么必要,至少我目前用不上。

采样器

  Jmeter的采样器有很多种,由于篇幅问题,本节先介绍最常用的HTTP Request Sampler的基本使用,下一节再详细介绍HTTP Request采样器的高级使用和其他采样器。

屏幕快照 2020-03-09 下午10.08.19.png

屏幕快照 2020-03-09 下午10.09.34.png

1 : 名称和注释
2 : 请求协议,可以填HTTP、HTTPS、FILE,默认为HTTP
3 : 域名或IP地址,不包括HTTP://前缀,可以分以下三种情况填写域名或IP地址:

image.png

4 : Web服务监听的端口,HTTP默认端口80,HTTPS默认端口443

5 : 请求方法,常用GET、POST、DELETE、PUT等。

6: 要请求的接口路径,可以有以下几种:

image.png

7: 要使用的内容编码,适用于POST、PUT、PATCH这三种请求方法,即对Body Data部分(数字10部分)编码,要注意这里的Content encoding不是HTTP Header的Content-Encoding

8

image.png
9:如果是GET,DELETE请求,参数会附加到请求URL,如果是POST、PUT请求,则会以application/x-www-form-urlencoded的方式发送请求
image.png

  如果参数包括一些特殊字符,比如'&',那就需要勾选URL Encode,Content-Type和Include Equals保持默认即可,Include Equals只有在Value字段为空才可以取消勾选,但实际我没看出有什么作用。

10 :主要用来传请求参数为json格式的参数,同时也需要在Header中配置Content-Type为application/json

11: 上传文件

image.png
image.png