JMeter搭配Fiddler的简单使用(一)

一、JMeter是什么?

对于测试的开发人员应该不会陌生,经常都会使用到该工具。下面是JMeter的官方介绍:

Apache JMeter应用程序是一款开放源代码的软件,并且是一个100%纯Java的应用程序,用于加载测试功能行为并衡量性能。 它最初设计用于测试Web应用程序,但后来扩展到其他测试功能。JMeter的源码地址

Apache JMeter可用于测试静态和动态资源,Web动态应用程序的性能。
它可用于模拟服务器,服务器组,网络或对象上的重负载,以测试其强度,或分析不同负载类型下的整体性能。

JMeter的特点:

  • 能够加载和性能测试许多不同的应用程序/服务器/协议类型:
    • Web - HTTP,HTTPS(Java,NodeJS,PHP,ASP.NET …)
    • SOAP / REST Web服务
    • FTP
    • 数据库通过JDBC
    • LDAP
    • 面向消息的中间件(MOM)通过JMS
    • 邮件 - SMTP(S),POP3(S)和IMAP(S)
    • 本地命令或shell脚本
    • TCP
    • Java对象
    • 全功能的测试IDE,允许快速的测试计划记录(从浏览器或本地应用程序),建设和调试。
  • 从任何Java兼容的操作系统(Linux,Windows,Mac OSX,…)加载测试的命令行模式(非GUI /无头模式)
  • 一个完整的,准备呈现动态的HTML报告
  • 通过从大多数流行的响应格式,HTML,JSON, XML或任何文本格式提取数据的能力,轻松相关
  • 完整的可移植性和100%的Java纯度
  • 完整的多线程框架允许通过多个线程同时进行采样,并通过单独的线程组同时对不同功能进行采样
  • 缓存和离线分析/重播测试结果
  • 高度可扩展的核心:
    • 可插入的采样器允许无限的测试能力
    • 可编写脚本的取样器(与Groovy和BeanShell 等JSR223兼容的语言)
    • 可以使用可插拔定时器来选择多个负载统计信息
    • 数据分析和可视化插件允许很好的扩展性和个性化
    • 函数可以用来为测试提供动态输入或提供数据操作
    • 通过Maven,Graddle和Jenkins的第三方开源库轻松持续集成

以上便是官方的介绍,可以看出JMeter是一款非常强大的软件,对于一般的开发人员来说,JMeter也是一款好用且方便的工具,在日常开发中也可以方便使用,因此也非常有必要掌握这个软件。

二、JMeter的安装与使用

1、安装

由于JMeter是一款纯java写的开发工具,所以要使用首先得去下载JDK,让电脑拥有java运行环境。JDK的安装就不说了,直接下载JDK包安装,然后配置好环境变量。接着下载JMeter, 下载地址。选择二进制包,
JMeter下载
将解压到具体文件夹下面,然后双击bin文件夹下面的ApacheJMeter.jar文件启动JMeter。

JMeter的目录结构:

  • /bin目录(常用文件介绍)
    • examples:目录下包含JMeter使用实例
    • ApacheJMeter.jar:JMeter源码包
    • jmeter.bat:Windows下启动文件
    • jmeter.sh:Linux下启动文件
    • jmeter.log:JMeter运行日志文件
    • jmeter.properties:JMeter配置文件
    • jmeter-server.bat:Windows下启动负载生成器服务文件
    • jmeter-server:Linux下启动负载生成器文件
  • /docs目录——JMeter帮助文档
  • /extras目录——提供了对Ant的支持文件,可也用于持续集成
  • /lib目录——存放JMeter依赖的jar包,同时安装插件也放于此目录
  • /licenses目录——软件许可文件,不用管
  • /printable_docs目录——JMeter用户手册

