我最近对确定软件可伸缩性测试的模式非常感兴趣。由于不同软件解决方案的可变性,似乎对可扩展性测试软件问题的解决方案与对软件设计和实现问题的解决方案一样多。对我来说,这意味着我们可以为这种广泛使用的测试提炼出一些模式。
为了消除歧义,我会提前说明我使用的是 wikipedia definition可扩展性测试。
我最感兴趣的是提出具有详尽描述的特定模式名称的答案。
最佳答案
我所知道的所有测试场景都使用相同的基本结构进行测试,其中涉及针对一个或多个针对要测试的处理代理的请求者生成大量请求。 Kurt的回答是这个过程的一个很好的例子。通常,您将运行测试以找到一些阈值,并运行一些替代配置(更少的节点、不同的硬件等...)以建立准确的平均数据。
请求者可以是机器、网卡、特定软件或软件中生成请求的线程。它所做的只是生成一个可以以某种方式处理的请求。
处理代理是实际处理请求并返回结果的软件、网卡、机器。
无论您如何处理结果,都决定了您正在进行的测试类型,它们是:
负载/性能测试:这是最常用的一种。处理的结果是看在各种级别或各种配置中处理了多少。同样,Kurt 在上面寻找的是一个例子。
平衡测试:扩展中的一种常见做法是使用负载平衡代理将请求定向到流程代理。设置与负载测试相同,但目标是检查请求的分布。在某些情况下,您需要确保在处理代理之间实现均匀(或尽可能接近可接受的)请求平衡,而在其他情况下,您需要确保处理特定请求者的第一个请求的处理代理处理所有后续请求(通常需要像这样的网络农场)。
数据安全:通过此测试收集结果并比较数据。您在这里寻找的是阻止写入的锁定问题(例如 SQL 死锁),或者数据更改会在可接受的时间内或更短的时间内复制到您使用的各种节点或存储库。
边界测试:这类似于负载测试,只是目标不是处理性能,而是存储多少会影响性能。例如,如果您有一个数据库,在 I/O 性能下降到可接受的水平以下之前,您可以拥有多少行/表/列。
我也会推荐 The Art of Capacity Planning作为关于该主题的优秀书籍。
关于testing - 是否有明确的软件可伸缩性测试模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/924781/