软件性能测试概览与常用测试工具介绍

1,189 阅读10分钟

(大部分为资料援引,找不到出处了,若有侵犯产权请告知,将道歉并移去。小部分为个人使用经验与截图,未完待补充,请知悉)

软件测试PPT

性能测试总介绍

综述

性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。

几言以蔽之-性能测试(Performance Testing)

用户视角

  • 这么久?怎么还没好?一一响应时间
  • 为什么总是失败?一一稳定性

管理员视角

  • 服务器资源使用合理吗?一一资源利用率
  • 数据库使用合理吗?一一资源利用率
  • 系统能否实现扩展?一一可扩展性
  • 最多支撑多少用户访问?一一系统容量
  • 最大业务处理量?一一系统容量
  • 系统有哪些潜在的瓶颈?一一可扩展性
  • 更换哪些设备,添加哪些机器可以提高系统性能?一一可扩展性
  • 7×24小时连续不间断业务访问?一一稳定性

开发视角

  • 架构设计是否合理?一一架构设计
  • 数据库设计是否合理?一一数据库设计
  • 代码是否存在性能问题?一一代码
  • 是否有不合理的内存使用?一一代码
  • 是否有不合理的线程同步操作?一一代码
  • 是否有不合理的资源竞争?一一代码
  • 代码算法是否还能有进一步提升?一一代码

性能测试人员视角

主要目标

  • 验证产品性能在特定负载和环境条件下使用是否满足性能指标
  • 进一步发现系统中存在的性能瓶颈,优化系统

度量方法

  • 不同的关注对象采用不同的性能的度量方法
  • 服务端性能采用CPU、内存等使用率来度量
  • 客户端性能通常根据系统处理特定用户请求的响应时间来度量

主要指标

  • 响应时间(客户端、服务端)
  • 并发用户数(取决于实际场景)
  • 吞吐量(单位时间内处理的用户请求数量)
  • *性能计数器(描述系统性能的一些数据指标)

概念区分

  • 负载测试(正常负载条件下)
  • 压力测试(超过或极端负载情况)
  • 压力测试要求(希望)系统做到:
    • 压力提升时,系统性能按照预期缓慢下降
    • 由高压状态下调压力时,系统应能自动逐渐恢复性能

性能测试软件

各软件对比表

比较点 JMeter nGrinder LoadRunner Apache Benchmark Locust wrk
实现语言 Java Java/Python Java/VB/C/.NET Python C
使用方式 C/S或Command B/S B/S Command B/S或Command Command
支持分布式 master/slave controller/agent master/slave 不支持 master/slave 不支持
资源监控 monitor/plugin,如果二开,需要查找plugin的源码 monitor方式,有直接可用的源码 自带资源监控功能 不支持 不支持 不支持
社区活跃度 文档完善 有中文社区 网上资料和相关培训很多,购买正版还可以得到技术支持 过于简单,无需繁杂文档 开源免费 开源免费
是否需要编码 基本不需要 需要,Jython/Groovy 需要 不需要 需要,Python 不需要
脚本的维护 本地 内置SVN 本地 本地 本地 本地
脚本录制 可使用BadBoy进行录制 可通过PTS插件进行录制 自带录制功能 不支持 不支持 不支持
可扩展性 可增加plugin,输出结果可以再加工 可增加plugin 通过扩展函数库实现 基本不支持 具有极强的可定制型 需要使用者自行编写lua脚本
安装 简单,解压即可 简单,可以下载安装包或绿色包解压 安装包比较大,安装繁琐 apache自带 依赖python 简单,yum或apt-get即可

Jmeter部分

功能简介

Apache JMeter

JMeter作为一款广为流传的开源压测产品,最初被设计用于Web应用测试,如今JMeter可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器等等,还能对服务器、网络或对象模拟巨大的负载,通过不同压力类别测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

img

JMeter的特点包括对HTTP、FTP服务器、数据库进行压力/性能测试;完全的可移植性;完全 Swing和轻量组件支持包;完全多线程;缓存和离线分析/回放测试结果;可链接的取样器;具有提供动态输入到测试的功能;支持脚本编程的取样器等。在设计阶段,JMeter能够充当HTTP PROXY(代理)来记录浏览器的HTTP请求,也可以记录Apache等WebServer的log文件来重现HTTP流量,并在测试运行时以此为依据设置重复次数和并发度(线程数)来进行压测。

参考文章:《云智慧压测实战分享之JMeter工具使用初探(云智慧压测实战分享之JMeter工具使用初探 - CloudwiseAPM - SegmentFault )》

官网链接:Apache JMeter - Apache JMeter™

