关于JMETER的简单整理

JMETER整理

·接口测试原理

-HTTP协议介绍

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等)。

HTTP工作原理

HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。

Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。

Web服务器根据接收到的请求后,向客户端发送响应信息。

HTTP默认端口号为80,但是你也可以改为8080或者其他端口。

HTTP三点注意事项:

  • HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  • HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
  • HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

HTTP消息结构

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line),请求头部(header),空行和请求数据四个部分组成。

服务器端HTTP响应由四个部分组成,分别是:状态行,消息报头,空行和响应正文。

实例一:

客户端请求:

User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi

服务器端响应:

Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain</pre>

-HTTP状态码介绍

什么是HTTP状态码? 当浏览者访问一个网页时,浏览者的浏览器会向网页所在的服务器发出请求。当浏览器接受并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头,用以响应浏览器的请求。

常见的HTTP状态码:

  • 200 -请求成功

  • 301 -资源被永久转移到其他URL

  • 404 -请求的资源不存在

  • 500 -内部服务器错误

HTTP状态码分类:

  • 1** -信息,服务器收到请求,需要请求者继续执行操作

  • 2** -成功,操作被成功收到并处理

  • 3** -重定向,需要进一步的操作以完成请求

  • 4** -客户端错误,请求包含语法错误或无法完成请求

  • 5** -服务器错误,服务器在处理请求的过程中发生了错误

-浏览器抓包工具

-APP抓包工具

·Jmeter元件

-Java环境变量搭建

JDK下载

甲骨文官网:http://www.oracle.com/technetwork/java/javase/downloads/ 选择Accept License Agreement

oracle下jdk.png

JDK安装

安装jdk.png
安装二.png
安装三.png
安装四.png
安装五.png
安装六.png

JDK环境变量配置

1.新建JAVA_HOME环境变量,JAVA_HOME=C:\Java\jdk1.8.0_144

2.修改path环境变量,在path变量尾部添加%JAVA_HOME%\bin

3.新建classpath环境变量,classpath=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\tools.jar

配置一.png
配置二.png
配置三.png
配置四.png
配置五.png
配置六.png
配置七.png
配置八.png
配置九.png

验证java环境变量

效果一.png
效果二.png

-Jmeter部署

jmeter官网下载:https://jmeter.apache.org/download_jmeter.cgi

jmeter官网截图.png

WINDOWS系统下打开:
在jemter所在文件夹下的bin文件夹下,用管理员身份打开jmeter.bat文件
JMETER开始.png

jmeter打开成功界面如下:
jmeter开始界面.png

-Jmeter界面功能介绍

-Jmeter工作原理

原理概要:

向服务器提交请求,从服务器取回请求返回的结果。JMETER是浏览器于WEB服务器之间的代理网关,模拟在服务器、网络或者其他对象上附加高负载以测试他们提供服务的受压能力,或者分析他们提供的服务在不同负载 条件下的总性能情况。

基本原理:

建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,可以通过监听记录测试结果。

运行原理:

  • 通过线程组来驱动多个线程的方式运行。
  • 运行在JVM虚拟机上。
  • 可以进行分布式测试(分为控制机和负载机)
    • 控制机:运行负载测试、管理远程多台负载机;
    • 负载机:运行负载测试,向控制机发送测试结果。
    • 运行逻辑:启动Agent----》控制机连接负载机----》控制机发送运行指定----》负载机运行并回传测试结果----》控制机收集测试结果

-Jmeter三种不同线程组

Jmeter有三个线程组分类:Thread Group、setUp Thread Group、tearDown Thread Group,如图


jmeter线程组界面.png
  • thread group(线程组):通常运行的线程。通俗的讲,一个线程组,可以看成是一个虚拟用户组,线程组的每个线程可以理解成一个虚拟用户。
  • setUp thread group:一种特殊的ThreadGroup,可以执行预测试操作。这些线程的行为完全像一个正常的线程组元件。不同的是,这类线程执行测试前进行定期线程组的执行,测试开始时的初始化工作。
  • teardown thread group:一种特殊类型的ThreadGroup的,可执行测试后动作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试结束后执行定期的线程组;测试结束时进行回收工作。

-Jmeter-GET请求

1.创建测试计划

默认启动jmeter时候会加载一个测试技术模板,保持测试计划 :修改名称,点击保存,选择保持路径。保存之后的操作步骤,每次添加或修改,软件并不会自动保存到jmx文件中,所以每次有修改后,如果需要保存本次修改内容,都需要手动到“文件”菜单中保存一次。

测试组.png

2.添加线程组

右键左边树中的测试计划“TestPlan"节点,添加--Threads--线程组

测试组1.png

测试组2.png

3.添加HTTP请求默认值

右键“线程组”,选择 “添加”--“配置元件”--“HTTP请求默认值”,点击“HTTP请求默认值”,添加成功后,线程组节点下会新增"HTTP请求默认值"

