Jmeter基础学习笔记+实战

1. Jmeter是什么

如果我们要开发一个网站的话,不能仅仅将目光关注在这个网站的搭建,我们还要关注这个网站的性能如何,比如说能否承载10000个用户在1秒内的同时访问,换言之,就是说这个网站能否承载10000的高并发访问。要想知道网站是否真的有这个功能,只能进行实践,但是我们不可能找10000个人来帮我们做测试,于是相应的压力测试工具就诞生了,我们只要操控这样的一个工具,就能进行高并发的模拟,统计网站的各项数据,评估网站的性能。

很幸运,Jmeter就是众多压力测试工具中的一款,官网点击此处从中可以下载jmeter。

Jmeter使用java开发,开源并且下载方便,这也是其流行的原因之一。

2. Jmeter的使用

2.1 启动

下载完jmeter的压缩包并解压之后,我们发现可以直接使用,没有复杂的安装程序,其实这就是它的一个轻量化的体现。
Jmeter目录结构
在\bin目录下,点击jmeter.bat文件即可开启批处理文件,之后会弹出程序窗口,其实这个程序就是用java的GUI组件写的嘛,通过这个.bat文件调用java文件即可开启,当然.bat文件里进行了很多其他的设置,比如设置好堆内存是多少,如果我们创建线程模拟并发发现线程不够用了,在.bat文件这里可以设置堆内存。
bin目录

2.2 设置语言

由于汉化太烂,所以设置语言为英文,那设置语言自然是要找相应的配置文件啦,在jmeter.properties里面就可以设置了,要把语言的那句话注释清除掉
设置语言

2.3 一个简单的例子

先看一个创建好的结构
例子

Test Plan

相当于其它IDE的工程项目,右击可以创建各种项目相关东西。
包括用户定义的变量和library

Thread Group(mytest)

我们的目的是要进行模拟高并发,所以要将这10000个“用户”进行一个分组,其实每一个用户在Jmeter里面就是一个线程,这也是Thread group的由来。
Thread group

  1. 线程组里面,可以设置“用户数量”。
  2. 可以设置这么多用户访问量是在多长时间达到的(一般就是1s就行了,因为这里设置时间长了的话,用户量是从0逐渐递增的,我们想要的是直接把青蛙放入油锅,而不是温水煮青蛙)
  3. 可以设置loop(换言之是这10000个用户每个用户循环访问多少次,这里先是1就行了)

Sampler(HTTP Request)

有这么多用户之后,我们到底要访问什么网站呢,访问哪个端口呢,用什么请求方式来访问呢,这些东西是不写在Thread Group里面的,要不然耦合性太强了,所以就在sampler里面了。每访问一次网站并且接受请求,可以看做一次“采样”,要访问多个网站,那就可以设置多次“采样”,换言之,那就是新建多个sampler。
sampler
明确一点,每个sampler只对应一个网站,要让这10000个用户设置访问不同的网站,就设置多个sampler就行了,没必要再新建Thread Group。

继续明确,sampler是jmeter的核心!

Listener

光访问也不行啊,我们得知道访问的过程怎样啊,不然就让软件这样不知不觉执行了有啥用呢(当然你如果可以在服务器端查看服务器的情况的话当我没说)

常用的listener是这个View Results Tree
result tree

文件的保存

保存的文件,就是testplan,和下面的workbench没关系,保存的文件本质上是什么呢,看一下代码就知道,其实就是xml文件,其实如果你足够强的话,完全可以自己写xml文件,然后自己运行(不过谁会放着现成的图形界面不用呢)

2.4 另一个关于录制的例子

概述

所谓的录制,其实就是为了方便我们的操作,我们要测试一个网站,其实就是创建多个sampler并执行的过程,而这样手动一个个创建sampler太麻烦了,能不能直接是一种“录制”的形式呢,比如我们访问一个网站,访问各种链接,这样一个流程我们先走下来,让软件自动记录,自动生成各种sampler,这无疑是极为方便的。

原理

软件要想进行录制,可不是直接屏幕录制,如果真是这样那倒是nb了。jmeter录制的原理,其实就是通过充当代理服务器进行抓包,监听各种请求来实现“录制”。

