node.js做网站,wordpress添加广告联盟,哈尔滨最新通告,wordpress维基主题用于性能测试的服务存根#xff1a;简介 随着测试项目的复杂性不断增加#xff0c;越来越多的被测系统的测试流程受到依赖系统的影响。当我说“依赖系统”时#xff0c;我指的是#xff1a;
不受当前开发影响的遗留系统 属于另一个组织的第三方服务 您的组织开发的系统简介 随着测试项目的复杂性不断增加越来越多的被测系统的测试流程受到依赖系统的影响。当我说“依赖系统”时我指的是
不受当前开发影响的遗留系统 属于另一个组织的第三方服务 您的组织开发的系统路线图不明确 依赖系统的存在使每个手动或自动测试项目都处于如下图所示的情况。
测试参与者 - 在图中我展示了一个测试项目该项目对被测系统进行压力测试以手动和自动化的不同方式验证其质量。 被测系统 (SUT) - 由实现业务需求的异构服务和基础设施组成的复杂架构。 附加系统 - 这些服务与最终应用程序协作但超出了项目管理范围。可能他们的一些要求尚不清楚。这些是依赖关系。 在上图中关注箭头也很重要。这些箭头描述了系统的边界和用于交换消息/信息的接口
红色箭头表示在测试工具本例中为 JMeter中运行的测试规范。 灰色箭头表示存在测试人员知之甚少的功能关系。如果您太晚才意识到依赖关系破坏了您的测试逻辑这可能会浪费您的时间。因此提前计划找出依赖关系存根它们制定计划并继续测试。 依赖系统的存在会在整个测试项目手动和自动测试中产生一系列令人不快的影响
脆弱性 - 随着不受控制的依赖项数量的增加测试变得更加脆弱因为当问题在于依赖项而不是 SUT 时您可能会得到失败的测试从而导致测试不可靠。 不稳定 - 当 SUT 启动时依赖性可能会导致系统瘫痪从而影响与 SUT 没有明确关联的测试结果。 耗时 - 设置测试数据可能需要数天/数周的时间并且可能容易出错。 不可用性——测试团队可能会花时间等待依赖系统的可用性。 沮丧——事情的人性方面 测试人员 - 您可能会因为无法有效地完成工作而感到沮丧 经理 - 您可能会感到沮丧因为您的团队因工作受阻而浪费时间 为了消除或大大减少这些影响一种解决方案是将 SUT 上执行的测试过程与不受控制的依赖关系解耦。解耦的一种方法是采用存根接口其目标是复制依赖关系的行为。通过这种方式测试过程不会像原始依赖系统那样遇到不可预测的行为。因此测试范围现在将包括存根服务因为它们是测试过程的一部分。因此我们将在图表中的测试范围中添加一个新端点。
要在测试计划中创建存根接口我们需要
添加一个名为存根服务的新系统该系统复制要存根的接口 根据计划的测试过程定义必须存根哪些调用 了解存根是测试套件的一部分并且包含在测试范围内 在上图中我在测试范围中添加了一个新实体存根服务。存根服务在查询时的行为类似于原始依赖项只是它使用与测试范围一致的特定消息进行响应。存根可以重现功能特性以及非功能特性例如响应时间或慢速连接。
让我们了解消息/信息交换的流程
红色箭头与上图具有类似的功能但略有不同测试团队已经使用存根和 SUT 生成了前提条件 绿色箭头 - 是存根接口它从真实的依赖系统中再现所有可能的请求/响应的子集。您如何决定应该存根哪些请求/响应这取决于两个因素 测试覆盖率 - 测试团队必须确保 SUT 的质量。这个目标是通过测试覆盖率来实现的。更多的测试覆盖率需要更复杂的存根。 存根设置工作 - 测试团队负责设置存根接口并维护它们。因此必须相应地分配资源。理解这一点很重要因为某些存根的维护可能很复杂并且与原始测试计划相比工作量可能会变得非常出乎意料。 总结本节存根可能是复杂测试项目成功的关键。
虚拟化作为服务存根的捷径 开发存根服务需要大量的规划和实施工作。有时项目成员会采用快速而肮脏的解决方案来加速软件生命周期活动。他们假设他们需要短时间的存根使用例如开发一项功能、测试一项功能。快速而肮脏的解决方案很有吸引力但它往往会
生命周期很短随着时间的推移无法保证再现性。 仅由一种环境使用通常是开发它的环境。 简单的存根解决方案基于硬编码和/或参数化数据。还有基于数据模型解决方案的更复杂的存根服务。存根服务的设置变得更加复杂有时需要适当的培训但对于具有更广泛目标的项目更建议获得存根服务。
在本文中我们将描述如何使用虚拟化服务来实现存根服务。获取虚拟存根服务可以使存根与环境的其他部分隔离。此外虚拟存根服务可以在以下情况下通过网络迁移存根服务
各部门需要共享存根以便他们可以在子系统开发过程中协作并使用相同的参考。 在测试例如性能测试期间需要改进存根服务基础设施例如计算负载和带宽。 可以使用虚拟化层来创建虚拟存根服务。我们将使用基于 Docker 的虚拟化因为 Docker 可以在隔离的上下文中执行存根仅重现所需的功能。
基于 Docker 的存根服务 Docker提供了轻松设置存根服务并具有高可靠性的可能性。正如我们在之前的文章中所描述的在 Docker 中可以立即重现先前配置的行为。此外虚拟化层创建了一个隔离将存根接口作为外部服务执行。
现在是时候通过一些示例来教我们如何做到这一点了。我将介绍两个容器以及每个容器的一个特定于存根的服务接口。所提出的示例是我自己的它们使用自我分配的需求与商业情况没有任何关联。
SUT大数据Stub基于S3的数据源示例1 在本例中我们需要为基于生成连续数据的S3存储桶的数据源设置存根。该数据可以根据速度、种类和数量来表征。此存根的潜在 SUT 目标是大数据应用程序。
我们对此示例存根的测试要求是
存根生成定义的 kB 大小的随机字符作为 S3 对象 存根定期上传新的 S3 对象 存根将生成的 S3 对象发送到指定的存储桶 通过分析这些需求我们可以提取添加到存根实现中的参数以在启动时自定义存根行为
kbSize - 生成的每个对象的 kB 大小 sheetAtMinute - 每次上传多少个对象的指示 bucket - 描述目标bucket名称