默认值.png

4.添加HTTP信息头管理器

非必须项。 右键“线程组”,选择“添加”--“配置元件”--“HTTP信息头管理器。

信息头.png

5.添加HTTP请求

右键“线程组”,选择“添加”--“Sample”--“HTTP请求”

请求.png
请求1.png

6.添加监听器

右键“线程组”,选择“添加”--“监听器”--“对应的监听器”,常用的监听器有:图形结果,查看结果树,聚合报告

监听.png
监听1.png

7.执行和结果分析

专业术语解析

  • Label:每个JMeter中的element都有一个name属性

  • # Samples:表示当前测试中一共发送了多少请求。如果模拟10个用户,循环10次,显示的是100

  • Average:平均响应时间--默认单个请求的平均响应时间

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

  • 90% Line:90%用户的响应时间

  • Min:最小响应时间

  • Max:最大响应时间

  • Error%:本次测试中出现错误的请求数量/请求总数

  • Throughput:吞吐量--默认表示每秒完成的请求数

  • KB/Sec:每秒从服务器端接收到的数据量

-Jmeter-POST请求

-Jmeter-JSON请求

  • 创建测试计划--添加测试组--添加HTTP信息头管理器--添加HTTP请求--添加结果监听“查看结果树”
  • 添加HTTP信息头管理器上,要做修改
json信息头设置.png
  • 点击“添加”后,在“名称”列上添加 Content-Type, 在“值”列上添加“application/json"

-Jmeter-header处理

  • 测试计划--线程组--配置元件--HTTP信息头管理器
名称
Content-Type application/json
Accept text/html,application/xhtml+html,application/xml;q=0.9,/;q=0.8
Accept-Language fr,fr-fr;q=0.8,en-us;q=0.5,en;
Accept-Encoding gzip,feflate

-Jmeter超时处理

  • 测试计划-线程组-HTTP Request Defaults -Advanced

  • Connect:连接超时设置,以毫秒为单位

  • Response:响应超时设置

超时设置.png

-Jmeter响应断言

  • 测试计划--线程组-断言-响应断言

  • Apply to :一般选择 Main sample only

  • Field to Test:一般选择Text Response,实例只简单判断,所以选择Response Headers

  • Pattern Matching Rules:匹配规则,一般选择Contains

断言.png

-Jmeter-JSON断言

·Jmeter参数化和结果分析

Jmeter查看结果树

  • 测试计划--线程组--添加--监听器-查看结果树
查看结果树.png

数据说明:

  • 左侧结果表

1.通常执行成功的请求在左侧显示绿色,执行失败的显示红色。

2.没有添加断言时,显示的绿色并不一定是测试结果的成功,只能代表响应码是200或者300系列,显示红色说明响应码是400或500系列。所以在判断请求返回是否测试结果,必须加上断言,只有断言成功的才会显示绿色。

  • 右侧结果表

1.显示的信息如下:

Thread Name:线程组名称

Sample Start:启动开始时间

Load time:加载时长,是测试常用的时间,也是整个请求的消耗时间

Latency:等待时长,不常用。表示请求发送到刚开始接收响应时的时间

Size in bytes:发送的数据总大小

Headers size in bytes:发送头大小

Body size in bytes:发送数据的其余部分大小

Sample Count:发送请求数统计

Error Count:交互错误统计

Response code: 返回码

Response message:返回信息

Response headers: 返回的头部信息

HTTPSampleResult:其他附加的请求信息

Jmeter参数化

  • 依赖Jmeter自带的函数助手
  • CSV Data Set Config
  • 用户定义变量
  • 正则表达式提取器获取
  • 从数据库中提取

Jmeter随机参数化

  • Tools--函数助手对话--__Random
函数助手.png
引用函数助手.png
函数助手结果.png
  • 测试计划--线程组--添加--配置元件--随机变量
随机.png

随机变量引用.png

随机变量结果.png

Jmeter唯一参数化

Jmeter日期参数化

Jmeter-CSV文件参数化

Jmeter聚合报告分析

Jmeter-Top响应时间分析

·Jmeter高级应用

Jmeter实时性能数据展示插件

Jmeter文件随机参数化

Jmeter扩展函数插件

Jmeter性能监控插件

Jmeter-if控制器

Jmeter-循环控制器

  • 循环控制有两处可以设置:
  • 1.一个是线程组里可以测试对整个线程组的循环次数设置
  • 2.逻辑控制器里的循环控制器也可以设置循环次数

循环次数(Loop Count):在输入框中输入的循环的次数,控制器下的子项会循环相应的次数。forever会一直循环下去

线程组中的循环.png
循环控制器.png

Jmeter-foreach控制器

Jmeter仅一次控制

  • 测试计划-线程组-添加-逻辑控制器-仅一次控制器
  • 仅一次控制器,会使该控制器下的子项每个线程只运行一次