设置代理服务器

  1. 要开代理,首先在jmeter里先进行设置,在workbench里面开一个http test script recorder,以后设置端口号,代理服务器的开启就都在这里面了。
    代理
    代理属性
  2. 值得注意的是代理的属性里面有一个grouping,我们需要知道,比如说,即使访问一个简单的有道网页,请求也绝不仅仅是一次完事,包括里面的各种图片啥的都会自动生成新的sampler,这无疑为管理增加了麻烦,而通过设置分组,可以简化我们的管理。只要在sampler里面设置好自动访问内嵌资源,这些图片啥的杂乱的东西就都会自动给访问了,目录结构也会清晰很多。
    httprequsetset
  3. 使用火狐浏览器设置代理服务器。(不知为啥其它浏览器报告不是私密连接的错误,不管他们了)

访问

以上配置好之后,开启jmeter代理,在火狐浏览器地址栏输入http://youdao.com即可访问有道主页就可以被抓包录制了。

如果直接输入youdao.com无法正常抓取,也不知道为什么。

3. Jmeter的执行顺序和作用域

3.1 概述

在Thread group里我们可以添加很多不同的组件,我们必须明确:这些组件是有层级关系和先后顺序的

  1. 同一层级关系的不同组件执行顺序不同。
    组件顺序
  2. 同一层级的相同组件按照先后顺序执行。
  3. 不同层级的组件作用范围不同。
  4. 不同层级都有相同组件作用在同一个sampler的时候(比如http default request)冲突的地方按照就近原则,不冲突的地方会叠加。

3.2 举例

层级关系

执行顺序作用域

  1. 两个sampler的ip都没有,所以得根据http request defaults这个“配置结点”来访问应该访问的网站
  2. a层级内部的配置为
    a
  3. a、b并列层级的配置为
    在这里插入图片描述

访问结果

a hire
b hire

3.3 开发Jmeter脚本的实质

其实开发一个Jmeter脚本,就是根据上述那么多组件的作用域,通过各种排列组合模拟用户的真实情况,进行开发。

4. Jmeter结合ECShop的一个实战案例

4.1 录制阶段

  1. 建立以下workbench目录,设置将samplers存入transaction controller,启动代理服务器
    record level
  2. 打开火狐浏览器,设置好代理后,输入http://xxx.xx.x.xxx:2333可以进入ECShop主页,此时再进几个子目录,可以发现代理服务器成功录制。(地址不可输入https,会报错)
    rec
    上图已剔除不必要的访问sampler,只保留了关键的samplers
  3. 由于在workbench里的东西不会保存,所以我们要明确这里仅仅是起到了一个临时存储的作用。录制阶段结束,关闭代理服务器。

4.2 测试脚本参数化阶段

原因:我们的录制仅仅是省了去自己手工制造sampler的麻烦,但是仅仅是访问几个网页无法覆盖整个网站的网页,比如id=16和id=23这俩根本无法覆盖所有的id情况。所以这里我们就需要进行测试脚本参数化。

类型分析

我们需要分析参数化的东西有哪些类型。

  1. 网址和端口号,这些是不会变化的
  2. 各种id之类的,我们录制无法覆盖所有的情况,所以更需要参数化

网址端口号参数化

  1. 使用User Defined Variables来进行参数化控制
  2. 如图所示建立各种参数
    user
  3. 如图将所有的samplers进行修改,使用${内容}来进行插值
    samp
  4. 注意每一个子网页,他们都有一个refrence,肯定是因为他们得知道从哪里跳转到这个子网页里的啊,也需要改一下。
    hdmger
    dad

使用CSV进行id之类的参数化

  1. 新建CSV Data Set Config这个配置元件,里面这样填写
    csv
  2. 在bin目录下新建data文件夹,里面新建catgd.csv,在里面填写数据
    catgd
  3. 将catgory和goods对应的sapmler的id进行插值
    catid
    goodsid
  4. 将goods的sampler的reference进行插值
    gdref
  5. 启动模拟即可实现模拟不同用户随机访问不同的网页。

4.3 实战案例的一个小结

上述的操作可能无法知其所以然,这里稍微总结一下。

  1. 在ECShop里面,可以进行各种各样的购物,进入主页后,我们首先进入category这样的子网页,通过这个category再进入goods子网页查看详细的商品。
  2. 我们通过录制,经过剔除,得到了三个关键的sampler,分别访问的是主页(只有一个),category子网页(不同的id有不同的子网页,这里只是录制了我们访问的那个id对应的category子网页),goods子网页(通过category子网页进入,也是有不同的id,我们只是访问了一个)
    samplers
  3. 原则上,到这一步后,我们就可以测试了!但是这样扩展性不强啊,我们取样的category只不过是众多id中的一个,我们取样的goods也只不过是众多id中的一个,这样测试的时候也是照着这个样本来的,根本无法代表整个网站,于是就有了参数化,对于网址和ip的参数化其实无所谓,关键是对category和goods的id的参数化,参数化之后,我们只要提供不同的键值对(catid,gdid),这样使用并发模拟的时候,就能取到所有可能的我们所提供的的id了!换句话说,只要我们把所有的category的id和goods的id都提供出来(至于怎么取得所有的那就得问后端了),Jmeter就能保证把这些都覆盖到!(当然前提是模拟的用户得足够多)
  4. Jmeter模拟的执行过程(假设模拟10个用户):
    • 遇到第一个sampler是根目录,10次访问完成
    • 遇到第二个sampler是category,发现id参数化了,于是找到csv文件,随机抽10个catid访问,总共也是10次
    • 遇到第三个sampler是goods,发现id参数化了,于是根据上面一步的catid,找到对应的gdid继续访问。(注意的一点是第二步的分支决定了第三步的分支)总的来说,第三sampler也总共访问了10次

4.4 校验

我们只是能够访问这个网站其实还不够,我们还应当判断这个网站的内容是不是真的正确,比如在category的一个页面中,我们点击之后还应当是此页面:
he
href
现在我们就需要添加断言这个组件了。

添加选择器

我们首先的目的应该是从网页源代码中选择出要判断的对象,于是使用CSS/JQuery Extractor这个组件(其实还可以使用正则表达式或者是xpath等,这里不演示了)
选择器
设置各种属性在这里插入图片描述

添加Beanshell

我们选择出来了还不够,应当进行判断看看是否和我们的预期相符,所以应该添加脚本。
scripts
之后进行如下配置,点击运行后,就可以在dos窗口查看打印结果了。
dos

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程从基础讲起,全课程以实战为主,每个知识点通过实际案例演练讲解理论+实践结合,更容易理解,适合小白,低门槛,快速上手。 课程同时涵盖web端和移动端app测试,同时还加入了抓包工具的使用; 1) 第一阶段为JMETER 5.4.1 (最新版本)工具使用篇,通过Jmeter 介绍和安装、http 取样器、JDBC 取样器、JMETER 组件详细讲解、配置元件、三种参数化方式教你玩转JMETER 参数化、工作过程中间所需的常用函数、聚合报告、察看结果树、汇总报告等监听器知识,后置处理器、后置处理器之正则表达式提取器提取响应内容实践、读取本地JSON格式文件实例、正则表达式操作符、正则表达式工具之Regextester,系统全面学习正则表达式,突破JMETER 知识难点,响应断言、JMETER分布式、分布式原理、搭建JMETER 分布式、WebService协议接口测试。 每一个知识点采用理论加案例的方式,吃透每一个知识点,为性能测试实践奠定基础。 2) 第二阶段为性能测试实践篇1、通过JMETER 实践爬虫技术,爬取第三方平台全网页地址、批量爬取国外网站壁纸10W+图片并保存到本地;2、详细介绍Fiddler 抓包工具,Fiddler 抓包工具原理、Fiddler 抓取PC 端和移动端包信息、JMETER+Fiddler 结合使用对PC 端项目进行性能测试项目实践,提升PC 端性能测试能力;3、JMETER+Fiddler  结合使用对app 项目进行性能测试项目实践,提升app项目性能测试能力4、性能测试常见的业务指标和技术指标、响应时间、TPS、HPS等知识进行讲解5、通过JMETER 对移动端项目进行性能测试实战; 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值