• 1
  • 1
分享

1、引言

关于性能测试的话题,在小鱼的博客中,没有三位数,也有个位数。虽然写的不少,但是能记住的不多…

这习惯性的喝点咖啡,然后就…(不喝咖啡睡眠质量也不咋地),索性就再唠点。

我们都知道,性能测试的目的就是获取系统响应时间、吞吐量、稳定性、容量等信息。

那么,我到底改如何去做或者如何发现这些缺陷?

跟着小鱼往下捋~~

2、性能测试内容

关于性能测试,从以下几个方面入手就可以。

2.1 基准测试

Benchmark或者Baseline测试。

一般为单用户测试,或者是零数据量环境下的测试。

目的

目的在于建立一个可度量的参考标准,为其他测试场景或者调优过程提供对比参考。

也可认为是最基础的性能测试,如果基准测试的结果都不能达到预期要求,那么后续场景也就没必要测试了。

2.2 日常压力测试

在基准测试通过后,应该先进行较小压力下的测试,首先对系统在日常压力下的表现进行测试。此压力需要根据系统使用相关数据得出,如系统平均每天访问量、平均在线人数、每日完成事务数等。通过此测试,发现一些较表面的性能问题并进行处理。

2.3 峰值压力测试

在日常压力测试通过后,需要进行更大压力的测试。

此处压力同样需要相关数据的支持,一般为未来几年后的预期压力。可根据历史日均压力、日最高压力等信息,估算出未来几年的日均以及日最高压力。再通过一些通用估算方法、如二八原则,将日压力转换成峰值压力。

峰值压力为可预期到的最大负载压力,通过了此测试,则认为系统有能力满足未来增长的压力。

2.4 容量测试

验证了系统是否可满足预期的压力后,还需要知道系统能够承受的最大压力,也就是容量。一般通过“拐点法”进行测试,逐步增大系统的压力,直到性能指标不可接受或者出现了明显的拐点。如下图,拐点在哪?

2.5 稳定性测试

验证系统是否可长期稳定的运行,是否存在一些短时间内可能无法发现的缺陷(如内存溢出、数据库连接不释放等)。

为了缩短测试工期,一般可将预期一天的压力集中在2小时内完成(二八原则),这样持续加压10小时,便相当于系统运行5天。注意监控各种性能指标是否平稳,有无下降。

3、性能测试阶段

3.1 测试确认

理解被测系统、寻找测试点、确认测试范围、测试环境等。

一些重要信息需要同PM、需求人员、设计人员讨论确认,如用户最常用哪些功能、最关注哪的性能,程序上哪可能是压力点,哪些数据需要模拟到真实的量级,大体上需要使用哪种测试方法。

3.2 确定通过标准

性能是好是坏、测试是否通过,必须有明确的标准。

这个标准,主要从客户的期望和业务上的需求两方面来考虑,客户的期望一般指页面上的响应时间,业务需求则是系统的处理能力,一般为吞吐量或TPS(每秒完成事务数)。标准制定的不合理,测试结果可能无法反映系统真实的性能表现,或者会让客户无法接受我们认为通过的软件。

至于具体如何去设定,是需要同业务负责人(一般为PM)和技术负责人(一般为设计人员)共同确认的,业务负责人了解用户的实际需求和期望,技术负责人了解具体的实现,可以判断哪些是不可达到的要求。一旦达成了共识,那么测试就要严格的按照标准去执行。

3.3 测试设计

主要从上面提到的几个方面进行分析,针对系统的特点设计出合理的测试场景。为了让测试结果更加准确,这里需要很细致的工作。如建立用户模型,只有知道真实的用户是如何对系统产生压力,才可以设计出有代表性的压力测试场景。

这就涉及到很多信息,如用户群的分布、各类型用户用到的功能、用户的使用习惯、工作时间段、系统各模块压力分布等等。只有从多方面不断的积累这种数据,才会让压力场景更有意义。最后将设计场景转换成具体的用例。

测试数据的设计也是一个重点且容易出问题的地方。生成测试数据量达到未来预期数量只是最基础的一步,更需要考虑的是数据的分布是否合理,需要仔细的确认程序中使用到的各种查询条件,这些重点列的数值要尽可能的模拟真实的数据分布(数据统计信息、执行计划相关的内容,此处就不细说了),否则测试的结果可能是无效的。

此外,性能测试执行过程中,需要监控收集的各种指标数据,也需要明确下来。

3.4 测试环境准备

部署测试环境,生成测试数据,环境预调优等等。

预调优指根据系统的特点和自己的经验,提前对系统的各个方面做一些优化调整,避免测试执行过程中的无谓返工。比如一个高并发的系统,10000人在线,连接池和线程池的配置还用默认的,显然是会测出问题的。

3.5 测试执行及监控

准备测试脚本,执行之前设计好的各个用例,监控并收集需要的数据。出现问题时,切记要全面的保留事故现场、或者是能进行分析的数据。比如TOMCAT不再响应,不能只把这个现象记录下来,这对问题的排查定位是没有意义的,要保留所有相关的日志,导出线程转储和堆转储。

3.6 问题分析及调优

现问题或者性能指标达不到预期,及时的分析定位,处理后重复测试过程。

