更新时间:2021-11-04 09:50:22 来源:极悦 浏览778次
让我们考虑以下场景:显示学生考试结果的系统经过多个自动化功能测试。性能测试结果也很有希望。该系统已准备好部署到实时服务器。但是,当考试结果发布在系统上时,服务器速度变慢并停止工作。
发生了什么?考试成绩公布后,所有的学生都想尽早查看成绩。它们同时产生了非常高的服务器负载,服务器无法处理请求。首先,它被数据库机器拖慢了。然后,它没有为中间层提供数据,软件也没有为这种情况做好准备并停止运行。
性能测试人员错过了什么?压力测试。除了测试预期的用户数量外,压力测试还测试系统在高负载下的行为,以及检查恢复正常使用时系统如何恢复。使用JMeter等开源测试工具可以轻松完成压力测试。
我们将在本文中用于测试的示例应用程序是一个正在开发的项目管理工具。目前它有一些基本功能:
- 登录
- 创建一个项目并将 Github 存储库链接到它
- 在创建的项目中创建问题
压力测试的第一步是确定关键场景。根据业务价值(它们对您的成功的重要性)和用户偏好(用户花费大部分时间)选择场景。
在此测试中,我们将检查网站登录页面和项目详细信息页面的响应时间。
响应时间很重要,因为加载时间是页面放弃的主要因素。随着互联网连接速度的提高,用户的平均耐心正在下降。如果网站的加载时间超过 4 秒,大约 25% 的用户将离开。
我们选择了登录功能,它提供对数据库的访问,因为它是每个系统的关键部分。
我们选择项目详细信息页面是因为在测试系统中,它从许多表中读取数据,我们希望用户将大部分时间花在该页面上。因此,我们希望确保即使在过度使用的情况下,该页面是否也能在合理的时间内加载。
现在我们已经确定了我们的测试目标,让我们描述他们的测试用例:
测试用例 1 - 登录测试步骤:
- 进入登录页面
- 输入用户凭据
- 点击登录按钮
- 等待登录响应
测试用例 2 - 项目详情页面测试步骤:
- 进入登录页面
- 输入用户凭据
- 点击登录按钮
- 加载仪表板页面
- 单击现有项目
在决定测试用例之后,我们可以继续创建测试脚本。创建JMeter测试脚本的最快方法是录制。您可以使用 JMeter 记录器或BlazeMeter Chrome 扩展程序,它在 Chrome 商店是免费的并且更加用户友好,因为您不必设置代理来使用它,就像使用 JMeter 记录器一样。
通过您的 Chrome,开始记录并模拟您决定测试的用户场景。完成后,停止录制。
将文件导出到 jmx 并在 JMeter 中打开它,您可以在其中编辑和配置其参数。
每个测试都有自己独特的配置,如csrf 令牌、响应断言和计时器,但所有压力测试之间的相似之处在于为大量用户检查系统的性能。您的业务目标应确定您正在测试的用户数量。
在这种情况下,我们要对 1,000 个用户进行压力测试。
为此,您需要配置线程组。线程组最重要的配置是线程数、加速时间和循环计数。线程数设置模拟用户的数量,加速时间设置 JMeter 开始执行所有线程所需的时间,循环计数是测试场景应该执行的次数。
结果显示,登录页面的请求处理时间为 68 毫秒,项目详细信息页面的请求处理时间为 1539 毫秒。因此,我们可以得出结论,在项目页面加载期间使用了大量资源。
现在,我们可以开始增加我们正在测试的线程数。我们继续使用 10 个线程,0 个加速和 1 个循环。由于我们仍在测试少量线程,因此我们可以在 GUI 模式下使用 JMeter 并通过侦听器查看测试。
我们可以看到系统能够正确处理所有请求:
所以现在我们将用户数量增加到 100(目标的 10%)。脚本中唯一需要更改的参数是线程数,我们可以再次运行脚本。如果您正在使用,请不要忘记在测试运行之间清理侦听器。
之后,将负载增加到目标的 50%,在我们的例子中是 500 个用户。根据结果,我们可以继续增加负载(如果测试成功)或减少(如果有错误)。如果我们需要停机,我们应该找出有多少用户破坏了我们的系统,以便我们决定如何修复瓶颈。
如果 500 线程测试的结果都是绿色的,则将线程数增加到 1000 个用户的目标。为了获得更准确的结果,我们建议您将测试切换到Stepping Thread Group,您可以从 JMeter 插件管理器添加它。
Stepping Thread Group 允许您配置开始的线程数、随着时间的推移应添加多少线程以达到最大值、线程应保持多长时间以及缓降周期有多长。由于其缓降能力,步进线程组非常适合检查系统恢复。
这个测试从我们知道服务器可以处理的 500 个线程开始。然后,我们将 JMeter 配置为每 30 秒增加 100 个线程。这样,如果在达到我们的目标之前出现问题,我们可以找出问题所在。我们将 1,000 个线程配置为运行 2 分钟(120 秒)。要查看系统恢复情况,有一个减速期 - 每 10 秒将停止 50 个线程。
在压力测试期间,一台机器上可以运行的线程数是有限制的。但是有几种简单的方法可以增加这个数字。尝试在非 gui 模式下运行 JMeter ,这在大量线程的情况下是必须的。我们还应该避免在测试计划中使用侦听器,以进一步优化测试运行。如果这些简单的调整还不够,请在多台机器之间分配线程数。测试完成后可以生成结果。当然,您也可以使用CA BlazeMeter,它类似于云中的 JMeter。
JMeter 将为我们提供 KPI,如响应时间、吞吐量和错误率。此外,我们建议您也监控服务器性能。CPU 使用率、内存使用率、输入/输出和数据库日志是确定系统瓶颈的有用参数。
压力测试是确保您的系统在部署前没有错误的重要方法。要了解有关负载测试的更多信息,请观看有关在 60 分钟内开始使用 JMeter的免费网络研讨会,或观看CA BlazeMeter 演示。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习