2、JMeter常用的基本组件

  • 1、测试计划
    整个测试计划,就是指本次的测试脚本是基于一个计划的;

  • 2、Threads(Users)
    Threads(Users)

    • setUp Thread Group
      安装线程组,所以可以理解为对于线程组的初始化,是所有我们真正开始线程并发之前的准备工作,必须是在线程组开始之前完成的并且拥有自己独立的线程设置;

    • tearDown Thread Group
      卸载线程组,对于线程组的完成时处理,是在所有线程组运行结束后进行的,如果线程组场景一直在执行中将永远也轮不到tearDown Thread Group;

    • 线程组
      要模拟的并发用户,所有的任务都是基于线程组,开通多少个线程就代表有多少个并发用户;

      线程数:需要模拟的用户数量;
      Ramp-Up Period:在这么多时间内完成全部测试,比如开了2个线程,而Ramp-Up Period为3,则每个线程的间隔为1.5秒;
      循环次数:单用户任务重复执行的次数。可以设为Forever,这样JMeter就不会自动停止,需要强制终止。

  • 3、测试片段
    测试片段元素是控制器上的一个种特殊的线程组,它在测试树上与线程组处于一个层级。它与线程组有所不同,因为它不被执行,除非它是一个模块控制器或者是被控制器所引用时才会被执行。我们可以把某个步骤请求存储为片段,当在用例当中要使用时,直接合并这个片段就可以了,不用在建立测试计划-线程组来执行测试。

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

  • 5、逻辑控制器(Logic Controller)
    逻辑控制器的作用域只对其子节点的取样器(Sample)有效,作用是控制采样器的执行顺序。
    大概可以分为2种使用类型:

    (1).控制测试计划执行过程中节点的逻辑执行顺序,如:Loop Controller(循环控制器)、If Controller(如果if控制器)等;

    (2).对测试计划中的脚本进行分组,方便JMeter统计执行结果以及进行脚本的运行时控制等,如:Throughput Controller(吞吐量控制器)、Transaction Controller(事务控制器)等;

  • 6、配置元件(Config Element)
    配置元件
    用于提供对静态数据配置的支持。

    1)CSV Data Set Config:将本地数据文件形成Data Pool,拆分后存储到变量中,适合处理多变量的场景

    2)HTTP信息头管理器:可添加或者重载HTTP请求头。

    3)HTTP Cookie管理器:两个功能

    (1)像web浏览器一样存储和发送Cookie。需先定义属性CookieManager.save.cookie=true
    
    (2)手动为Cookie管理器添加一个cookie
    
  • 7、定时器(Timer)
    定时器
    定时器(Timer)用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS(QPS : Query Per Second 每秒查询率。是一台查询服务器每秒能够处理的查询次数。在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。)的手端。类似于LoadRunner里面的“思考时间”。JMeter 定义了Bean Shell Timer、Constant Throughput Timer、固定定时器等不同类型的Timer。

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

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

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

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

    比如聚合报告:
    聚合报告

  • Label: 定义的HTTP请求名称
  • Samples: 表示这次测试中一共发出了多少个请求
  • Average: 访问页面的平均响应时间
  • Median:中位数,50%用户响应时间
  • 90%Line:90%用户响应时间
  • Min:访问页面的最小响应时间
  • Max::访问页面的最大响应时间
  • Error%: 错误的请求的数量/请求的总数
  • Throughput:每秒完成的请求数
  • Received KB/Sec: 每秒从服务器端接收到的数据量
  • Sent KB/Sec: 每秒从服务器端发送的数据量

介绍完JMeter后,我们来说说Fiddler这个工具。

三、Fiddler是什么?

Fiddler是用C#编写的一个免费的HTTP/HTTPS网络调试器,以代理服务器的方式,监听系统的网络数据流动。启动Fiddler后,会在本地打开8888端口,网络数据流通过Fiddler进行中转时,可以监视HTTP/HTTPS数据流的记录并加以分析,甚至可以修改发送和接收的数据。

Fiddler的原理如下图所示:
Fiddler原理