性能问题通常是相互关联相互影响的,表面上看到的现象很可能不是根本问题,而是另一处出现问题后引起的反应。这就要求监控收集数据时要全面,从多方面多个角度去判断定位。

调优的过程其实也是一种平衡的过程,在系统的多个方面达到一个平衡即可。

3.7 测试报告

将测试过程中记录的各种数据汇总成报告,将各方面需要的结果清楚的展现出来。

4、总结

上面所有内容中,如果排除技术上的问题,性能测试中最难做好的,就是用户模型(或者叫系统使用模型)的分析。它直接决定了压力测试场景是否能够有效的模拟真实世界压力,而正是这种对真实压力的模拟,才使性能测试有了更大的意义。可以说,性能测试做到一定程度,差距就体现在了模型建立上。

至于性能问题的分析、定位或者调优,很大程度是一种技术问题,需要多方面的专业知识。数据库、操作系统、网络、开发都是一个合格的性能测试人员需要拥有的技能,只有这样,才能从多角度全方位的去考虑分析问题。

关于性能测试更详细的内容,可以阅读我的这性能专题系列讲堂:

《资深软件性能测试工程师的成长之路》

《资深软件性能测试工程师的成长之路(第二讲)》

资深性能测试工程师的成长之路(三):性能场景设计一

....


我是奕然

    CSDN博客专家

    51Testing认证讲师

关注我,带你学习更多更专业的测试开发技术。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   有人说:“杂乱无章的自动化只会带来更快的混乱。”不仅更快,而且是更严重、更大的混乱。如果使用得当,自动化可以成为测试团队中令人惊叹的生产力助推器和系统的质量增强器。自动化测试的关键是要正确运用,这是初始最困难的部分。下面,我们会了解最常见的自动化测试挑战以及应对措施。  挑战 1:获得管理层的批准  跟任何公司部门一样,员工总要知道预算允许和不允许的东西。测试人员可能已经知道自动化在商业和技术两方面的优势(缩短上市时间、增加测试覆盖度和准确性、降低每小时的测试成本、更快发现错误等),但是测试人员怎样说服财务部门和软件开发负责人,为自动化测试争取必要的时间和资金?  “自动化测试能提高生产力...
            0 0 769
            分享
          • 前言你是一个测试,你们团队目前开发模式是前后端分离。某一天,版本V1.0接口评审完,发布在了swagger上,前后端各自进行开发。此时你根据接口文档将新接口迁移到JMeter上,然后开始编写接口测试用例。过了几天,前端先提测了APP,怎么测试前端效果呢, 你想到使用charles抓包,造一些假数据,然后改响应数据。然而界面情况有点多,数据准备起来有点繁琐。这时前端同学向你介绍了Mock工具Rap,他们把接口放在上面,编写mock规则,获得模拟数据进行前端调试。虽然数据也不是很真实,但是类型和结构是对了。又过几天,后端终于提测,连接到测试服务器上运行接口用例,有个接口报错,前端打开价格页也有些显...
            0 0 1488
            分享
          • 最近在工作中协助研发进行了ES优化,效果还是非常明显的,几乎翻倍。除了通过各种业务接口测试ES性能以外,还可以直接请求ES接口,绕过服务,这样应该数据回更加准确。所以,ES Client学起来。准备工作首先,先准备了一个ES服务,这里就不多赘述了,大家自己在尝试的时候一定主意好ES Server和ES Client的版本要一致。 其次,新建项目,添加依赖。学习资料搜一下,能搜到很多的ES学习资料,建议先去看看大厂出品的基础知识了解一下ES功能。然后就可以直接看ES的API了。 下面是ES官方的文档地址: https://www.elastic.co/guide/en/elasticsearch...
            0 0 931
            分享
          •   最近火出圈的 ChatGPT 公司 OpenAI 发布了 Chat API 和 gpt-3.5-turbo 模型,我们现在可以通过API 来使用与 ChatGPT 一样的 NLP 模型。  使用OpenAI API,可以使用gpt-3.5-turbo构建自己的应用程序,可执行以下任务:  草拟电子邮件或其他文字内容写代码,例如Python代码  创建对话代理,回答各类问题  为您的软件提供自然语言界面  在各种学科中进行辅导  翻译语言  为视频游戏模拟角色等  待发掘的各种应用场景……  下面用 Python 来讲解如何使用 openai python SDK 实现自...
            0 0 1913
            分享
          •   在前端性能优化中,最重要的就是缓存,使用缓存可以极大的提升浏览器的响应速率。  什么是缓存呢?  当我们第一次访问某个网站时,浏览器会把网站中的图片等资源存储在电脑中,以备后续使用,第二次访问该网站时,浏览器直接访问缓存中的数据,从而达到提高浏览器的响应效率,优化用户的体验。  缓存的优点  1.提高浏览器的响应速率;  2.减少服务器的访问压力;  3.减少对网络的压力。  除了浏览器缓存之外,还存在CDN缓存、代理服务器缓存等等;这里主要描述浏览器缓存,浏览器缓存也指的是HTTP缓存,当我们使用浏览器用http协议与服务器交互时,浏览器会使用一种与服务器约定的规则进行缓存操作。  缓存...
            0 0 963
            分享
      • 51testing软件测试圈微信