热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何做好性能测试?

本文是_《PerformanceTestTogether》(简称PTT)_系列专题分享的第二期,该专题将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能

本文是 _ 《Performance Test Together》(简称PTT)_

系列专题分享的第二期,该专题将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能压测的全过程进行拆解,以帮助大家 _

构建完整的性能压测的理论体系,并提供有例可依的实战。_

该系列专题分享由 阿里巴巴 PTS 团队 出品,欢迎在文末处加入性能压测交流群,参与该系列的线上分享。


**第一期:《

压测环境的设计和搭建》**,点击这里。

本文致力于给出性能压测的概念与背景介绍,同时针对市场上的一些性能压测工具,给出相应的对比,从而帮助大家更好地针对自身需求实现性能压测。

为什么要做性能压测



在介绍性能压测概念与背景之前,首先解释下为什么要做性能压测。从09年的淘宝双十一大促导致多家合作银行后台系统接连宕机,到春运期间12306购票难,再到前不久聚美优品促销活动刚开始就遭秒杀。根据Amazon统计,每慢100毫秒,交易额下降1%。这些事件和统计数据为大家敲响了警钟,也客观说明了性能压测对于企业应用的重要性。

从具体的作用上讲,性能压测可以用于新系统上线支持、技术升级验证、业务峰值稳定性保障、站点容量规划以及性能瓶颈探测。

1. 新系统上线支持

在新系统上线前,通过执行性能压测能够对系统的负载能力有较为清晰的认知,从而结合预估的潜在用户数量保障系统上线后的用户体验。

2. 技术升级验证

在系统重构过程中,通过性能压测验证对比,可以有效验证新技术的高效性,指导系统重构。

3. 业务峰值稳定性保障

在业务峰值到来前,通过充分的性能压测,确保大促活动等峰值业务稳定性,保障峰值业务不受损。

4. 站点容量规划

通过性能压测实现对站点精细化的容量规划,指导分布式系统机器资源分配。

5. 性能瓶颈探测

通过性能压测探测系统中的性能瓶颈点,进行针对性优化,从而提升系统性能。

综上所述,性能压测伴随着系统开发、重构、上线到优化的生命周期,因此有效的性能压测对系统的稳定性具有重要的指导意义,是系统生命周期中不可或缺的一部分。

性能压测的基本概念




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


从测试目的上性能压测又可以划分为负载测试、压力测试、并发测试、配置测试以及可靠性测试。



  • 负载测试是测试当负载逐渐增加时,系统各项性能指标的变化情况。



  • 压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。



  • 并发测试通过模拟用户并发访问,测试多用户并发访问同一个软件、同一个模块或者数据记录时是否存在死锁等性能问题。



  • 配置测试是通过对被测系统的软/硬件环境的调整,了解各种不同方法对软件系统的性能影响的程度,从而找到系统各项资源的最优分配原则。



  • 可靠性测试是在给系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定。



总的来说,性能压测是在对系统性能有一定程度了解的前提下,在确定的环境下针对压测需求进行的一种测试。

如何选取 性能压测工具



在选取合适的性能压测工具之前,我们需要先了解执行一次完整的性能压测所需要的步骤:

1. 确定性能压测目标: 性能压测目标可能源于项目计划、业务方需求等

2. 确定性能压测环境: 为了尽可能发挥性能压测作用,性能压测环境应当尽可能同线上环境一致

3. 确定性能压测通过标准:

针对性能压测目标以及选取的性能压测环境,制定性能压测通过标准,对于不同于线上环境的性能压测环境,通过标准也应当适度放宽

4. 设计性能压测: 编排压测链路,构造性能压测数据,尽可能模拟真实的请求链路以及请求负载

5. 执行性能压测: 借助性能压测工具,按照设计执行性能压测

6. 分析性能压测结果报告: 分析解读性能压测结果报告,判定性能压测是否达到预期目标,若不满足,要基于性能压测结果报告分析原因

