建立性能测试策略

建立性能测试策略是性能测试的第一步,也是最重要的一步。它可以帮助您定义:

  • 性能测试范围。
  • 负载策略。
  • 服务级别协议(SLA) 和服务级别目标 (SLO)。

不可能测试所有的东西,因此必须有意识地决定将测试的深度和强度集中在哪里。通常,最有成效的 10-15% 测试场景可以发现 75-90% 的重大问题。

基于风险的测试

风险评估提供了一种机制,您可以通过该机制确定测试工作的优先级。它有助于确定在哪里进行最密集和最深入的测试工作,在哪里故意进行更轻松的测试(为更激烈的场景节省资源)。基于风险的测试可以帮助重点测试系统中风险最高的方面,从而更快/更早地识别流程中的重大问题。

对于大多数系统,性能和鲁棒性问题发生在这些方面:

  • 资源密集型特征。
  • 时间关键/敏感用途。
  • 可能的瓶颈(基于内部架构/实现)。
  • 客户/用户影响,包括可见性。
  • 以前的缺陷历史记录(在实时运行期间在其他类似系统中记录的观察结果)。
  • 新的/修改的特性和功能。
  • 大量需求(频繁使用的功能)。
  • 功能集的复杂性。
  • 例外情况。
  • 有问题的(例如,构建/维护不当)的系统组件。
  • 平台维护。

以下是行业专家 Ross Collard 提出的问题列表,可帮助您识别不同的性能风险:

情境观

  • 系统运营的哪些领域如果性能不足,对底线(收入/利润)的影响最大?
  • 无论事件发生频率如何,系统可能会消耗哪些用途(每个事件的资源)?每个事件的资源消耗应该很大,而不是仅仅因为事件频繁发生而导致总资源消耗很高,因此事件总数很高。
  • 可以对系统的哪些区域进行最低限度的性能测试,而不会不谨慎地增加风险,从而为需要大量测试的区域节省测试资源?

系统视图

  • 哪些系统使用对时间要求严格/敏感?
  • 哪些用途最受欢迎(例如,经常发生)?
  • 哪些用途最显眼(例如,具有高可见度)?
  • 哪些情况可能会导致外部用户(例如,非内部员工的公共网站的远程访问者)对系统产生大量需求?
  • 系统中是否有任何特别复杂的功能(例如异常处理)?
  • 是否有任何领域使用了新的和不成熟的技术,或者未知/未经尝试的方法?
  • 是否有任何其他后台应用程序共享相同的基础设施,它们是否会严重干扰或竞争系统资源(例如,共享服务器)?

直觉/经验

  • 我们可以从正在被替换的现有系统的行为(例如工作负载/性能特征)中学到什么?我们如何将这些信息应用到新系统的测试中?
  • 您之前有过其他类似情况的经历吗?哪些功能、设计风格、子系统、组件或系统方面通常遇到性能问题?如果您没有使用其他类似系统的经验,请跳过此问题。
  • 您通过回答前面的问题确定的哪些因素组合值得高度优先考虑?哪些活动可能同时发生,从而对系统造成重负载/压力?
  • 根据您对系统架构和支持基础设施的了解,可能的瓶颈在哪里?

需求视图

  • 在什么情况下可能存在大量内部需求(例如,网站的内部员工)?
  • 数据库归档策略是什么?每年添加的数据比率是多少?
  • 系统需要7×24小时可用吗?
  • 工作时间内是否有维护任务运行?

这些问题的答案将有助于确定:

  • 需要测试的领域。
  • 验证应用程序性能所需的测试类型。

元件测试

一旦确定了性能测试所需的功能区域,请将业务步骤分解为展示技术组件的技术工作流程。

为什么业务操作应该拆分成组件?由于目标是在早期阶段测试性能,因此列出所有重要组件将有助于定义性能测试自动化策略。一旦对组件进行了编码,就可以单独对其进行测试以测量:

  • 组件的响应时间。
  • 组件每秒可以处理的最大调用次数。

此外,组件测试支持 JMS、API、服务、消息等,从而可以轻松创建和维护场景。该策略的另一个主要优点是组件的接口不太可能受到技术更新的影响。一旦创建了组件场景,就可以将其包含在构建过​​程中,并且可以接收有关当前构建的性能的反馈。

每次冲刺之后,有必要通过运行实际的用户测试(使用多个组件)来测试组装的应用程序。即使组件已经过测试,也必须测量:

  • 多个业务流程并行运行的系统行为。
  • 真实用户响应时间。
  • 架构的规模/可用性。
  • 缓存策略。

随着项目时间的推进,测试工作变得更加复杂。一开始,重点是应用程序质量,然后集中在目标环境、架构和网络上。这意味着性能测试目标将根据项目的时间表而变化。

性能测试环境

正确配置所测试的系统并且获得的结果可用于生产系统至关重要。在测试策略开发过程中,与环境和设置相关的考虑因素应始终是首要考虑因素。以下是一些:

  • 使用什么数据?是真实的生产数据、人工生成的数据,还是只是选择随机记录?数据量与产量预测相符吗?如果不是,有什么区别?
  • 用户是如何定义的?是否为每个虚拟用户的帐户设置了适当的安全权限,或者是否会重复使用单个管理员 ID?
  • 生产环境和测试环境有什么区别?如果测试系统只是生产的一个子集,是否可以模拟整个负载或仅模拟该负载的一部分?

重要的是测试环境是生产环境的精确复制(可能仍然存在一些差异,这是可以接受的)。即使在生产环境中使用实际生产数据执行测试,也仅代表某一时刻。其他条件/因素也需要考虑。

你可能感兴趣的:(数据库)