简单点说就是可以帮助我们分析HTTP网络请求和协议的工具,是位于客户端和服务器端的HTTP代理,也是目前最常用的http抓包工具之一 。通过它让我们可以更加方便结合网络来操作JMeter。

四、Fiddler的简单使用

每次打开Fiddler时候,Fiddler都会为我们设定好代理服务器具体的ip值和端口号,当我们关闭后又会给我们还原。如果打开又关闭Fiddler后,无法上网,只需重新开启Fiddler就可以了。
fiddler代理设置

由于Fiddler由C#编写的,所以常用于Windows下,Fiddler的主界面如下,

fiddler界面

主要包含1、2、3、4个模块,模块1是工具栏,模块2是监控面板,模块3是状态面板,模块4是会话面板。
Fiddler想要抓到数据包,要确保Capture Traffic是开启,在File –> Capture Traffic进行开启,在操作界面的左下方也可以开启该操作。
开启抓包

当数据抓到时候,就可以分析数据了,首先在
模块2监控面板中,有很多数据,各个字段的意思如下:

[#]  --抓取HTTP Request的顺序,从1开始,以此递增
[Result]  --HTTP状态码
[Protocol]  --请求使用的协议,如HTTP/HTTPS/FTP等
[Host]  --请求地址的域名
[URL]  --请求的服务器路径和文件名,也包括GET参数
[Body]  --该请求的大小,以byte为单位
[Caching]  --请求的缓存过期时间或缓存控制header等值
[Content-Type]  --请求响应的类型(Content-Type)
[Process]   --发出此请求的Windows进程及进程ID
[Comments]   --用户通过脚本或者右键菜单给此session增加的备注
[Custom]   --用户可以通过脚本设置的自定义值

当选中左边模块2监控面板中的一条数据后,就可以在模块3状态面板中查看具体的详情。
包括:

  • Statistics 请求的性能数据分析
  • Inspectors 查看数据内容(查看会话的内容,上半部分是请求的内容,下半部分是响应的内容)
  • AutoResponder 允许拦截指定规则的请求(允许你拦截指定规则的求情,并返回本地资源或Fiddler资源,从而代替服务器响应)
    AutoResponder

AutoResponder

  • Composer 自定义请求发送服务器(允许自定义请求发送到服务器,可以手动创建一个新的请求,也可以在会话表中,拖拽一个现有的请求)

  • Filters 请求过滤规则(让左边的监控面板显示具体过滤后的结果,还可以用于指定过滤内网或外网请求)

  • Timeline 请求响应时间

Fiddler 设置解密HTTPS的网络数据
(实现解密HTTPS数据包)
1. Tools –> Fiddler Options –> HTTPS
2. 勾选Decrypt HTTPS Traffic
3. 确认证书
https解密数据包

Fiddler 内置命令使用(通过在会话面板进行操作)

Fiddler常用的命令包括:

命令 对应请求项 介绍
help All 打开官方的使用页面介绍,所有的命令都会列出来
cls All 清屏 (Ctrl+x 也可以清屏)
select Content-Type select后面跟响应类型,可以匹配到相关的类型
? All 问号后边跟一个字符串,可以匹配出包含这个字符串的请求
bpu All 截获request
bpafter All 截获response
> Body 大于号后面跟一个数字,可以匹配出请求大小,大于这个数字请求
< Body 小于号跟大于号相反,匹配出请求大小,小于这个数字的请求
dump All 将所有请求打包成saz压缩包,保存到“我的文档\Fiddler2\Captures”目录下



更多的用法可以直接输入help查看文档。

Fiddler还可以对请求进行断点测试,Fiddler断点功能就是将请求截获下来,但是不发送,这个时候你可以干很多事情,比如说,把包改了,再发送给服务器。

断点使用

Fiddler和JMeter就介绍到这里,后面会在给出JMeter结合Fiddler使用的实例。

猜你喜欢

转载自blog.csdn.net/anumbrella/article/details/78940826