自动化测试工具之 Jmeter性能测试

Posted HT . WANG

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化测试工具之 Jmeter性能测试相关的知识,希望对你有一定的参考价值。

性能测试知识点

1.性能测试概念:

通过自动化测试工具模拟多种正常,峰值以及异常负载条件来对系统的各项性能指标进行测试

2.性能测试条件

  • 系统基础功能测试验证完成
  • 系统趋于稳定

3.性能测试基本流程

  • 需求分析

(1)系统信息调研

(2)业务信息调研

(3)性能需求评估

 判断是否进行性能测试主要从下面两个方面进行思考:
业务角度:

   系统是公司内部 or 对外?系统使用的人数的多少?此时可进行性能测试来排查问题。
系统角度:系统又可以从以下3个方面进行分析
  a.系统架构:
     如果一个系统采用的框架是老的系统框架(通常大公司都有自己的统一框架),只是在此框架上增加一些应用,其实是没有必要做性能测试,因为老框架的使用肯定是经过了验证的。如果一个系统采用的是一种新的框架,可以考虑做性能测试。
  b.数据库要求:
     很多情况下,性能测试是大数据量的并发访问、修改数据库,而瓶颈在于连接数据库池的数量,而非数据库本身的负载、吞吐能力。这时,可以结合DBA的建议,来决定是否来做性能测试。
  c.系统特殊要求:
     从实时性角度来分析,某些系统对响应时间要求比较,比如证券系统,系统的快慢直接影响客户的收益,这种情况就有作并发测试的必要,在大并发量的场景下,查看这个功能的响应时间。从大数据量上传下载角度分析,某些系统经常需要进行较大数据量的上传和下载操作,有必要进行性能测试,确定系统能处理的最大容量

(4)确定性能测试点

(5)确定性能指标

  • 测试准备

(1)测试环境准备:
  a)系统运行环境:这个通常就是我们的测试环境,有些时候需求比较多,做性能测试担心把环境搞跨了影响其它的功能测试,可能需要重新搭建一套专门用来做性能测试的环境。
  b)执行机环境:这个就是用来生成负载的执行机,通常需要在物理机上运行,而物理机又是稀缺资源,所以我们每次做性能测试都需要提前准备好执行机环境。
(2)测试场景设计:根据性能需求分析来设计符合用户使用习惯的场景,场景设计的好不好直接影响到性能测试的效果。
(3)性能工具准备:
  a)负载工具:根据需求分析和系统特点选择合适的负载工具,比如LR、Jmeter或galting等
  b)监控工具:准备性能测试时的服务器资源、JVM、数据库监控工具,以便进行后续的性能测试分析与调优。
(4)测试脚本准备:如果性能测试工具不能满足被测系统的要求或只能满足部分要求时,需要我们自己开发脚本配合工具进行性能测试。
(5)测试数据准备:
  a)负载测试数据:并发测试时需要多少数据?比如登录场景?
  b)DB数据量大小:为了尽量符合生产场景,需要模拟线上大量数据情况,那么要往数据库里提前插入一定的数据量。这可能需要花费一些时间,特点是关联系统较多,逻辑复杂的业务可能同时涉及多张表。
(6)其它:如果需要其它其它关联系统或专业人士如DBA配合的,也需要提前进行沟通。

  • 测试执行

(1)人工边执行边分析

(2)无人值守执行性能测试

  • 结果分析与调优
  • 报告与总结

自动化测试工具Jmeter

jmeter能够完成功能:

  • 用于对服务器,网络或对象模拟巨大负载
  • 通过创建带有断言的脚本来验证程序是否能返回预期的结果

优缺点:

优点:开源,跨平台,支持多协议 小巧且功能强大

缺点:不支持IP欺骗  无法验证JS程序和UI界面

工具使用:

参照项目点餐系统(MVC框架,RESTfull风格)进行测试

(一)添加协议及接口相关配置信息

(1)添加http请求

 (2)新增监听器,查看测试结果

 

 (二)线程组

设置属性:

(1)线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
(2)Ramp-Up时间(秒)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。
(3) 循环次数:每个线程发送请求的次数。如果线程数为10,循环次数为100,那么每个线程发送100次请求。总请求数为10x100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
(4)Delay Thread creation until needed:直到需要时延迟线程的创建。
(5)调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
持续时间(秒):测试持续时间,会覆盖结束时间
启动延迟(秒):测试延迟启动时间,会覆盖启动时间
启动时间:测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试时当前时间也会覆盖它。
结束时间:测试结束时间,持续时间会覆盖它。

(三)并发和顺序执行

并发执行

 顺序执行

 (四)特殊线程组

  •  setUp线程组:最优先执行的线程组
  • tearDown线程组:最后执行的线程组

(五)http请求默认值

http请求默认值的设置,将被复用的内容进行封装

 (六)信息头管理器

新增修改实现时 所提交数据都为json格式 需要说明所提交数据类型

 (七)参数化

动态获取,设置或生成数据,满足多次大量提交,避免每次测试都要修改

实现参数化:

  • 用户定义的变量

  • CSV数据文件设置

步骤:

1使用CSV文件存储测试数据

2编写被复用的菜单新增脚本模板

3关联脚本与数据(将文件数据导入脚本)

 

  • 用户参数

步骤:

1编写被复用的菜单新增脚本模板

2使用用户参数存储测试数据

3将数据导入脚本模板

4设置执行次数

  • 函数

(1)计数器函数:_counter   

TRUE:每个用户都有自己的计数器

FALSE:所有用户共用一个计数器

(2)随机数函:_Randm

参数1:取值范围最小值

参数2:取值范围最大值

(3)时间函数:_time

无参:获取距离1970/1/1 00:00:00的毫秒值

参数格式:yyyyMM_dd HH:mm::ss

(八)断言

断言:程序代替人工判断响应结果是否符合预期

步骤:

1编写测试脚本

2为判断的取样器添加断言组件

3直接运行查看结果   断言通过:无提示   断言失败:给出错误

分类:

响应断言:断言状态码和响应体

大小断言:判断响应内容的字节长度

断言持续时间:判断响应时间

(九)逻辑控制器

测试完整的业务逻辑或流程

  • if逻辑控制器

​​​​​​​​​​​​​​

 给定一个变量值,根据变量值是否一致判断 请求是否需要被执行

如果条件满足 则执行:

 如果不满足 则不执行:

  • ForEach逻辑控制器

​​​​​​​

  • 循环逻辑控制器

​​​​​​​​​​​​​​

(十)关联

上一个请求的响应结果和下一个请求的数据有关系

将A网址title获取并传递给B网站(Baidu.com)作为关键字搜索

(十一)跨越线程组关联

局部变量可直接传递:

 非全局变量无法跨线程传递:

 借助函数生成器完成 全局变量传递:

 

(十二)高并发

同一时刻 100个用户访问

 

(十三)高频率

一个用户以20QPS频率访问  持续15秒

QPS:每秒查询量    每秒访问多少次服务器

(十四)分布式

多机协作,集群方式完成测试任务,提高测试效率

角色划分:

  • 控制机:负责任务分配
  • 执行机:负责任务实现

流程:

  • 控制机需要制定测试任务,并下发到执行机
  • 执行机执行任务并返回结果到控制机
  • 控制机结果汇总​​​​​​​

以上是关于自动化测试工具之 Jmeter性能测试的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins+Ant+Jmeter 自动化性能测试平台之填坑篇

jmeter学习视频

Jmeter性能测试之关联

性能测试三:jmeter进阶之图形插件

Jmeter性能测试之分布式

性能测试-JMeter断言之响应断言精说