Jmeter详讲一 入门教程

Jmeter是一款优秀的开源测试工具,是开发和测试工程师都必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率;

1.Jmeter介绍

Jmeter是一款使用Java开发的,开源免费的测试工具,主要用来做接口测试(Restful API)和性能测试(压力测试/负载测试);

2. Jmeter 现在和运行

官方网站:http://jmeter.apache.org/

解压后, 运行  “bin/jmeter.bat”   

Jmeter 是支持中文的, 启动Jmeter 后, 点击 Options -> Choose Language  来选择语言

3.应用举例

目标:获取城市的天气数据:

第一步:发送request 获取城市的城市代号
http://toy1.weather.com.cn/search?cityname=上海 

从这个请求的response 中获取到上海的城市代码. 比如:上海的地区代码是101020100

第二步:发送request 到: http://www.weather.com.cn/weather2d/101020100.shtml 可以得到该城市的天气数据

3.1 新建一个Thread Group

新建一个Thread Group,  jmeter的所有任务都必须由线程处理,所有任务都必须在线程组下面创建。

Jmeter详讲一 入门教程

 

 

3.2 新建一个HTTP Request

Jmeter详讲一 入门教程

比如我要发送一个Get 方法的http 请求: http://toy1.weather.com.cn/search?cityname=上海 可以按照下图这么填

Jmeter详讲一 入门教程

3.3 添加HTTP Head Manager

选中上一步新建的HTTP request. 右键,新建一个Http Header manager. 添加一个header

Jmeter详讲一 入门教程

Jmeter详讲一 入门教程

3.4 添加View Results Tree

View Results Tree 是用来看运行的结果的

Jmeter详讲一 入门教程

3.5 运行测试,查看结果

Jmeter详讲一 入门教程

 

Jmeter详讲一 入门教程

到这里。 我们已经成功运行起来了。

补充知识---重要

 ***线程组设置

Jmeter详讲一 入门教程

Number of Threads(users):虚拟用户数,一个虚拟用户数占用一个进程或线程,设置多少个虚拟用户数在这里就设置多少个线程数;

Ramp-up period(seconds):准备时长,设置虚拟用户数需要多长时间全部启动,如本例子中设置线程数为50,准备市场为2s,那么就是2s启动50个线程,也就是每秒启动25个线程;

Loop Count:循环次数,每个线程发送请求的次数,若设置为10,则总请求数为:50*10=500,如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本;

Delay Thread creation until needed:直到需要时延迟线程的创建;

Specify Thread lifetime:调度器,控制每个线程组运行的持续时间以及它在多少秒后再启动;

Duration(seconds):持续时间;线程组运行的持续时间;

Startup delay(seconds):启动延迟,测试计划开始后,线程组的线程将在多少秒之后再启动运行

***调度器和循环次数的关系

  • 循环次数有固定值且 ≠ -1,持续时间不会生效,以循环次数为准
  • 循环次数设置为永远或 -1 时,持续时间才会生效

***聚合报告参数

Jmeter详讲一 入门教程

聚合报告参数详解:

1)Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值

2) #Samples:请求数——表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100

3)Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间

4)Median:中位数,也就是 50% 用户的响应时间

5)90% Line:90% 用户的响应时间

6)Min:最小响应时间

7)Max:最大响应时间

8)Error%:错误率——错误请求数/请求总数

9)Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数

10)KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec

一般而言,性能测试中我们需要重点关注的数据有: #Samples 请求数,Average 平均响应时间,Min 最小响应时间,Max 最大响应时间,Error% 错误率及Throughput 吞吐量。

3.6  添加Assertion和Assert Results

选择HTTP Request, 右键 Add-> Assertions -> Response Assertion.  添加 Patterns To Test

Jmeter详讲一 入门教程

 

然后添加一个Assetion Results 用来查看Assertion执行的结果. 

选中Thread Group 右键  Add -> Listener -> Assertion Results. 

运行后, 如果HTTP Response中没有包含期待的字符串。 那么test 就会Fail. 

Jmeter详讲一 入门教程

Jmeter详讲一 入门教程

3.7 使用用户自定义变量

我们还可以在Jmeter中定义变量。 比如我定义一个变量叫 city.    使用它的时候用  ${city}

添加一个 User Defined Variables.  选中Thread Group: 右键 Add -> Config Element -> User Defined Variables.

我们添加一个变量: city

Jmeter详讲一 入门教程

然后在Http Request中使用这个变量

Jmeter详讲一 入门教程

 

3.8 关联

所谓关联, 就是第二个Requst, 使用第一个Request中的数据,在第一个Http Requst 中新建一个正则表达式,把Response的值提取到变量中,提供给别的Http Request 使用,选择第一个Http Request, 右键 Add -> Post Processors -> Regular Expresstion Extractor

Jmeter详讲一 入门教程

现在新建第二个Http Request,  发送到: http://www.weather.com.cn/weather2d/${citycode}.html 

${citycode} 中的数据, 是从Regular Expression Extractor 中取来的

Jmeter详讲一 入门教程

到这, 脚本就全部写好了, 运行下,看下最终结果

Jmeter详讲一 入门教程