换个角度思考性能测试问题,学习性能测试实践接触真实的性能测试,很难学到很多新的测试实践知识。市面上关于性能测试的书籍很多,其中很多都能系统地介绍性能测试。今天我想用另一种方式来介绍性能测试,就是通过提出一些关于性能测试的问题,然后思考问题。希望通过不同的方式,让读者从另一个角度去思考和学习性能测试实践。1、敏捷开发中如何做性能测试?敏捷开发由于其持续集成、快速反馈等特点,需要性能测试工具支持轻量级、集成CI服务器、全代码等特性,因此传统的性能测试工具如JMeter和LoadRunner等已经难以实现。适用于敏捷开发。在敏捷开发中,性能测试应该具备以下特点:(1)性能测试是持续集成和持续发布的一部分,可以尽早发现性能问题,从而降低修复成本。这样可以在开发过程中第一时间不断发现很多性能问题。建议将性能测试写成一个故事,放在每次迭代中,如下图所示:(2)性能测试脚本易于阅读和维护。如编码脚本Gatling、Locust等。以下是Gatling的DSL示例代码:(3)可视化、易读的报告,大家可以随时了解情况。下图是Jenkins集成Gatling插件后显示的Gatling连续测试报告。通过在敏捷开发中做持续性能测试,性能测试也可以做到:小步骤->快速反馈->持续改进->持续交付。2、如何通过数据分析更有效地做性能测试?大多数情况下,大型项目的性能测试需要的时间和人力是非常多的,因为:用户并发要求高,测试硬件成本高,测试功能点多,测试量大耐久性测试,测试时间长,测试效果差,因为测试人员很难在测试环境中模拟真实的用户操作,比如访问的顺序分布,访问的强度分布,以及用户端的各种访问参数。为了解决这两个问题,需要通过用户数据分析,获取真实的用户行为数据,用于构建性能测试用例。可以用下面的漏斗模型来思考:通过这个漏斗模型,我们可以知道,要想快速得到真正有效的性能测试数据模型,需要对真实的用户数据进行筛选和整合,而不是依赖于测试人员想象中的数据实验室。那么如何分析用户行为呢?让我们试着用三个例子来说明。第一个例子是用户注册过程。通过对用户行为的数据分析,可以得到用户对每个功能点的访问次数。见下图:图中显示了用户注册流程的6个步骤,分别是:入门账户信息个人信息财务信息审核信息感谢页面第一步有18606次访问,然后71%的访问用户选择了继续,但只有13131(70.6%)达到了第二步。最终只有925名(5%)用户完成了注册。由此可知各步骤的真实访问比例,从而得到性能测试的数据模型和策略。第二个例子是用户使用浏览器的统计。如果性能测试需要模拟不同的浏览器,这些数据分析的结果也可以用来确定浏览器在性能测试中的权重。从这个统计表可以知道使用IE浏览器的用户是最多的,所以在生成性能测试数据的时候,应该生成更多基于IE浏览器的数据,比如User-Agent。第三个例子是统计用户访问区域。对于一些大型互联网应用,需要进行多区域仿真,测试不同区域互访的性能。这些数据的统计结果可以帮助它设计出更有效的此类性能测试用例。通过这张统计表我们可以知道,英国的用户访问量最多,而美国的访问量次之。如果应用服务器部署在美国,尽量在英国架设测试服务器,通过英国的测试服务器测试美国的应用服务器,从而测试性能多国网络,还需要在生产环境测试英国和美国的连接网络性能,及时发现性能问题。通过对这些真实用户数据的分析,可以设计出更有效的性能测试模板。下面是一个性能测试模板的例子,其中每个功能点上圆圈中的数字代表该功能点在真实环境中的用户访问权重。权重越大的功能点在整个性能测试模板中测试的量越大,成本也越高。常见的Web系统用户数据跟踪分析工具有:Adob??eSiteCatalyst:功能强大、使用繁琐、收费(贵)GoogleAnalytics:功能强大、易用、免费、收费百度统计/腾讯分析:功能一般,免费使用数据分析生成数据模型的过程如下:收集数据->分析数据->生成测试数据模板->使用数据模板。3.对大型集群系统进行性能测试需要注意什么?通常,中小企业的IT系统不使用大规模集群,只有大公司才会大规模使用集群。结果,很多测试人员没有机会实践和理解集群性能测试。如果想学习基于集群的性能测试,除了常规的集群系统性能测试外,还可以从以下几个方面来学习基于集群的性能测试:测试环境的真实性,因为大规模集群包含很多节点和服务,所以搭建一个和生产环境一样的测试环境的成本非常高,导致测试环境一般比生产环境小很多。测试这样的测试环境有什么意义呢?一般集群都会使用负载均衡,但是由于负载均衡的算法和配置多种多样,如何保证负载均衡功能按照设计和配置发挥作用呢?除了整体的性能测试,是否需要分别对不同的服务和节点进行性能测试?因此,集群系统的性能测试不仅可以测试系统的性能,还可以解决以上三个问题:性能规划、配置测试、隔离测试。(1)性能规划对于一个大型的服务器应用系统,一般都是由大型集群组成。因此,在测试这种基于集群的服务器系统时,也需要将测试环境配置为类似于生产环境的集群系统。但是,由于成本原因,测试环境中的集群规模要小得多。您可以测试一个小规模的集群,然后利用测试结果,通过数学建模来计算产品环境的性能或者对产品环境进行性能规划。由于每个集群系统都有自己不同的架构、配置和服务,其数学模型也不同。(2)配置测试通过改变集群系统的各种配置,对不同配置下的集群系统进行性能测试,得到最优配置。例如,协助开发者完成集群功能的开发和验证,如负载均衡算法、热备份等;并协助运维团队配置调试产品环境的集群配置等。(3)隔离测试对于集群系统的服务或节点,开发这些服务的团队应该在隔离(存根)的第三方依赖环境中对自己团队开发的服务进行独立的性能测试。这样可以尽早发现性能问题并尽快修复,避免在集群环境中发现同样的问题而增加调试和时间成本。大型集群系统基本上都有复杂的架构,环境也是比较复杂的组织结构。只有深入了解整个业务流程、系统架构、环境结构,才能有效设计测试计划。4、性能测试有哪几种测试数据?测试数据一直是软件测试,尤其是性能测试中比较头疼的问题,因为数据越真实,结果越好。测试数据的类型可分为以下四种类型:单一型、随机型、模板型和真实型。(1)单一型通过记录或观察,使用一种或单一类型的测试数据进行性能测试。这种数据的构建简单,但数据过于单一,无法模拟真实用户。由于其数据构建简单,可用于敏捷开发中的早期性能测试。(2)随机型由一些简单的数据规则结合随机算法生成的测试数据。与单一类型的数据相比,虽然增加了随机性,但仍然缺乏真实性,其构建成本和性能问题分析成本都比较高。可用于上线前大规模、多样化的综合性能测试。(3)模板类主要通过数据分析构建测试数据,生成模板。虽然与随机类型相比在一定程度上增加了用户的真实性,但是准备数据的成本较高。在项目成本和资源的范围内,可以结合模板和随机方法更有效地进行性能测试。(4)真实型是通过直接导出或重定向产品数据来做性能测试数据。完全是真实的用户数据,建设成本低,但存在数据泄露等数据安全问题。在能够有效保护数据安全的情况下,才可以使用真实数据进行性能测试。测试数据的生成和管理对于大型项目的性能测试非常重要,因此如何高效地生成有效的测试数据成为首要任务。通过这四类测试数据,可以快速判断项目现阶段适合使用哪类数据,从而少走一些弯路。5.其他问题除了上述的问题和思考,我还准备了一些其他的基本问题供读者自己思考,从而通过思考问题来学习性能测试。性能测试的主要类型有哪些,它们各自的作用是什么?首页性能测试需要注意哪些问题?并发用户少但稳定性要求高的系统是否需要做性能测试?为什么?有批处理需求的系统应该如何进行性能测试?Profiling是性能测试吗?应该什么时候做?常用的性能测试工具有哪些?如何选择性能测试工具?测试环境的测试结果评价产品环境的性能?设计性能测试用例需要考虑ThinkTime吗?中小型项目性能测试需要注意什么?性能需求的来源是什么?如何使用云服务进行超大规模性能测试?【本文为专栏作者“ThoughtWorks”原创稿件,微信公众号:Thinkworker,转载请联系原作者】点此查看该作者更多好文