仅一次控制器.png

Jmeter-cookie处理器

Jmeter-Json提取器

Jmeter-正则提取器

Jmeter定时器

·Jmeter场景测试

Jmeter上传场景测试

Jmeter下载场景测试

Jmeter登录COOKIE处理场景

Jmeter登录TOKEN处理场景

Jmeter-JDBC请求

Jmeter加密场景测试

Jmeter-webservice接口测试

·Jmeter扩展BeanShell

Beanshell介绍

Beanshell内置变量

Beanshel逻辑判断

Beanshell调用外部java文件

Beanshell断言

Beanshell写数据到文件

·Jmeter命令行模式

Jmeter命令行-单机

  • Jmeter除了界面窗口编写脚本外,还有一种命令行操作方式。一般情况下,界面使用在编写调试脚本,GUI模式进行压测,本身所需要的资源很高

命令介绍:

jmeter -n -t <testplan filename> -l <listner filename>

示例:jmeter -n -t testplan.jmx -l test.jtl

示例说明:表示开始运行testplan.jmx文件,并输出监听日志文件test.jtl

命令行参数介绍:

-h 帮助 :打印出有用的信息并退出

-n 非GUI模式:在非GUI模式下运行Jmeter

-t 测试文件: 要运行的Jmeter测试脚本文件

-l 日志文件:记录结果的文件

-r 远程运行:在Jmeter.properties文件中指定的所有远程服务器

-H 代理主机:设置Jmeter使用的代理主机

-P 代理端口:设置Jmeter使用的代理主机的端口号

查看日志文件:


jtl日志查看.png

Jmeter命令行-分布式

分布式测试的处理过程如下:

  • 1.调度机master启动以后,会拷贝jmx文件分发到远程的slave机器上
  • 2.slave机器拿到脚本以后启动命令行模式去执行脚本,对于每台slave机器,拿到的脚本都是一样的。如果脚本为50个线程跑3分钟,有3个slave机器,那么总线程是150个线程并行跑3分钟
  • 3.执行时,slave会把执行获得的数据结果传到master机器,master机器会收集所有slave机器的信息并汇总,这样master机器上存有一份所有slave机器汇总的结果

使用分布式式测试时注意事项:

  • 1.测试的jmx脚本是从master机器传到slave机器上的,所以不需要每个slave机器上分别上传文件
  • 2.参数化文件:使用参数化文件时,需要把参数文件在每台slave机器上拷贝一份,且路径也要一致
  • 3.调度机和执行机最好分开,由于master需要发送信息给slave机器并且接收slave机器回传的测试数据,会消耗master自身资源
  • 4.保证每台机器的jmeter版本和插件版本一致
  • 分布式测试总样本数=线程数 * 循环次数 * 执行机总数

调度机master配置:

调度机的bin目录下打开jmeter.properties文件,修改remote_hosts,后面增加远程负载机的IP和端口,添加多个,用逗号分隔开
实例: remote_hosts=192.168..:1099,192.168..**:1099

执行机slave配置:

在slave机器上的jmeter.properties文件中添加
server_port=1099
server_rmi_localport=1099
slave机器上执行jmeter-server文件

分布式测试运行步骤:

  • 步骤一:修改调度机器jmeter.properties文件中的IP
  • 步骤二:确认调度机与执行机以及执行机之间jmeter版本一致,部署路径相同
  • 步骤三:修改执行机器jmeter.properties配置文件中的端口
  • 步骤四:启动执行机上的jmeter-server文件
  • 步骤五:启动调度机上的jmeter.bat文件
  • jmeter -n -t test.jmx -r -l testlog.jtl
  • 命令意思:表示非GUI模式下启动所有远程代理,并运行test.jmx文件,日志记录到testlog.jtl中
  • jmeter -n -t slave.jmx -R xx.xx.xx.xx:1098, xx.xx.xxx.xx:1099 -l test.jtl
  • 命令解释:运行指定的远程代理机器

Jmeter命令行-实时数据分析

Jmeter命令行-结果文件分析

Jmeter命令行-HTML报表

Jmeter命令错误排查

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 一、JMeter介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结...
    宇文臭臭阅读 8,445评论 0 17
  • 公司最近需要测试后台性能,所以学习使用了Jmeter,在此做记录,也分享给更多需要的人。 这篇文章是 JMeter...
    顾顾314阅读 4,246评论 0 10
  • 一、JMeter介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结...
    匆匆岁月阅读 1,948评论 0 1
  • 这篇文章接上一篇(即 JMeter 第2篇) 文章里的每一句话都是我斟酌过的,我认为需要有注释或者插图的地方都会有...
    顾顾314阅读 1,298评论 0 1
  • 转自康姿百德 5月的秦皇岛已经迈入了夏季,各大旅游景区也呈现出不一样的美景。在这个美好的季节,康姿百德集团发起的“...
    壹点事件阅读 511评论 0 0