专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

涨薪技术|0到1学会性能测试第93课-生产系统性能测试

ins518 2024-11-30 22:46:38 技术文章 9 ℃ 0 评论

至此关于系统资源监控、apache监控调优、Tomcat监控调优、JVM调优、Mysql调优、前端监控调优、接口性能监控调优的知识已分享完,今天学习生产环境性能测试知识。后续文章都会系统分享干货,带大家从0到1学会性能测试,另外还有教程等同步资料V(flyhappy111)领取即可。

进行性能测试,以检查在生产环境下目标应用是否能够满足用户的期望和需求?但性能测试结果在很大程度上是依赖或取决于测试环境的,即测试环境与生产环境的差异性会严重影响到性能测试的精准性。当然大家都明白如果能让测试环境与生产环境一致,那显然可以在最大程度上保证性能测试数据的精准性。但设置测试环境是一项非常具有挑战性的任务,因为测试环境与生产环境之间有任何的微小差异都可能导致性能测试结果出现很大的影响。在生产系统上进行性能测试,以克服测试环境问题。但即使在生产环境下进行性能测试也会有很多挑战。性能测试团队最大的挑战是尽量减少生产系统性能测试对真实用户活动的影响,并彻底测试所有的应用瓶颈。


01什么是生产环境

在性能测试过程中始终建议测试的环境一定是可以完全控制的,这个测试环境应该是生产环境的精确副本,可以在模拟虚拟用户、测试数据等有效环境中进行有效的应用程序测试,这些数据可以是随时刷新的,也可以根据不同负载条件下进行性能测试。虽然在一个可以完全控制的测试环境下进行测试是我们希望看到的,但是准备这个环境也受到各种挑战,创建一个精确的副也受到很多挑战,如数据大小、网络基础架构等。

当然上面所有的挑战也有解决方案,就是在生产环境对应用程序进行性能测试。在生产环境中进行测试时,需要非常仔细地设计、执行和监控测试,以尽量减少对实际用户活动的影响。同时,您需要在足够的负载下执行测试以检测所有应用程序瓶颈。

此外,将实验室环境测试结果与生产系统进行比较是非常危险的和错误的。因为无法在实验室环境中复制100%的生产系统,并且由于两种环境之间的区别,测试结果总是受到影响。在与生产系统不同的实验室环境中测试目标应用程序,然后根据这些结果进行生产计划将显然是不对。性能工程师的核心责任是彻底检查生产和测试环境,并列出所有差异及其对测试结果的可能影响,以获得更好的结果分析。

在讨论有关其性能测试的细节之前,对生产环境进行清晰的了解是非常重要。

生产环境也被称为应用程序现场环境。这是一套为实际应用程序用户提供实时服务的资源。简而言之,实时用户互动的环境称为生产/现场环境。

通常在应用程序生命周期中使用以下三种不同的应用环境,如图3-1所示,并限制开发和测试团队以及实际应用用户之间的相互影响。

发环境:由开发团队访问的一组资源来构建应用程序。

测试环境:测试团队用于测试应用程序的资源集。

生产/实时环境:应用程序用户访问的一组资源以执行其交易。


02生产环境性能测试风险

生产环境下性能测试肯定是最理想的,但是,您还需要分析其可能存在的所有风险,并根据您对生产系统的测试需求做出决定。

以下是与生产环境进行性能测试相关的可能风险:

-- 在生产环境下进行性能测试时,实际用户可能会遇到应用程序响应时间延长并且可能延长很多。

-- 受性能测试的影响,由于响应时间变长,真实用户可能无法完成业务交易。

-- 即使在性能测试完成后,由于在性能测试执行期间生成了一些测试数据,应用程序也可能变慢,响应时间变长。

-- 真正的用户可能遇到应用程序错误,甚至应用程序可能停止响应等情况。

-- 生产环境性能测试时,定位性能瓶颈可能会变的很麻烦,因为真实用户也在执行应用程序 ,同时模拟用户也在执行负载。

-- 真正的用户需要停止应用程序的工作,以获得准确的测试结果,但这将使应用程序在此期间不可用,这对于关键业务应用程序可能无法实现,也无法让真实用户停止使用。


03生产环境为啥要做性能测试

由于性能测试执行所涉及的成本、资源都会比较多,所以大多数据公司可能并没有对应用程序进行性能测试。一旦将应用程度投入生成,就可能会导致灾难性的结果,这样程序对性能就没有安全感。

此外,如果仅在测试环境中进行性能测试,很难实现所需的测试结果。应用及其基础设施的各个部分根本不在测试环境中进行测试,在测试环境下有一些地方是无法测试到,应该尽量避免无法测试到的区域,主要测试不到的区域如下:

-- 第三方内容交付网络(CDN)性能未经测试。

-- 防火墙对应用程序性能的影响未经测试。

-- 应用程序负载平衡在测试环境中未进行测试。

-- 应用程序互联网连接性能未经测试。

-- 测试实验室没有测试DNS查找时间。

