热门标签 | 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

点击获取更多信息



推荐阅读
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • 自动化部署服务——AWS CodeDeploy 快速入门
    https:amazonaws-china.comcnblogschinagetting-started-with-codedeploy作为DevOps和微服务的深入践行者 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 无论你是刚毕业的大学生,还是想在职业中寻求进步的经验丰富的IT专家,这些提示都可以帮你成为DevOps工程师。DevOps工程是一个备受称赞的热门职业。不管你是刚毕业正在找第一份工 ... [详细]
  • 压力测试工具  ab
    ab是Apache自带的一个压力测试工具,命令行,是ApacheBench命令的缩写。ab的原理:ab命令会创建多个并发访问线程ÿ ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • B站服务器故障影响豆瓣评分?别担心,阿里巴巴架构师分享预防策略与技术方案
    13日晚上,在视频观看高峰时段,B站出现了服务器故障,引发网友在各大平台上的广泛吐槽。这一事件导致了连锁反应,大量用户纷纷涌入A站、豆瓣和晋江等平台,给这些网站带来了突如其来的流量压力。为了防止类似问题的发生,阿里巴巴架构师分享了一系列预防策略和技术方案,包括负载均衡、弹性伸缩和容灾备份等措施,以确保系统的稳定性和可靠性。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 本文深入探讨了如何选择适合业务需求的MySQL存储引擎,详细解析了不同存储引擎的特点、适用场景及其在数据存储和管理中的优势。通过对比InnoDB、MyISAM等主流引擎,为读者提供了全面的技术指导和专业建议,帮助开发者在实际应用中做出明智的选择。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • 2010年下半年软件评测师试题标准答案阅卷用标准答案,更多答案登录http:www.enpass.cn查看,软考培训权威机构由于发博文的限制,有些图片不能发上来,下载完全版答 ... [详细]
  • java web 产品补丁更新技术_JavaWeb 并发:FOR UPDATE 实战,监测并解决。
    Writer:BYSocket(泥沙砖瓦浆木匠)一、前言针对并发,老生常谈了。目前一个通用的做法有两种:锁机制:1.悲观锁& ... [详细]
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社区 版权所有