• 0
  • 0
分享
  • 怎样正确做 Web 应用的压力测试?——软件测试圈
  • 饭团🍙 2022-05-18 12:30:55 字数 1577 阅读 872 收藏 0

环境

首先环境是非常重要的,需要尽可能跟生产环境靠近。

比方说,使用同样的nginx版本,php的话需要启用fpm,zend-optimizer等等,参数配置也最好跟生产环境保持一致。

当然,php的版本更加需要保持一致,不能说线上是跑5.3,而测试环境却是php 7;除非是要测试不同php版本的性能。

网络也需要注意,测试机跟服务器之间是什么网络连接?100M还是千兆的网线?也同样需要跟生产环境尽可能保持一致。

我曾经看过有人直接在自己的笔记本上跑压测的客户端,然后笔记本使用的wifi;这直接就变成是在测试wifi的性能了。

当然,也可以考虑直接在服务器本机上面跑压测程序,这样就可以规避掉网络层的,更有针对的去看服务器应用的性能;但那就要注意压测程序本身是否会占用过多的CPU、内存等资源而影响到服务器应用。

在测试高并发的场景下,也要注意修改linux的open files limit:

ulimit -n

命令可以显示file descriptors的值,这值默认是1024;也就是说,最多只能开1024个并发连接;一般情况下够用。

如果需要测试C10K甚至更高的并发场景时,这个值就必须修改了; 

工具

最常见的web压测工具是ab - apache benchmark;我偶尔会拿ab来做简单的快速测试。但做严格的测试时,ab就会显得非常不合适。

首先,ab是单线程程序,只能利用单一CPU,在给性能好的服务器端应用做压测时,往往跑ab的测试机负荷满了;而服务器应用的性能还绰绰有余。

这在测试默认启用多核的go程序是非常常见的。

建议至少使用techempower所用的wrk替代ab;wrk默认可以利用单一CPU的多个核。

其次,ab仅能是对单一url进行压测,而当我们仅仅只是反复测试单一URL时,出来的测试结果往往不能提现真实的压力场景。

比方说,应用程序反复查询、返回同一个账号的资料,跟随机查询、返回十万个用户是不一样的;前者的返回结果很容易就被数据库、应用给“缓存”掉。而对于被严重“缓存”的性能测试结果,并不能很好的反应真实场景下的性能表现。

如果要模拟真实的压测场景,我会推荐使用siege,siege的有多个参数方便模拟真实压力场景:

  • -f FILE, --file=FILE参数指定一个输入文件,在文件中指定多个不同的url,然后对这多个url进行压测。

  • -i, --internet则是指定随机发送输入文件中的url

wrk也支持使用lua脚本去生成压测的请求,siege上面能做的,wrk肯定也可以通过自己编写脚本去实现。

瓶颈

我会认为,压测的目的是在于找到系统的瓶颈,一定是要确定系统某个方面达到瓶颈了,压力测试才算是基本完成。

当我们说系统可以支撑某某压力时,一定要同时能够清楚的说出系统的瓶颈是在哪里;也就是说,当瓶颈得到改善的时候,系统的性能可以得到提高。

对于web应用,系统的瓶颈往往会是数据库;系统满负荷运作的时候,数据库的CPU或者是磁盘IO是否跑满了?

如果没有,那么很可能是说明瓶颈是在别的地方;如果是在应用,那么应用服务器的CPU、内存、IO等等也应该有所体现。

找到系统的瓶颈,是需要反复做不同测试、优化,然后分析出来的。

对于一些性能有高要求的公司,比方说七牛云,据说他们只接受网络IO这一瓶颈,压测的时候,是一定要把千兆网卡跑满,才算是性能达标;如果网卡没跑满,那就说明瓶颈是在别的地方,要去不断优化,直到网卡的物理限制成为系统的瓶颈。

延迟与吞吐

延迟latency与吞吐thoughput,是两个相关,但其实独立的概念。

最理想的系统是低延迟,高吞吐;但有时高延迟的系统,吞吐是可以超过低延迟的系统的。

 