虽然前面已经讨论过,测试人员在进行生产系统的性能测试时面临着很大的风险,但是它仍然具有自己的重要性,并且被广泛使用,特别是当生产系统非常复杂并且创建其精确的副本更加困难时。还有许多其他因素,都鼓励在生产系统上进行性能测试。生产环境下进行性能测试还有以下一些讨论的内容。

1) 测试结果验收

大多数性能测试是在目标应用程序的克隆上进行的,可能不是上述生产系统的100%副本。完整的应用程序及其基础设施无法在测试环境中进行测试,一些测试不到的区域可能会显着改变测试结果。除了这些缺失的区域,测试环境中使用的软件、硬件和服务也可能与生产系统不同。所以基于这些差异,测试环境的结果不能直接映射到生产系统上。需要验证生产系统上的测试结果,以获得对应用程序的真实数据,并且对生产环境中的应用性能有足够的信心。

2) 成本有效

性能测试确实是一项昂贵且耗时的工作,特别是当需要在测试环境中复制生产系统时。每个应用程序由各种软件(操作系统、应用服务器、数据库等),硬件(防火墙、路由器、负载均衡器、服务器等)和服务(内容交付网络、广告服务器、信用卡验证系统等),并且复制这些环境都是一个很大的挑战,涉及大量的工作、时间和金钱。但事实上不管投入多少努力,要让测试环境与生产系统完全相同,几乎是不可能的。有时性能测试团队通过利用在测试中将测试环境中取得的成果,将它们映射上到生产系统。但还是难以找出超越规模环境的性能瓶颈。因此,通过对生产系统进行性能测试,可以节省大量的精力,成本和时间,以达到更好的效果。

3) 测试数据备份和崩溃恢复

性能测试概念相对复杂,但很多人甚至不了解性能测试活动应该关注的所有内容。测试数据库备份和崩溃后生产系统的恢复是就是性能测试中需求重点注意的一个维度,但通常这个维度被很多公司所忽略。性能测试的目的不仅是检查应用程序在不同负载条件下的行为,还要检查其崩溃后恢复过程。

这些重要的性能领域需要仔细处理,以确保在生产环境中所有应用程序都是健全的没有问题的。

关键业务应用程序的崩溃后恢复时间是必须明确的,并应该告知所有用户。在进行性能测试时,应确定和修复所有的这些问题,以免在生产环境中造成任何麻烦,和在高峰工作时间内影响用户。

4) 更容易的测试环境设置

设计与生产环境相似的性能测试环境是整个测试活动中最具挑战性的任务之一。复制完整的应用程序基础架构(包括其所有服务器和网络基础设施),所有应用层,数据库及其所有数据集等确实是一件艰巨的事情。但是,当在生产系统上进行测试时,不必担心复制所有这些来源。使用类似于生产系统的数据集进行测试对于获得准确的性能结果也是非常重要的,但它需要大量的精力。然而,通过在生产系统上进行性能测试,可以节省所有这些努力。


04生产环境下性能测试最佳实践

如果确定需要在生产环境下进行性能测试,那么应一般从以下几个维度进行生产环境的性能测试:

1) 维护期间进行性能测试

几乎所有的大型组织的应用程序都进行定期维护,在这段时间内,会限制用户与应用程序的交互。此时可以与负责任的团队协调,并将生产环境下性能测试计划制定在这个时间段,这样就不会影响实际用户的体验。

2) 发布前测试

还有一个很好的方法是在将应用程序提供给实际用户之前进行测试。可以将应用程序性能测试纳入发行管理计划的一部分,以确保在发布应用程序之前执行性能测试。

3) 休假或用户量最少时进行测试

如果上述两种选择不合适,那么可以考虑在休假日的非工作时间进行性能测试,将实际用户的影响降到最低。它不仅有助于最小化测试对实际用户活动的影响,而且有助于确定瓶颈的根本原因。考虑这种做法的最佳和最合适的时间是星期六或星期日的午夜。

4) 测试只读事务

由于担心测试数据可能与实际应用程序的用户数据混合,许多公司不愿意对其生产系统进行任何测试活动。特别是在关键业务应用的情况下,企业不愿意承担可能出现的风险。这就是为什么生产数据库几乎从未用于测试,即使它被使用,它仅用于只读操作。这些简单的事务不会影响应用程序数据,但可以显示重要的性能瓶颈。

5) 逐渐增加负荷

可以采取一种方法来最小化性能测试对真实用户的影响,是逐渐增加模拟用户,除非真实用户的事务处于可接受的阈值内。上面已经提到,性能测试不仅仅是破坏系统,而且也是在正常条件下找出应用程序行为。所以可以选择逐渐增加用户的方式来进行性能测试,并且保证用户在可接受的响应时间范围内,并能够成功完成交易。然后分析测试结果,解决瓶颈并重新测试。可以在多次迭代中彻底测试任何应用程序的大部分瓶颈,而不会真正影响真正的用户,但可能影响真实用户的响应时间,让业务响应变慢,一定要保证业务可以正常完成。

6) 测试执行过程中实时监控

在生产环境下进行性能测试时,应该进行实时的监控和分析数据,所有相关利益者都应该实时监控数据,如果超出其可接受的阈值影响实际用户,则应立即停止测试。

下期分享全链路脚本开发技术,敬请关注!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表