我刚刚在Web应用程序中实现了一个缓存层,现在我想知道QA应该如何测试它,因为缓存对用户是透明的。
我的一个想法是将登录记录在调用填充缓存的代码的方法中,并记录何时从缓存中提取对象以及何时需要从数据库中重新创建对象,然后测试人员可以查看日志以查看是否,例如,每隔10分钟就会从数据库中重新加载某个对象,而不是每一次页面浏览。
但是有人可以针对这种情况提出一些更好的做法吗?
我刚刚在Web应用程序中实现了一个缓存层,现在我想知道QA应该如何测试它,因为缓存对用户是透明的。
我的一个想法是将登录记录在调用填充缓存的代码的方法中,并记录何时从缓存中提取对象以及何时需要从数据库中重新创建对象,然后测试人员可以查看日志以查看是否,例如,每隔10分钟就会从数据库中重新加载某个对象,而不是每一次页面浏览。
但是有人可以针对这种情况提出一些更好的做法吗?
Answers:
一个问题是,缓存本身是否真的应由质量检查部门进行测试。缓存可以提高性能,因此他们可以测试性能差异,以确保满足某些要求。
但是最好对缓存进行测试,无论谁负责。我们使用了性能计数器。如果您的缓存系统利用了这些优势,那么它们很简单。如果有任何方法可以从缓存本身获取计数,那是另一种选择。
使用您的方法也很好。如果将其中任何一项包装在检查结果的自动测试中,则无需查看日志即可找到答案。
您实现了一个缓存(我认为)是因为系统性能不够好。那是与用户相关的东西。质量检查可以检查的内容如下:
请记住,用户(以及扩展的质量检查)并不关心您如何解决问题。他们只关心问题已解决,而没有创造新的问题。无论您实施了缓存,改进了String解析,进行了硬件升级还是在服务器上撒了魔幻仙子,这都是事实。
在黑盒中深埋重要的业务逻辑或系统状态使验证正确的系统行为变得困难。详尽测试系统中单个组件的行为要比整个系统容易。我喜欢通过某种机制显式地公开这些东西,以便可以某种有意义的方式对其进行单元/回归/集成/ QA测试。
缓存的一种选择是公开一个特殊页面,该页面提供有关缓存的一些详细信息(内容,状态等)。这可以帮助调试开发以及潜在地进行生产。如果提供了有关高速缓存预期行为的详细信息,QA也可以使用此页面为高速缓存创建测试用例。使用性能计数器和/或日志文件显式记录缓存行为是另一种不太明显但可行的方法。
请注意,这种方法不能替代端到端性能测试。这是确保缓存本身行为正确的机制。应该使用性能测试来确定缓存是否对性能产生了预期的影响。
还要注意,用实现相同接口的新组件(例如引入缓存)替换系统的组件可能会造成不稳定和看似复杂的变化。在缓存示例中,您正在以以前无状态的状态引入状态,这会创建难以发现或重现的错误。此类更改应始终伴随完整的回归测试,以验证预期的系统行为。
测试性能,如安迪的答案所示。
我发现,在许多组织中实现缓存(和性能)的最大障碍实际上是拥有一个环境,您可以在其中进行良好的性能测试并针对各种实际负载和性能测试运行测试。
为此,您应该建立一个性能测试环境,该环境应尽可能接近并考虑到成本,以反映生产。这可能不是您当前的开发环境,它应该更小,更独立,以便快速进行应用程序开发。开发环境还倾向于使用较少的缓存,因此不能很好地进行生产以进行性能测试。
在性能测试环境中,应用程序应以生产“模式”运行。如果进行生产,则应该使用多个服务器,并且应为生产环境设置数据库连接池和缓存等。
您还需要考虑一种有助于负载测试的工具。
jmeter非常受欢迎,尽管我发现它非常不友好且无法使用。
我使用的另一种方法是curl
使用ruby脚本仅对url 进行编码。
要清楚
您可能还会发现以下链接有用: