谈到性能测试,大家一定会联想到Jmeter和LoadRunner,这两款工具目前在国内使用的相当广泛,主要原因是Jmeter是开源免费,LoadRunner 11在现网中存在破解版本。商用型性能测试工具对于中小型企业很难承担相关的费用。国内的性能测试工具有:CPTS(华为)、kylinTOP(奇林)、PTS(阿里)等,国外的性能测试工具LoadRunner相对比较出名。Loadrunner在国内出名的原因主要还是因为LoadRunner 进入中国的市场比较早,而且网上还存在破解版本。现在我们主要研究一下Jmeter工具。网络上经常看到网友们抱怨Jmeter工具测试的结果不准,而为什么不准都是丈二的和尚摸不着头脑。那么今天我就和网友们分享一下Jmeter工具在使用上到底有什么限制,以期对网友们有帮助,提高对Jmeter工具的认知。

Apache软件基金会(ASF)是一家总部位于美国的非营利性慈善组织。ASF的所有产品都通过公共论坛的在线协作开发,并从美国境内的中央服务器分发。Jmeter是ASF的一款开源免费软件 ,在国内被很多中小公司当作性能测试工具广泛使用。该款工具的本意不是用于性能测试,而是用于开发人员的接口功能调试使用。

Jmeter做性能或压力测试,首先要建立一个线程组,如果需要事务在线程组内再添加事务,然后根据需要可以设置并发的虚拟用户数。Jmeter构造并发虚拟用户的技术路线是通过构造线程,每个线程同时运行相同的线程组。为了弄清楚jmeter统计结果不准确,首先我们要搞清楚Jmeter对线程组中的HTTP请求运行的机制。

1、 测试思路

步骤1:使用Jmeter录制一个web页面

步骤2:建立测试计划,各自运行脚本一次,运行的过程通过(wireShark抓包)

步骤3:通过对wireShark网络抓包结果分析HTTP请求的顺序。

步骤4:wireShark抓包获得的HTTP请求顺序与浏览单独访问URL时的幕布对比。

2、选择被测试对象

基于以上思路我们从网络上选取一个web URL(HTTP://cloud.10oa.com/trial/view/catalogue.aspx)作为被测试对象

3、脚本录制同时F12打开Chorme的network选项

通过Jmeter 5.1工具自带的代理录制功能,录制上述URL,在录制的过程中按F12键,切换到network选项。

注意:Jmeter录制时必须按F12,把chrome的network打开才录制到完整的HTTP请求,否则可能只能录制到第1条请求。

Jmeter脚本录制时的页面HTTP瀑布图

4、执行性能测试计划

单击Jmeter的测试计划启动按钮,单用户启动执行一次脚本

注:此图通过wireShark的网络抓包获得HTTP请求的开始与结束时间,再通过excel画出瀑布图

5、测试结果分析

从Jmeter的测试计划执行结果的wireShark抓包分析的瀑布图看,Jmeter对HTTP请求是按串行下发请求(前一个请求返回结束,下一请求才开始下发请求),并发数为1个HTTP,从开始执行到最后执行结束,用时超过3秒钟,真实浏览器单独访问URL时长在1秒左右。

Jmeter可用于开发人员在产品开发中的功能调试使用并做一些非定量的性能测试,不适用于测试人员做定量的性能测试,更不能以此测试结果输出测试结论误导他人。

如果web服务器对外提供的服务是纯HTTP接口功能(非web页面),且用户的访问是线性的(串行该问),则可以考虑使用Jmeter测试。即使web服务器对外提供的服务是纯HTTP接口功能(非web页面),如果用户访问是非线性,那么测试的结果也是不可靠的。记住一点,只有线性的接口请求模型才适用于Jmeter。

性能测试工具Jmeter你所不知道的内幕的更多相关文章

  1. 性能测试工具LoadRuner你所不知道的内幕

    谈到性能测试,大家一定会联想到Jmeter和LoadRunner,这两款工具目前在国内使用的相当广泛,主要原因是Jmeter是开源免费,LoadRunner 11在现网中存在破解版本.商用型性能测试工 ...

  2. 你所不知道的SQL Server数据库启动过程(用户数据库加载过程的疑难杂症)

    前言 本篇主要是上一篇文章的补充篇,上一篇我们介绍了SQL Server服务启动过程所遇到的一些问题和解决方法,可点击查看,我们此篇主要介绍的是SQL Server启动过程中关于用户数据库加载的流程, ...

  3. 你所不知道的五件事情--java.util.concurrent(第二部分)

    这是Ted Neward在IBM developerWorks中5 things系列文章中的一篇,仍然讲述了关于Java并发集合API的一些应用窍门,值得大家学习.(2010.06.17最后更新) 摘 ...

  4. 你所不知道的Html5那些事(一)

    文章简介:       关于html5相信大家早已经耳熟能详,但是他真正的意义在具体的开发中会有什么作用呢?相对于html,他又有怎样的新的定义与新理念在里面呢?为什么一些专家认为html5完全完成后 ...

  5. [转帖]你所不知道的C和C++运行库

    [C-C++]你所不知道的C和C++运行库 https://blog.csdn.net/humanking7/article/details/85887884 原作者也是转的blog 最近一个物理机上 ...

  6. js值----你所不知道的JavaScript系列(6)

    1.数组 在 JavaScript 中,数组可以容纳任何类型的值,可以是字符串.数字.对象(object),甚至是其他数组(多维数组就是通过这种方式来实现的) .----<你所不知道的JavaS ...

  7. Android Context完全解析,你所不知道的Context的各种细节

    Context相信所有的Android开发人员基本上每天都在接触,因为它太常见了.但是这并不代表Context没有什么东西好讲的,实际上Context有太多小的细节并不被大家所关注,那么今天我们就来学 ...

  8. 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制

    你所不知道的库存超限做法 在互联网企业中,限购的做法,多种多样,有的别出心裁,有的因循守旧,但是种种做法皆想达到的目的,无外乎几种,商品卖的完,系统抗的住,库存不超限.虽然短短数语,却有着说不完,道不 ...

  9. 一些你所不知道的VS Code插件

    摘要: 你所不知道的系列. 原文:提高 JavaScript 开发效率的高级 VSCode 扩展之二! 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 作为一名业余爱好者.专业人员,甚 ...

随机推荐

  1. Python Mock 的入门

    Mock是什么 Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西.准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代 ...

  2. SQL JOIN 和 UNION 用法

    1 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons, Orders WHERE Persons.Id_P ...

  3. Android中Intent的各种常见作用。

    Android开发之Intent.Action  1 Intent.ACTION_MAIN String: android.intent.action.MAIN 标识Activity为一个程序的开始. ...

  4. acedCommandS 实现pedit命令

    acedCommandS(RTSTR, _T("PEDIT"),                RTSTR, _T("M"),                R ...

  5. Java工厂模式解耦 —— 理解Spring IOC

    Java工厂模式解耦 -- 理解Spring IOC 最近看到一个很好的思想来理解Spring IOC,故记录下来. 资源获取方式 主动式:(要什么资源都自己创建) 被动式:(资源的获取不是我们创建, ...

  6. Spring Boot从入门到精通(六)集成Redis实现缓存机制

    Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言 ...

  7. Ado.net 02

    1.连接字符串不同,连接池也不同 SqlConnection对象只能被打开一次.但是在Close()后再进行Open()操作.但是在Dispose()之后就不能再Open()了. 2.SqlDataA ...

  8. SpringBoot1.5.10.RELEASE整合druid时,在druid monitor界面出现(*) property for user to setup

    接上篇随笔,配置druid之后出现的错误,解决方法如下: @Bean(destroyMethod = "close",initMethod = "init") ...

  9. JavaScript对象(三)

    序列化对象: 对象序列化:对象的状态转化为字符串,也可以将字符串还原为对象.方法:JSON.stringify(),用来序列化,JSON.parse(),用来还原对象. JSON(JavaScript ...

  10. 【设计思想】MVC模式

    MVC 模式 MVC 模式(三层架构模式) MVC模式(Model-View-Controller, MVC): 是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图( ...