优势

  • 开源,轻量级安装简单,社区接受度高,比较容易入门
  • 利用badboy录制测试脚本,可以快速的形成测试脚本
  • 使用参数化以及Jmeter提供的函数功能,可以快速完成测试数据的添加修改等
  • 不只依赖于界面,测试脚本不需要编程,熟悉http请求,熟悉业务流程,就可以根据页面中input对象来编写测试用例,测试脚本灵活
  • 社区比较完善,提供了比较丰富的协议支持。比如除了支持常见的HTTP协议之外,还可以直接通过JDBC Sampler连接数据库,把期望的测试结果存入数据库中,直接对测试结果进行验证。在编写测试脚本过程中,可以将不同的协议调用使用同一个脚本进行组合调用,写出比较复杂的测试用例。
  • 提供了比较高级的扩展能力,允许自己定义和扩展新的协议支持,比如扩展支持阿里提供的Dubbo协议的JMeter插件等
  • JMeter提供了HTML测试报告和Jenkins集成的能力,比较方便地实现一些基础的持续测试

安装

  1. 安装jdk,不详述

  2. Jmeter官网jmeter.apache.org/download_jm…

  3. 可直接双击打开**\apache-jmeter-5.1.1\bin下的ApacheJMeter.jar**文件,亦可打开jmeter.bat文件打开图形界面

  4. 亦可于cmd命令行窗口/运行窗口中输入jmeter,启动jmeter ,如图(需要配置环境变量至**\bin**的父目录)

    image-20191208201218531

基本介绍

测试计划

测试计划中可以选择添加多种组件

image-20191208221753299

线程组

常用取样器

image-20191208221308313

常用逻辑控制器

image-20191208221320704

常用前置处理器

image-20191208221333509

常用后置处理器

image-20191208221343866

常用断言

image-20191208221354108

常用定时器

image-20191208221419767

常用配置元件

image-20191208221434007

常用监听器

image-20191208221445595

软件工具

默认Tools

image-20191208222205843

Plugins
Plugins Manager
  1. 插件管理器及其他插件下载官方地址:jmeter-plugins.org/install/Ins…

  2. 并按照文档要求:Download plugins-manager.jar and put it into lib/ext directory, then restart JMeter.

  3. 重启后可在Jmeter-选项中打开Plugins Manager,如图:

    image-20191208223946119

  4. 此后亦可在Plugins Manager中安装、更新插件

插件推荐
  • Transactions per Second

    TPS:每秒事务数,性能测试中,最重要的2个指标之一。该插件的作用是在测试脚本执行过程中,监控查看服务器的TPS表现————比如整体趋势、实时平均值走向、稳定性等。

    jmeter本身的安装包中,监视器虽然提供了比如聚合报告这种元件,也能提供一些实时的数据,但相比于要求更高的性能测试需求,就稍显乏力。

    通过上面的下载地址下载安装好插件后,重启jmeter,从监听器中就可以看到该插件,如下图所示:

    img

    某次压力测试TPS变化展示图:

    img

  • Response Times Over Time

    TRT:事务响应时间,性能测试中,最重要的两个指标的另外一个。该插件的主要作用是在测试脚本执行过程中,监控查看响应时间的实时平均值、整体响应时间走向等。

    使用方法如上,下载安装配置好插件之后,重启jmeter,添加该监视器,即可实时看到实时的TRT数值及整体表现。

    某次压力测试TRT变化展示图:

    img

  • PerfMon Metrics Collector

    服务器性能监控数据采集器。在性能测试过程中,除了监控TPS和TRT,还需要监控服务器的资源使用情况,比如CPU、memory、I/O等。该插件可以在性能测试中实时监控服务器的各项资源使用。

    下载地址:jmeter-plugins.org/downloads/a…

    其中JMeterPlugins-Standard和JMeterPlugins-Extras是客户端的插件,ServerAgent是服务端的插件。

    下载成功后,复制JmeterPlugins-Extras.jarJmeterPlugins-Standard.jar两个文件,放到jmeter安装文件中的lib/ext中,重启jmeter,即可看到该监视器插件。如下图:

    img

    将ServerAgent-2.2.1.jar上传到被测服务器,解压,进入目录,Windows环境,双击ServerAgent.bat启动;linux环境执ServerAgent.sh启动,默认使用4444端口。

    1、服务端启动校验

    CMD进入命令框,观察是否有接收到消息,如果有,即表明ServerAgent成功启动。

    2、客户端监听测试

    给测试脚本中添加jp@gc - PerfMon Metrics Collector监听器,然后添加需要监控的服务器资源选项,启动脚本,即可在该监听器界面看到资源使用的曲线变化。如下图所示:

    img

    在脚本启动后,即可从界面看到服务器资源使用的曲线变化,Chart表示主界面显示,Rows表示小界面以及不同资源曲线所代表的颜色,Settings表示设置,可选择自己需要的配置。

测试用例截图

图表、报表

Aggregate Graph(汇总图)

Response Time Graph(响应时间图)

Graph Results(图形结果)

View Results in Table(用表格察看结果)

视频

  • 录制(http测试)

  • 回放

  • 多用户模拟

  • 分布式

  • IP欺骗功能

LoadRunner(待补充)

功能简介

优势

安装

测试用例截图

图表、报表

视频

  • 录制(http测试)

  • 回放

  • 多用户模拟

  • 分布式

  • IP欺骗功能