作者:玩家翁伟
链接:https://www.zhihu.com/question/19867883/answer/391492300

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 1、接口自动化测试的意义、前后端分离思想接口自动化测试的优缺点:优点:1、测试复用性。2、维护成本相对UI自动化低一些。为什么UI自动化维护成本更高? 因为前端页面变化太快,而且UI自动化比较耗时(比如等待页面元素的加载、添加等待时间、定位元素、操作元素、模拟页面动作这些都需要时间) 为什么接口自动化维护成本较低? 因为接口较稳定,接口的响应时间基本上都是秒级、毫秒级别的,速度快,并且接口自动化本身也可以做一些有关联的操作、全流程的操作(比如:注册 --> 登录 --> 修改个人信息)。3、回归方便。4、可以运行更多更繁琐的测试。自动化的一个...
            13 13 5598
            分享
          •   “系统软件配置不得当”占所有“环境配置不得当”至少30%,这其中数据库的参数配置对性能的影响最大,需要检查的点也最多,从这一期开始专门介绍数据库的性能测试检查(以Oracle为例,因为Oracle用的最广 ^v^),因为数据库的设计复杂,影响性能测试的点不计其数。  检查的目的是什么呢?如果是测试环境,首先需要检查参数配置是否和生产环境相同或相似,如果是生产环境,需要检查参数配置是否合理。并且,由于数据库的设计逻辑,相同的场景跑几遍,其性能结果也是不同的,所以,环境检查的目的也是要确保测试结果的稳定性、可重复性。  举个例子,第一次跑的时候,数据在磁盘了,跑到过程中调入了内存。第二次跑的时...
            0 0 1763
            分享
          •   1、引言  在上一篇中,我们聊到了《AI测试技能卷起来!目标检测算法测试流程与方法总结》,反响还不错。但是,也有测试同学给我留言:“能不能讲一讲模型工程的测试流程和方法”。这当然没问题了, 因为在整个工程中,算法模型只是其中的一个环节,我们模型测试完成后,需要部署到系统中,这样才能让模型真正的应用于业务中。   为了更好的让你们理解模型在系统中的流程,我以我的工作为例(当然,处于职业操守,部分内容进行脱敏),以流程图的形式给大家展示。  通过上图,大家可以了解到模型的整体架构。  这里说两点:  1)数据流:即数据解析,保证数据的质量;  2)特征库:即数据处理,提取数据特征进行...
            0 0 797
            分享
          •   OpenJS 基金会日前在官网声称,基于 IDC 调查结果,在全球 19 亿个网站中,近 90% 使用开源软件 jQuery,其中至少有 7.5 亿个网站正在使用旧版 jQuery,超过三分之一的受访者证实在过去 24 个月内经历了相关“安全事件”。▲ 图源 OpenJS 基金会  OpenJS 基金会表示:  89%的随机调查受访者报告称,他们知道自己的网站使用了 jQuery。   85%的受访者认为,自家企业拥有网站是极其重要的。   安全事件造成的业务损失严重,28%的受访者表示有客户流失,29%的受访者表示造成了收入损失。此外 45% 的受访者报告了...
            0 0 779
            分享
          • 跨浏览器测试是一种测试,需要大量的精力和时间。通过不同的浏览器,操作系统,设备,屏幕分辨率测试Web应用程序,以评估针对各种受众的Web内容呈现的过程是一项活动。特别是如果手动处理。使用Selenium进行的自动跨浏览器测试可以帮助您节省例行测试活动的时间,并帮助您缩短回归测试的时间。但是,人们很少喜欢变化。如果手动测试在您的组织中很流行,那么当您要求他们实施测试自动化时,管理层显然会提出问题。测试自动化虽然非常有益,但通常可能会证明是昂贵的,但值得吗?在说服高层管理人员的同时,您可能会发现这是一个难题。在开发Web应用程序时,将需要您提供使用Selenium进行测试自动化的有效ROI,并通过...
            0 2 2353
            分享
      • 51testing软件测试圈微信