由上述步骤可知,一次成功的性能压测涉及到多个环节,从场景设计到施压再到分析,缺一不可。工欲善其事,必先利其器,而一款合适的性能工具意味着我们能够在尽可能短的时间内完成一次合理的性能压测,达到事半功倍的效果。

工具选型对比



在论述了性能压测必要性之后,如何选取性能压测工具成为一个重要的议题。本文选取了市场上主流性能压测工具: Apache Bench

(ab)、LoadRunner、JMeter、阿里云PTS
,并从多个方面出发分析了各个工具的优缺点,汇总后的优缺点如下表所示:

压测工具

|

Apache Bench(ab)

|

LoadRunner

|

JMeter

|

PTS

---|---|---|---|---

学习成本

|

|

|

|

安装部署成本

|

|

|

|

是否免费

|

|

|

|

是否支持多协议

|

|

|

|

压测结果是否能够图形化展示

|

|

|

|

是否支持TPS模式

|

|

|

|

是否有链路、场景编排管理支持

|

|

|

|

是否支持场景录制

|

|

|

|

生态环境强弱

|

|

|

|

监控指标是否完备

|

|

|

|

是否原生支持流量地域定制

|

|

|

|


Apache Bench(ab)

Apache Bench(ab)是一款用来针对HTTP协议做性能压测的命令行工具,支持在本地环境发起测试请求,验证服务器的处理性能。它主要具有以下特点:

首先,作为一款开源工具,ab具有较好的扩展性,测试开发人员可以基于自身需求对其进行二次开发,同时它对HTTP协议支持度较好,比如支持设定HTTP请求头、支持COOKIE以及HTTP的多种方法。

来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相关技术,全面提升测试开发工程师的技术实力

QQ交流群:484590337

公众号 TestingStudio

点击获取更多信息



推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 如何使用代理服务器进行网页抓取?
    本文介绍了如何使用代理服务器进行网页抓取,并探讨了数据驱动对竞争优势的重要性。通过网页抓取,企业可以快速获取并分析大量与需求相关的数据,从而制定营销战略。同时,网页抓取还可以帮助电子商务公司在竞争对手的网站上下载数百页的有用数据,提高销售增长和毛利率。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • adfs是什么_培训与开发的概念
    adfs是什么_培训与开发的概念(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系me@nap7.com)ADFS相关开发技术的中文资料相对匮乏,之前在弄这个东西的时候 ... [详细]
  • 软件测试对于减少程序BUG有多大帮助?有经验的程序员通常认为测试与代码同等重要,测试可以减少代码变更或扩展的不确定性。测试应该方便阅读简单且能快速运行 ... [详细]
  • 文章目录UnsafeDeserialization反序列化漏洞背景认识Java序列化与反序列化用途应用场景Java中的API实现:序列化基础类型参数序列化对象漏洞是怎么来的呢?解决 ... [详细]
  • OpenStack 的 Nova 和 Glance 组件
    简单回顾一下OpenStack三大组件的用途:OpenStackCompute(Nova),为云组织的控制器,它提供一个工具来部署云&#x ... [详细]
  • mysql和php的关系理解(php技术和mysql怎么结合)
    本文目录一览:1、apachephpmysql他们是什么关系 ... [详细]
  • ps:本文转载于:https:www.ibm.comdeveloperworkscnjavaj-lo-git-mangeindex.htmlGit是目前最流行的源代码管理工具。大量 ... [详细]
  • Java大文件HTTP断点续传到服务器该怎么做?
    最近由于笔者所在的研发集团产品需要,需要支持高性能的大文件http上传,并且要求支持http断点续传。这里在简要归纳一下,方便记忆 ... [详细]
  • 注意:以下分析都是基于Retrofit2转载请注明出处:http:blog.csdn.netevan_manarticledetails51320637本节是《Retrofit的使 ... [详细]
author-avatar
军军CJJ_317
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有